Variable an Formularfeld übergeben
Moderator: Moderatoren
Variable an Formularfeld übergeben
ich möchte den Inhalt einer Variablen an ein Formularfeld übergeben.
Wie kann ich das bewerkstelligen?
Ich komm damit irgendwie nicht weiter....
Danke schon mal
Herbert
Wie kann ich das bewerkstelligen?
Ich komm damit irgendwie nicht weiter....
Danke schon mal
Herbert
HerbK
Hallo Herbk,
benötige ein paar mehr Informationen. Was für ein Modul?(Writer, Calc, Draw..),
Was für eine Formularfeld?
Wo ist die Variable?
Ein Formularfeld bekommst du in der Regel mit
oForm.getByName("NamedesFormularfeldes")
oForm ist dabei dein Formularobjekt.
Das entstehende Formularobjektfeld hat dann verschiedene Eigenschaften, je nach Typ des Feldes. Diese kannst du setzen und / oder auslesen.
Gruss
Thomas
benötige ein paar mehr Informationen. Was für ein Modul?(Writer, Calc, Draw..),
Was für eine Formularfeld?
Wo ist die Variable?
Ein Formularfeld bekommst du in der Regel mit
oForm.getByName("NamedesFormularfeldes")
oForm ist dabei dein Formularobjekt.
Das entstehende Formularobjektfeld hat dann verschiedene Eigenschaften, je nach Typ des Feldes. Diese kannst du setzen und / oder auslesen.
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
Hallo Thomas
danke, könnte sein dass das schon die Antwort war...
"Ein Formularfeld bekommst du in der Regel mit
oForm.getByName("NamedesFormularfeldes")"
ich hatte das so verstanden, dass ich mit oForm.getByName("NamedesFormularfeldes") erst den Tabellennamen habe und hier gar nicht erst versucht einen Wert zu übergeben.....
Ich sag Dir aber, ob das mein Fehler war.
Zu deinen Fragen:
ich hole den Wert (Kundennummer as integer) mit einem OOoBasic Script aus einer Datenbanktabelle und erhöhe ihn um eins.
Das Formular ist ein Textdocument (also Writer) (angelegt als Eingabemaske für die Erfassung eines Neukunden.), das Formularfeld ein Eingabefeld numeric.
Wenn ich das Eingabeformular öffne und mit der Maus in das Eingabefeld für die Kundennummer klicke, startet das Script und berechnet die neue Kundennummer. Über eine MSGBox wird sie mir auch angezeigt, nur wie gesagt, in das Eingabefeld hab ich sie nicht bekommen....
Gruss Herbert
"Ein Formularfeld bekommst du in der Regel mit
oForm.getByName("NamedesFormularfeldes")"
ich hatte das so verstanden, dass ich mit oForm.getByName("NamedesFormularfeldes") erst den Tabellennamen habe und hier gar nicht erst versucht einen Wert zu übergeben.....
Ich sag Dir aber, ob das mein Fehler war.
Zu deinen Fragen:
ich hole den Wert (Kundennummer as integer) mit einem OOoBasic Script aus einer Datenbanktabelle und erhöhe ihn um eins.
Das Formular ist ein Textdocument (also Writer) (angelegt als Eingabemaske für die Erfassung eines Neukunden.), das Formularfeld ein Eingabefeld numeric.
Wenn ich das Eingabeformular öffne und mit der Maus in das Eingabefeld für die Kundennummer klicke, startet das Script und berechnet die neue Kundennummer. Über eine MSGBox wird sie mir auch angezeigt, nur wie gesagt, in das Eingabefeld hab ich sie nicht bekommen....
Gruss Herbert
HerbK
Hallo Herbert,
ok, hier ein Codeschnipsel:
Das trägt dir in das Formularfeld "test1" (numerisches Formularfeld) den Wert der Variablen iVariable, in diesem Fall 25 ein.
Dokument ist ein Textdokument, es handelt sich um das erste (meist einzige) Formular.
Gruss
Thomas
ok, hier ein Codeschnipsel:
Code: Alles auswählen
Sub Main
iVariable=25
oDoc=thisComponent
oForm=oDoc.DrawPage.Forms.GetByIndex(0)
oForm.getByName("test1").value=iVariable
End Sub
Dokument ist ein Textdokument, es handelt sich um das erste (meist einzige) Formular.
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
Sub Kundennummer
dim oDoc as object
dim oDrawPage as Object
dim oForm as Object
kdnmmr = 0
kdnmmr = kdnmmr+1
oDoc=thisComponent
oForm=oDoc.DrawPage.Forms.GetByIndex(0)
oForm.getByName("KundeNr").value=kdnmmr
End Sub
ergibt den Basic Laufzeitfehler
Eigenschaft oder Methode nicht gefunden,,,,
Die Varioante aus dem Staroffice Handbuch
dim Doc as object
dim DrawPage as Object
dim Form as Object
Doc = StarDesktop.CurrentComponent
DrawPage = Doc.DrawPage
Form = Doc.DrawPage.Forms.GetByIndex(0)
Form.getByName("KundeNr").value=kdnmmr
ergibt die gleich Fehlermeldung...
wenn ich nach der Fehlermeldung ins Makro wechsle ist die Zeile
Form.getByName("KundeNr").value=kdnmmr
als Verursacher des Fehlers markiert.
hatte jetzt auch noch vermutet, dass ich im falschen Dokument nach Form.getByName("KundeNr") suche. und deshalb den ganzen Anfang, in dem ich den Wert kdnmmr auslese, wozu ja auf ein anderes Dokument verwiesen wird, herausgenommen.
Bringt aber auch keine Besserung...
dim oDoc as object
dim oDrawPage as Object
dim oForm as Object
kdnmmr = 0
kdnmmr = kdnmmr+1
oDoc=thisComponent
oForm=oDoc.DrawPage.Forms.GetByIndex(0)
oForm.getByName("KundeNr").value=kdnmmr
End Sub
ergibt den Basic Laufzeitfehler
Eigenschaft oder Methode nicht gefunden,,,,
Die Varioante aus dem Staroffice Handbuch
dim Doc as object
dim DrawPage as Object
dim Form as Object
Doc = StarDesktop.CurrentComponent
DrawPage = Doc.DrawPage
Form = Doc.DrawPage.Forms.GetByIndex(0)
Form.getByName("KundeNr").value=kdnmmr
ergibt die gleich Fehlermeldung...
wenn ich nach der Fehlermeldung ins Makro wechsle ist die Zeile
Form.getByName("KundeNr").value=kdnmmr
als Verursacher des Fehlers markiert.
hatte jetzt auch noch vermutet, dass ich im falschen Dokument nach Form.getByName("KundeNr") suche. und deshalb den ganzen Anfang, in dem ich den Wert kdnmmr auslese, wozu ja auf ein anderes Dokument verwiesen wird, herausgenommen.
Bringt aber auch keine Besserung...
HerbK
Ok, zwei Probleme bleiben doch noch:
1.
Der Wert des Eingabefeldes "KundeNr" wird nicht an die Datenbanktabelle übergeben.
Wenn ich den vorgegebenen Wert manuel überschreibe wird er übergeben.
hängt wahrscheinlich mit einem Fehler im OOo1.1 zusammen, für welchen es schon ein Issue gibt... (das Issue werd ich ergänzen, denn ich hab noch einige Probs in den Formularfunktionen gefunden)
2.
Das Script funktioniert nur, wenn ich während der Dateneingabe über das Formular dieses nicht verlassen habe.
Wurde es Verlassen, gibt es wieder eine Fehlermeldung...
Das Problem ist aber das oben schon vermutete: Verliert das Document in dem sich das Formular befindet den Fokus, bezieht sich "Doc = StarDesktop.CurrentComponent" oder "oDoc=thisComponent" (konnte keinen Unterschied feststellen) nicht mehr auf dieses document, sondern auf das in der zwischenzeit angesprungene.
Dass dort das Formfield nicht gefunden wird ist logisch.
Was mich jedoch wundert, ist: wenn ich beim zurückkehren in das Document mit dem Eingabeformular direckt in ein Eingabefeld klicke, erhält es den Fokus nicht zurück. Klicke ich zuerst auf den Hintergrund des Documents und dann in ein Eingabefeld, ist der Fokus zurückgeholt und das Skript läuft.....
Die Frage ist nun:
kann ich "Doc = StarDesktop.CurrentComponent" durch etwas wie "Doc = StarDesktop.DocumentName.sxw" ersetzen (so funktioniert nicht) oder wie holt man den Fokus, im Script, zurück?
Gruss Herbert
1.
Der Wert des Eingabefeldes "KundeNr" wird nicht an die Datenbanktabelle übergeben.
Wenn ich den vorgegebenen Wert manuel überschreibe wird er übergeben.
hängt wahrscheinlich mit einem Fehler im OOo1.1 zusammen, für welchen es schon ein Issue gibt... (das Issue werd ich ergänzen, denn ich hab noch einige Probs in den Formularfunktionen gefunden)
2.
Das Script funktioniert nur, wenn ich während der Dateneingabe über das Formular dieses nicht verlassen habe.
Wurde es Verlassen, gibt es wieder eine Fehlermeldung...
Das Problem ist aber das oben schon vermutete: Verliert das Document in dem sich das Formular befindet den Fokus, bezieht sich "Doc = StarDesktop.CurrentComponent" oder "oDoc=thisComponent" (konnte keinen Unterschied feststellen) nicht mehr auf dieses document, sondern auf das in der zwischenzeit angesprungene.
Dass dort das Formfield nicht gefunden wird ist logisch.
Was mich jedoch wundert, ist: wenn ich beim zurückkehren in das Document mit dem Eingabeformular direckt in ein Eingabefeld klicke, erhält es den Fokus nicht zurück. Klicke ich zuerst auf den Hintergrund des Documents und dann in ein Eingabefeld, ist der Fokus zurückgeholt und das Skript läuft.....
Die Frage ist nun:
kann ich "Doc = StarDesktop.CurrentComponent" durch etwas wie "Doc = StarDesktop.DocumentName.sxw" ersetzen (so funktioniert nicht) oder wie holt man den Fokus, im Script, zurück?
Gruss Herbert
HerbK
Hallo Herbert,
die meisten Probleme hast du ja schon selbst beantwortet. Um den Wert an eine Datenbanktabelle zu übergeben, nutze doch einfach direkt das Makro, d.h. schreibe sowohl den Wert in das Datenbankfeld als auch in das Formularfeld.
2.
Ein normales Verhalten. Da das Formular quasi auf dem Dokument aufliegt, muss zuerst das Dokument den Fokus erhalten, dann erst kannst du das Formular ansprechen.
Ich verstehe allerdings die Problematik nicht ganz. Wieso "läuft " das Makro weiter, wenn du das Dokument wechselst, sprich den Fokus veränderst?
Vielleicht ist die Logik nicht OK??
Das Dokumentenobjekt kannst du die auch anders holen als durch "StarDesktop.CurrentComponent" oder "ThisComponent" (bezieht sich jeweils auf das aktive Dokument.), zum Beispiel durch LoadComponentfromURL() oder ähnliches.
Frage also: Wie sieht deine Datenbanktabelle aus? ein Calc-Dokument?
Gruss
Thomas
die meisten Probleme hast du ja schon selbst beantwortet. Um den Wert an eine Datenbanktabelle zu übergeben, nutze doch einfach direkt das Makro, d.h. schreibe sowohl den Wert in das Datenbankfeld als auch in das Formularfeld.
2.
Ein normales Verhalten. Da das Formular quasi auf dem Dokument aufliegt, muss zuerst das Dokument den Fokus erhalten, dann erst kannst du das Formular ansprechen.
Ich verstehe allerdings die Problematik nicht ganz. Wieso "läuft " das Makro weiter, wenn du das Dokument wechselst, sprich den Fokus veränderst?
Vielleicht ist die Logik nicht OK??
Das Dokumentenobjekt kannst du die auch anders holen als durch "StarDesktop.CurrentComponent" oder "ThisComponent" (bezieht sich jeweils auf das aktive Dokument.), zum Beispiel durch LoadComponentfromURL() oder ähnliches.
Frage also: Wie sieht deine Datenbanktabelle aus? ein Calc-Dokument?
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
Die meisten Probleme sind ja nur aus meiner dummheit entstanden....
zu 1
werden dann nicht 2 Datensätze draus? Ich wollte das aber auch mal probieren...
Zu 2
zum Verhalten ist mir schon klar, dass es so normal ist.
Über das Formular sollen Adressdaten eingegeben werden, und da kann es schon mal vorkommen, dass man zum nachsehen z.B. in der Email noch mal nachsehen muss. und schon ist das Formular nicht mehr aktiv.
Ansprechen, d.H. daten eingeben kann ich schon direkt (also ohne vorher das Dokument anzuklicken) nur das Makro funktioniert nicht, weil es ja am Dokument hängt. - kann man das nicht ans Formular hängen?
Die datenbanktabelle ist eine dbase - eine Calc währe mir eigentlich lieber, doch da funktioniert das Eingeben via Formular nicht.
Eigentlich wollte ich ja auf Postgres aufsetzen, doch als erstes sprach dagegen, dass das OOo nach dem Installieren der ODBC Treiber fast 2 Minuten gebraucht hat um ein neues Dokument zu öffnen (jedes, auch ohne jede Anbindung)
Im nachhinein hat es sich aber gar nicht als so schlecht herausgestellt Postgres nicht zu verwenden.
Ich bastel da an einem kleinem Faktura/Buchhaltungssystem für kleine firmen und "Ich AGs" (Einzelunternehmer) mit OOo als Frontend. --> Rechnungserstellung mit OOo Calc mit direkter Datenübergabe an die Buchführung.
Und da währe das ganze mit der Postgres (oder einer anderen SQL DB) installation sicher zu schwiehrig geworden.
Wenn Dich das Projekt interessiert kannst Du die jeweils letzte Verion auf meiner hp holen (etwasschleichwerbungmach) http://www.linuxladen.tk unter software die Rechnungsvorlage.
Als Mustervorlage hab ichs auch schon nach OO gegeben - wird da gerade geprüft.
Gruss Herbert

