Zugriff auf Formularfeld mit Makro
Moderator: Moderatoren
Zugriff auf Formularfeld mit Makro
Hallo,
ich habe folgendes Problem:
Ich habe in einer Base-Datenbank (unter anderem) zwei Tabellen, die miteinander verknüpft sind. In einer sind Daten von Kunden abgelegt (Tabellenname: "Kundendaten"), in einer die Zeiten, wann diese das letzte Mal angerufen wurden und welches Ergebnis dabei erzielt wurde (Tabellenname: "Anruf").
In einem Formular habe ich mir die Daten der "Kundendaten"-Tabelle mit einem Sub-Formular der "Anruf"-Tabelle verknüpft, was auch soweit einwandfrei funktioniert.
Nun baute ich mir eine Schaltfläche, die mir via Makro einen Dialog öffnet, in dem ich automatisch auf Knopfdruck das Anrufdatum und die Anrufzeit erfasse sowie das Anrufergebnis eingeben kann.
Dank intensiver Suche auf diesem Forum und dem Makrobuch von Thomas Krumbein gelang es mir als absoluten Makro-Laien, diese Dialogfelderinhalte mittels ...getControl.. und eines "INSERT INTO"-Befehls in die "Anruf"-Tabelle zu schreiben.
Leider fiel mir dann auf, daß ich die Datensatz-Id der "Kundendaten"-Tabelle so nicht einfach übernehmen kann (die steht im Formular und nicht in dem Dialogfeld), womit letztlich die Verknüpfung der beiden Tabellen hinfällig ist. Der Primitivweg (ich baue ein weiteres Feld in den Dialog, schreibe händisch die Id rein und übernehme das dann in die "Anruf"-Tabelle) ist zwar möglich, ich hätte es gerne aber automatisiert.
Meine Frage ist daher: Wie kann ich auf das Id-Feld des Formulars zugreifen, um da die jeweils aktuelle Id in das Makro mit reinzubringen, damit der "INSERT INTO"-Befehl die Id mit in die "Anruf"-Tabelle übernimmt? Leider habe ich hierzu im Forum nichts brauchbares gefunden (war ich blind oder gibts dazu hier noch nichts?) und auch mit dem Angaben in dem schlauen Makro-Büchlein konnte ich nicht viel anfangen ("Dieses Objekt kann behandelt werden, wie unter dem Abschnitt "Writer beschrieben" - und ab da verließen sie mich leider...)
Ich hoffe, mein Problem verständlich geschildert zu haben!
Danke schonmal im Voraus
AhQ
ich habe folgendes Problem:
Ich habe in einer Base-Datenbank (unter anderem) zwei Tabellen, die miteinander verknüpft sind. In einer sind Daten von Kunden abgelegt (Tabellenname: "Kundendaten"), in einer die Zeiten, wann diese das letzte Mal angerufen wurden und welches Ergebnis dabei erzielt wurde (Tabellenname: "Anruf").
In einem Formular habe ich mir die Daten der "Kundendaten"-Tabelle mit einem Sub-Formular der "Anruf"-Tabelle verknüpft, was auch soweit einwandfrei funktioniert.
Nun baute ich mir eine Schaltfläche, die mir via Makro einen Dialog öffnet, in dem ich automatisch auf Knopfdruck das Anrufdatum und die Anrufzeit erfasse sowie das Anrufergebnis eingeben kann.
Dank intensiver Suche auf diesem Forum und dem Makrobuch von Thomas Krumbein gelang es mir als absoluten Makro-Laien, diese Dialogfelderinhalte mittels ...getControl.. und eines "INSERT INTO"-Befehls in die "Anruf"-Tabelle zu schreiben.
Leider fiel mir dann auf, daß ich die Datensatz-Id der "Kundendaten"-Tabelle so nicht einfach übernehmen kann (die steht im Formular und nicht in dem Dialogfeld), womit letztlich die Verknüpfung der beiden Tabellen hinfällig ist. Der Primitivweg (ich baue ein weiteres Feld in den Dialog, schreibe händisch die Id rein und übernehme das dann in die "Anruf"-Tabelle) ist zwar möglich, ich hätte es gerne aber automatisiert.
Meine Frage ist daher: Wie kann ich auf das Id-Feld des Formulars zugreifen, um da die jeweils aktuelle Id in das Makro mit reinzubringen, damit der "INSERT INTO"-Befehl die Id mit in die "Anruf"-Tabelle übernimmt? Leider habe ich hierzu im Forum nichts brauchbares gefunden (war ich blind oder gibts dazu hier noch nichts?) und auch mit dem Angaben in dem schlauen Makro-Büchlein konnte ich nicht viel anfangen ("Dieses Objekt kann behandelt werden, wie unter dem Abschnitt "Writer beschrieben" - und ab da verließen sie mich leider...)
Ich hoffe, mein Problem verständlich geschildert zu haben!
Danke schonmal im Voraus
AhQ
Re: Zugriff auf Formularfeld mit Makro
Hey AhQ,
hmm, also wenn du das alles aus meinem "schlauen Buch" herausgfelesen und zusammengebaut hast, so sollte dir der Rest auch nicht schwer fallen.
Formulare sind Teil der Drawpage eines Writerdokumentes - und Kontrollelemete Teile des Formulars. Ansosnten sind die Eigenschaften der Formularfelder fast identisch mit denen der Dialogbox.
Also, um an den Inhalt des Formularfeldes (Zahlenfeld) mit Namen "ID" im Formular mit Namen "Formular1" des aktuellen Dokumentes zu kommen, reicht folgender Aufruf:
Na ja, und jetzt kannst du den Wert entweder in deinen Dialog schreiben oder auch direkt in deinen Insert-Befehl 
Viele Grüße
Thomas
PS: Da kein Buch alles beschreiben kann und das Makro-Büchlein eben die Grundlagen beschreibt, schau dir doch mal das Base-Buch an (in einer Bibliothek...). Da habe ich mehrere Basic-Beispiel zu Formularen und Dialogen drin - ausführlicher, setzt aber eben die Grundlagen voraus. Na, und die hast du ja jetzt
hmm, also wenn du das alles aus meinem "schlauen Buch" herausgfelesen und zusammengebaut hast, so sollte dir der Rest auch nicht schwer fallen.
Formulare sind Teil der Drawpage eines Writerdokumentes - und Kontrollelemete Teile des Formulars. Ansosnten sind die Eigenschaften der Formularfelder fast identisch mit denen der Dialogbox.
Also, um an den Inhalt des Formularfeldes (Zahlenfeld) mit Namen "ID" im Formular mit Namen "Formular1" des aktuellen Dokumentes zu kommen, reicht folgender Aufruf:
Code: Alles auswählen
dim iNum as double
iNum = thisComponent.drawpage.forms.getByName("Formular1").getByName("ID").value

Viele Grüße
Thomas
PS: Da kein Buch alles beschreiben kann und das Makro-Büchlein eben die Grundlagen beschreibt, schau dir doch mal das Base-Buch an (in einer Bibliothek...). Da habe ich mehrere Basic-Beispiel zu Formularen und Dialogen drin - ausführlicher, setzt aber eben die Grundlagen voraus. Na, und die hast du ja jetzt

Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Re: Zugriff auf Formularfeld mit Makro
Hallo Toxitom,
danke für die schnelle Antwort.
Ich hab jetzt den ganzen Vormittag versucht, das Formularfeld, so wie von Dir empfohlen, auszulesen, doch leider ist mein eiziger Erfolg eine Fehlermeldung mit dem Inhalt: "BASIC - Laufzeitfehler, Es ist eine Exception aufgetreten, Type: com.sun.star.container.NoSuchElementException Messge: ."
Was gefällt da dem Makro nicht? Bringt es was, wenn ich den Code hier mal poste?
Schöne Grüße
AhQ
danke für die schnelle Antwort.
Ich hab jetzt den ganzen Vormittag versucht, das Formularfeld, so wie von Dir empfohlen, auszulesen, doch leider ist mein eiziger Erfolg eine Fehlermeldung mit dem Inhalt: "BASIC - Laufzeitfehler, Es ist eine Exception aufgetreten, Type: com.sun.star.container.NoSuchElementException Messge: ."
Was gefällt da dem Makro nicht? Bringt es was, wenn ich den Code hier mal poste?
Schöne Grüße
AhQ
Re: Zugriff auf Formularfeld mit Makro
Hey AhQ,
tia, dein Formularfeld ist eben nicht im Container - das sagt die Fehlermeldung aus. Ist der Name richtig geschrieben? (Achtung, Case-Sensitiv!) Gibt es das Control auch wirklich in dem angesprochenen Formular? Meist hat man ja mehrere Formulare - und die haben dann unterschiedliche Namen...
Natürlich kann es immer etwas bringen, den Code zu posten - hier allerdings brauchen wir auch die exakten Infos über das Formular und /oder den Dialog.
Also, zweistufig vorgehen: zuerst Code posten mit der Stelle, die den Fehler auslöst. Hilft es nichts, dann musst du die Datei mit allen Teilen (also Formularen, Dialogen, Basic-Modulen etc) bereitstellen - nur dann könen wir wirksam das Problem "bekämpfen"
Gruss
Thomas
tia, dein Formularfeld ist eben nicht im Container - das sagt die Fehlermeldung aus. Ist der Name richtig geschrieben? (Achtung, Case-Sensitiv!) Gibt es das Control auch wirklich in dem angesprochenen Formular? Meist hat man ja mehrere Formulare - und die haben dann unterschiedliche Namen...
Natürlich kann es immer etwas bringen, den Code zu posten - hier allerdings brauchen wir auch die exakten Infos über das Formular und /oder den Dialog.
Also, zweistufig vorgehen: zuerst Code posten mit der Stelle, die den Fehler auslöst. Hilft es nichts, dann musst du die Datei mit allen Teilen (also Formularen, Dialogen, Basic-Modulen etc) bereitstellen - nur dann könen wir wirksam das Problem "bekämpfen"

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Re: Zugriff auf Formularfeld mit Makro
Juhu!
Als ich dann kapiert hab, daß der von Toxitom geschrieben Formularname ungefähr gar nix mit dem Namen zu tun hat, den man in Base sieht, sondern daß es der ist, den man in den Formulareigenschaften findet, lief das Makro plötzlich wie am Schürchen.
Super, vielen Dank!
Als ich dann kapiert hab, daß der von Toxitom geschrieben Formularname ungefähr gar nix mit dem Namen zu tun hat, den man in Base sieht, sondern daß es der ist, den man in den Formulareigenschaften findet, lief das Makro plötzlich wie am Schürchen.
Super, vielen Dank!
Re: Zugriff auf Formularfeld mit Makro
Hey Gabriel,
das mit dem Nachlesen - schau mal im ersten Thread des Basic-Forums nach, dort sind viele Literaturstellen angeführt. Und es gibt natürlich auch Bücher
Zu deinem Problem:
Heisst dein Formular wirklich "MainForm"? Ist der Name deines Formularfeldes wirklich "TextBox1"? (Achtung, Groß- und Kleinschreibung wird unterschieden. Ist dein Formularfeld auch wirklich ein numerisches Feld? Nur dann gibt es eine Eigenschaft "value"! Der Name "TextBox1" deutet eher auf ein Textfeld hin - da gibt es keine Value-Eigenschaft, sondern nur eine "Text" eigenschaft - die dir den Inhalt dieses Feldes liefert. Die darfst du natürlich dann auch nicht einer numerischen Variablen zuordnen - das würde zu Chaos führen.
Und schliesslich:
Auch in OOo kannst du den Inhalt eines Feldes dem eines anderen Feldes zuweisen, im Prinzip ähnlich wie in Delphi, nur die Syntax ist natürlich etwas anders
Gruss
Thomas
das mit dem Nachlesen - schau mal im ersten Thread des Basic-Forums nach, dort sind viele Literaturstellen angeführt. Und es gibt natürlich auch Bücher

Zu deinem Problem:
Heisst dein Formular wirklich "MainForm"? Ist der Name deines Formularfeldes wirklich "TextBox1"? (Achtung, Groß- und Kleinschreibung wird unterschieden. Ist dein Formularfeld auch wirklich ein numerisches Feld? Nur dann gibt es eine Eigenschaft "value"! Der Name "TextBox1" deutet eher auf ein Textfeld hin - da gibt es keine Value-Eigenschaft, sondern nur eine "Text" eigenschaft - die dir den Inhalt dieses Feldes liefert. Die darfst du natürlich dann auch nicht einer numerischen Variablen zuordnen - das würde zu Chaos führen.
Und schliesslich:
Auch in OOo kannst du den Inhalt eines Feldes dem eines anderen Feldes zuweisen, im Prinzip ähnlich wie in Delphi, nur die Syntax ist natürlich etwas anders

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Zugriff auf Formularfeld mit Makro
Code: Alles auswählen
thisComponent.drawpage.forms.getByName("gafuform").getByName("gafufeld1").Text =thisComponent.drawpage.forms.getByName("gafuform").getByName("gafufeld2").Text
Code: Alles auswählen
oForm = thisComponent.drawpage.forms.getByName("gafuform")
With oForm
.getByName("gafufeld1").Text = .getByName("gafufeld2").Text
End With
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Zugriff auf Formularfeld mit Makro
Das liegt daran, dass Du noch einen Fehler in der Codierung hast.... ich sehe es gerade aber nicht ... 

Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)