Variable an Formularfeld übergeben

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

herbk
**
Beiträge: 36
Registriert: Fr, 16.01.2004 14:29
Kontaktdaten:

Variable an Formularfeld übergeben

Beitrag von herbk »

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

Beitrag von Toxitom »

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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
herbk
**
Beiträge: 36
Registriert: Fr, 16.01.2004 14:29
Kontaktdaten:

Hallo Thomas

Beitrag von herbk »

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

Beitrag von Toxitom »

Hallo Herbert,

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
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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
herbk
**
Beiträge: 36
Registriert: Fr, 16.01.2004 14:29
Kontaktdaten:

Beitrag von herbk »

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...
HerbK
herbk
**
Beiträge: 36
Registriert: Fr, 16.01.2004 14:29
Kontaktdaten:

Beitrag von herbk »

Ähm... rotwerd :oops:

wenn man bei Formularfeld nicht nur sagt es sei numeric, sondern es auch numeric macht bekommt man die Fehlermeldung nicht....
schäm...

Trotzdem, oder gerade deshalb, vielen Dank für die Hilfe

Herbert
HerbK
herbk
**
Beiträge: 36
Registriert: Fr, 16.01.2004 14:29
Kontaktdaten:

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

Beitrag von Toxitom »

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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
herbk
**
Beiträge: 36
Registriert: Fr, 16.01.2004 14:29
Kontaktdaten:

Beitrag von herbk »

Die meisten Probleme sind ja nur aus meiner dummheit entstanden.... :roll:

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
Antworten