🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Ergebnis einer Query in Makro weiterverarbeiten
-
- Beiträge: 13
- Registriert: Mo 25. Jun 2012, 09:50
- Wohnort: Kiel
Ergebnis einer Query in Makro weiterverarbeiten
Hi zusammen,
ich möchte gerne in einem Formular das Folgende tun:
- aus einem Listenfeld übernehme ich mir den aktuell ausgewählten Wert (einen Text) - das klappt.
- mit diesem Wert führe ich ein SQL aus und versuche die ID des Wertes zu ermitteln - das klappt im Makro nicht, führe ich nur das SQL über Extras - SQL aus funktioniert es. Das Ergebnis der SQL-Ausführung im Makro scheint fehlerfrei, es erscheint aber nur eine leere Message-Box (lasse ich mir zu Testzwecken ausgeben), also ohne die erwartete ID. Versuche ich den einzelnen Wert des Ergebnisses des SQL mit getString(1) auszulesen bekomme ich den Fehler "No data is available".
Ausgeführt wird die Query mit executeQuery, nicht mit execute. Darüber bin ich zuerst gestolpert...
Wie geht ich also richtig mit dem Ergebnis des SQL um?
Danke für Eure Hilfe!
ich möchte gerne in einem Formular das Folgende tun:
- aus einem Listenfeld übernehme ich mir den aktuell ausgewählten Wert (einen Text) - das klappt.
- mit diesem Wert führe ich ein SQL aus und versuche die ID des Wertes zu ermitteln - das klappt im Makro nicht, führe ich nur das SQL über Extras - SQL aus funktioniert es. Das Ergebnis der SQL-Ausführung im Makro scheint fehlerfrei, es erscheint aber nur eine leere Message-Box (lasse ich mir zu Testzwecken ausgeben), also ohne die erwartete ID. Versuche ich den einzelnen Wert des Ergebnisses des SQL mit getString(1) auszulesen bekomme ich den Fehler "No data is available".
Ausgeführt wird die Query mit executeQuery, nicht mit execute. Darüber bin ich zuerst gestolpert...
Wie geht ich also richtig mit dem Ergebnis des SQL um?
Danke für Eure Hilfe!
Verwende Libre Office 4.1.5.3
Re: Ergebnis einer Query in Makro weiterverarbeiten
Hallo Originalgangsta,
Du liest alle Werte nacheinander aus. Kommen mehrere Werte, so wird in dem obigen Fall nur der letzte Wert zum Schluss noch in der Variablen "inFeldWert" gespeichert sein. Du kannst natürlich innerhalb der Schleife jeweils auf das Abfrageergebnis zugreifen oder auch die gesamten Ergebnisse in einem Array speichern.
Mit getString(1) - wie in Deinem Beitrag geschrieben - kannst Du nurd den Inhalt von Textfeldern korrekt auslesen. Sollte Deine ID also tatsächlich ein Textfeld sein, so müsste das natürlich stattdessen dort stehen.
Gruß
Robert
Vielleicht hilft dieser Ausschnitt eines Makros:Originalgangsta hat geschrieben: Wie geht ich also richtig mit dem Ergebnis des SQL um?
Code: Alles auswählen
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
oVerbindung = oDatenquelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()
stSql = "SELECT ""ID"" FROM ""Tabelle"""
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)' Ergebnis auswerten
WHILE oAbfrageergebnis.next
inFeldWert = oAbfrageergebnis.getInt(1)
WEND ' nächster Datensatz
Mit getString(1) - wie in Deinem Beitrag geschrieben - kannst Du nurd den Inhalt von Textfeldern korrekt auslesen. Sollte Deine ID also tatsächlich ein Textfeld sein, so müsste das natürlich stattdessen dort stehen.
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
-
- Beiträge: 13
- Registriert: Mo 25. Jun 2012, 09:50
- Wohnort: Kiel
Re: Ergebnis einer Query in Makro weiterverarbeiten
Hi Robert,
das war auf jeden Fall der richtige Tip! Auch das Durchlaufen der Schleife für den Fall, daß es eine Ergebnisliste zurückgibt, habe ich hinbekommen, das mit dem Speichern in ein Array und die Übergabe desselben an eine Listbox jedoch noch nicht. Freue mich wenn Du auch hierzu einen Tip für mich hast!
Besten Dank und einen schönen Sonntagabend!
das war auf jeden Fall der richtige Tip! Auch das Durchlaufen der Schleife für den Fall, daß es eine Ergebnisliste zurückgibt, habe ich hinbekommen, das mit dem Speichern in ein Array und die Übergabe desselben an eine Listbox jedoch noch nicht. Freue mich wenn Du auch hierzu einen Tip für mich hast!
Besten Dank und einen schönen Sonntagabend!
Verwende Libre Office 4.1.5.3
Re: Ergebnis einer Query in Makro weiterverarbeiten
Hallo Originalgangsta,
Du möchtest den Inhalt einer Abfrage in einem Array speichern?
ist so etwas wie
Damit hast Du die Ergebnisse der Abfrage in einem zweidimensionalen Array. Wenn Du nur ein Element abfragst, dann reicht natürlich ein eindimensionales Array.
Das mit der Listbox habe ich so nicht verstanden. Die befüllst Du doch vermutlich über eine Abfrage. Wenn sich da Inhalt verändert hat, dann reicht ein oListbox.refresh.
Gruß
Robert
Du möchtest den Inhalt einer Abfrage in einem Array speichern?
ist so etwas wie
Code: Alles auswählen
WHILE oAbfrageergebnis.next
ReDim Preserve ar(inZaehler,0 to 1)
ar(inZaehler,0) = oAbfrageergebnis.getString(1)
ar(inZaehler,1) = oAbfrageergebnis.getString(2)
....
Das mit der Listbox habe ich so nicht verstanden. Die befüllst Du doch vermutlich über eine Abfrage. Wenn sich da Inhalt verändert hat, dann reicht ein oListbox.refresh.
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
-
- Beiträge: 13
- Registriert: Mo 25. Jun 2012, 09:50
- Wohnort: Kiel
Re: Ergebnis einer Query in Makro weiterverarbeiten
Hi Robert,
o.k., den Tip habe ich umsetzen können, aber es bringt mir wieder zu weiteren Fragen:
1. Wenn ich das array gefüllt habe, kann ich es mir als Ganzes in einer Messagebox ausgeben lassen (zu QS-Zwecken)? Innerhalb der Schleife den jeweils verarbeiteten Eintrag ja, aber das Gesamtergebnis?
2. Nun zur Listbox. Das Ergebnis des SQL, daß ich in dem array speichere, soll eigentlich der Input für die nächste Listbox in dem Formular sein. Weiteres Lesen bringt mich zu der Annahme, daß ich die Verarbeitung im array sein lassen kann und statt dessen das Ergebnis des SQl direkt als source für die Listbox nutzen kann. Das bekomme ich leider nicht hin. Mein Ansatz wie folgt:
oForm = thiscomponent.drawpage.forms.getByName("mfrm")
oListfeld2 = oForm.getByName("lst_mfrm_organisation")
oListfeld2.ListSourceType = Query
sSQL2 = "SELECT ..."
oListfeld2.ListSource = sSQL2
oListfeld2.refresh
Als Meldung bekomme ich in der vorletzten Zeile "Objektvariable nicht belegt".
Warum?
In der Listbox soll man dann einen Eintrag auswählen, der in der zweiten (ganz rechten) Spalte die am Ende zu speichernde ID enthält - das wird dann die nächste Herausforderung...
Und ist das der "richtige" Weg zu meinem Ziel?
Danke!
Beste Grüße,
OG
o.k., den Tip habe ich umsetzen können, aber es bringt mir wieder zu weiteren Fragen:
1. Wenn ich das array gefüllt habe, kann ich es mir als Ganzes in einer Messagebox ausgeben lassen (zu QS-Zwecken)? Innerhalb der Schleife den jeweils verarbeiteten Eintrag ja, aber das Gesamtergebnis?
2. Nun zur Listbox. Das Ergebnis des SQL, daß ich in dem array speichere, soll eigentlich der Input für die nächste Listbox in dem Formular sein. Weiteres Lesen bringt mich zu der Annahme, daß ich die Verarbeitung im array sein lassen kann und statt dessen das Ergebnis des SQl direkt als source für die Listbox nutzen kann. Das bekomme ich leider nicht hin. Mein Ansatz wie folgt:
oForm = thiscomponent.drawpage.forms.getByName("mfrm")
oListfeld2 = oForm.getByName("lst_mfrm_organisation")
oListfeld2.ListSourceType = Query
sSQL2 = "SELECT ..."
oListfeld2.ListSource = sSQL2
oListfeld2.refresh
Als Meldung bekomme ich in der vorletzten Zeile "Objektvariable nicht belegt".
Warum?
In der Listbox soll man dann einen Eintrag auswählen, der in der zweiten (ganz rechten) Spalte die am Ende zu speichernde ID enthält - das wird dann die nächste Herausforderung...
Und ist das der "richtige" Weg zu meinem Ziel?
Danke!
Beste Grüße,
OG
Verwende Libre Office 4.1.5.3
Re: Ergebnis einer Query in Makro weiterverarbeiten
Hi,
die Listsource ist ein Array, also daher:
HTH R
die Listsource ist ein Array, also daher:
Code: Alles auswählen
dim sSQL2(0) as string
oForm = thiscomponent.drawpage.forms.getByName("mfrm")
oListfeld2 = oForm.getByName("lst_mfrm_organisation")
oListfeld2.ListSourceType = Query
sSQL2(0) = "SELECT ..."
oListfeld2.ListSource = sSQL2
oListfeld2.refresh
Windows 11: AOO, LO Linux Mint: AOO, LO
-
- Beiträge: 13
- Registriert: Mo 25. Jun 2012, 09:50
- Wohnort: Kiel
Re: Ergebnis einer Query in Makro weiterverarbeiten
Hallo,
der Hinweis bringt insofern die Lösung als daß ich die SQL-Abfrage nach Ausführung des Makros in der Quelle des Listenfeldes (Eigenschaften) sehe. Die Daten werden jedoch nicht angezeigt, wenn ich also das Listenfeld im Formular aufklappe ist es leer. Die Einstellungen des Listenfeldes bzgl. seiner Art steht auf "Werteliste", habe aber auch mit anderen Einstellungen getestet. Wodran kann der Fehler liegen?
Der Vollständigkeit halber hier nochmal der aktuelle Inhalt des Makros:
Danke!
OG
der Hinweis bringt insofern die Lösung als daß ich die SQL-Abfrage nach Ausführung des Makros in der Quelle des Listenfeldes (Eigenschaften) sehe. Die Daten werden jedoch nicht angezeigt, wenn ich also das Listenfeld im Formular aufklappe ist es leer. Die Einstellungen des Listenfeldes bzgl. seiner Art steht auf "Werteliste", habe aber auch mit anderen Einstellungen getestet. Wodran kann der Fehler liegen?
Der Vollständigkeit halber hier nochmal der aktuelle Inhalt des Makros:
Code: Alles auswählen
dim sSQL2(0) as string
oForm = thiscomponent.drawpage.forms.getByName("mfrm")
oListfeld2 = oForm.getByName("lst_mfrm_organisation")
oListfeld2.ListSourceType = Query
sSQL2(0) = "SELECT ... "
oListfeld2.ListSource = sSQL2
oListfeld2.refresh
OG
Verwende Libre Office 4.1.5.3
Re: Ergebnis einer Query in Makro weiterverarbeiten
Hallo OG,
1. Es handelt sich um "SQL", nicht um eine "Werteliste". Art des Listenfeldinhaltes ist also "SQL". Der ListSorceType ist meines Wissens eine Integer-Variable. Da müsste '3' stehen für SQL. Wenn das aber schon voreingestellt ist kannst Du diese Bestimmung gut raus lassen.
2. In dem Select-Befehl muss zuerst der anzuzeigende Inhalt und als 2. Feld der Fremdschlüssel stehen, der in die Tabelle eingegeben werden soll - vorausgesetzt das gebundene Feld ist '1'.
Wie lautet denn Dein SQL-Befehl?
Gruß
Robert
1. Es handelt sich um "SQL", nicht um eine "Werteliste". Art des Listenfeldinhaltes ist also "SQL". Der ListSorceType ist meines Wissens eine Integer-Variable. Da müsste '3' stehen für SQL. Wenn das aber schon voreingestellt ist kannst Du diese Bestimmung gut raus lassen.
2. In dem Select-Befehl muss zuerst der anzuzeigende Inhalt und als 2. Feld der Fremdschlüssel stehen, der in die Tabelle eingegeben werden soll - vorausgesetzt das gebundene Feld ist '1'.
Wie lautet denn Dein SQL-Befehl?
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
-
- Beiträge: 13
- Registriert: Mo 25. Jun 2012, 09:50
- Wohnort: Kiel
Re: Ergebnis einer Query in Makro weiterverarbeiten
Hi Robert,
zu 1.: Umgestellt (Sourcetype = 3, Listenart = SQL), funktioniert.
zu 2.: das Select liefert die Felder wie von Dir beschrieben, speichert die ID aber nicht in die zugrunde liegende Tabelle. Das SQL (aus dem Makro kopiert) lautet:
Danke!
Gruß,
OG
zu 1.: Umgestellt (Sourcetype = 3, Listenart = SQL), funktioniert.
zu 2.: das Select liefert die Felder wie von Dir beschrieben, speichert die ID aber nicht in die zugrunde liegende Tabelle. Das SQL (aus dem Makro kopiert) lautet:
Code: Alles auswählen
"SELECT ""tbl_land"".""Land"" || ', ' || ""tbl_organisation"".""Organisation"" AS ""Organisation"", ""tbl_organisation"".""ID_organisation"" FROM ""tbl_region"", ""tbl_land"", ""tbl_gebiet"", ""mtbl_hersteller"", ""tbl_organisation"" WHERE ""tbl_region"".""ID_land"" = ""tbl_land"".""ID_land"" and ""tbl_land"".""ID_land"" = '" & SQL_LandID & "' AND ""tbl_gebiet"".""ID_region"" = ""tbl_region"".""ID_region"" AND ""mtbl_hersteller"".""ID_gebiet"" = ""tbl_gebiet"".""ID_gebiet"" AND ""mtbl_hersteller"".""ID_organisation"" = ""tbl_organisation"".""ID_organisation"" ORDER BY ""tbl_land"".""Land"" ASC"
Gruß,
OG
Verwende Libre Office 4.1.5.3
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.