Zugriff auf Formularfeld mit Makro

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

AhQ
*******
Beiträge: 1096
Registriert: Fr, 15.06.2007 11:03
Wohnort: Regensburg
Kontaktdaten:

Zugriff auf Formularfeld mit Makro

Beitrag von AhQ »

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
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Zugriff auf Formularfeld mit Makro

Beitrag von Toxitom »

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:

Code: Alles auswählen

dim iNum as double 
iNum = thisComponent.drawpage.forms.getByName("Formular1").getByName("ID").value
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 :-)
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
AhQ
*******
Beiträge: 1096
Registriert: Fr, 15.06.2007 11:03
Wohnort: Regensburg
Kontaktdaten:

Re: Zugriff auf Formularfeld mit Makro

Beitrag von AhQ »

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
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Zugriff auf Formularfeld mit Makro

Beitrag von Toxitom »

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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
AhQ
*******
Beiträge: 1096
Registriert: Fr, 15.06.2007 11:03
Wohnort: Regensburg
Kontaktdaten:

Re: Zugriff auf Formularfeld mit Makro

Beitrag von AhQ »

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!
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Zugriff auf Formularfeld mit Makro

Beitrag von Toxitom »

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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zugriff auf Formularfeld mit Makro

Beitrag von komma4 »

Code: Alles auswählen

thisComponent.drawpage.forms.getByName("gafuform").getByName("gafufeld1").Text =thisComponent.drawpage.forms.getByName("gafuform").getByName("gafufeld2").Text
ja - das geht:

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)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zugriff auf Formularfeld mit Makro

Beitrag von komma4 »

Das liegt daran, dass Du noch einen Fehler in der Codierung hast.... ich sehe es gerade aber nicht ... :wink:
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)
Antworten