zu 1
werden dann nicht 2 Datensätze draus? Ich wollte das aber auch mal probieren...
Zu 2
zum Verhalten ist mir schon klar, dass es so normal ist.
Über das Formular sollen Adressdaten eingegeben werden, und da kann es schon mal vorkommen, dass man zum nachsehen z.B. in der Email noch mal nachsehen muss. und schon ist das Formular nicht mehr aktiv.
Ansprechen, d.H. daten eingeben kann ich schon direkt (also ohne vorher das Dokument anzuklicken) nur das Makro funktioniert nicht, weil es ja am Dokument hängt. - kann man das nicht ans Formular hängen?
Die datenbanktabelle ist eine dbase - eine Calc währe mir eigentlich lieber, doch da funktioniert das Eingeben via Formular nicht.
Eigentlich wollte ich ja auf Postgres aufsetzen, doch als erstes sprach dagegen, dass das OOo nach dem Installieren der ODBC Treiber fast 2 Minuten gebraucht hat um ein neues Dokument zu öffnen (jedes, auch ohne jede Anbindung)
Im nachhinein hat es sich aber gar nicht als so schlecht herausgestellt Postgres nicht zu verwenden.
Ich bastel da an einem kleinem Faktura/Buchhaltungssystem für kleine firmen und "Ich AGs" (Einzelunternehmer) mit OOo als Frontend. --> Rechnungserstellung mit OOo Calc mit direkter Datenübergabe an die Buchführung.
Und da währe das ganze mit der Postgres (oder einer anderen SQL DB) installation sicher zu schwiehrig geworden.
Wenn Dich das Projekt interessiert kannst Du die jeweils letzte Verion auf meiner hp holen (etwasschleichwerbungmach) http://www.linuxladen.tk unter software die Rechnungsvorlage.
Als Mustervorlage hab ichs auch schon nach OO gegeben - wird da gerade geprüft.
Gruss Herbert
HerbK