🙏 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!🍀

❤️ DANKE >> << DANKE ❤️

>> 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

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Originalgangsta
Beiträge: 13
Registriert: Mo 25. Jun 2012, 09:50
Wohnort: Kiel

Ergebnis einer Query in Makro weiterverarbeiten

Beitrag von Originalgangsta » Sa 12. Apr 2014, 18:27

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!
Verwende Libre Office 4.1.5.3

pmoegenb

Re: Ergebnis einer Query in Makro weiterverarbeiten

Beitrag von pmoegenb » Sa 12. Apr 2014, 19:17

Beispiele findest Du hier.

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Ergebnis einer Query in Makro weiterverarbeiten

Beitrag von RobertG » Sa 12. Apr 2014, 20:03

Hallo Originalgangsta,
Originalgangsta hat geschrieben: Wie geht ich also richtig mit dem Ergebnis des SQL um?
Vielleicht hilft dieser Ausschnitt eines Makros:

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
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
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

Originalgangsta
Beiträge: 13
Registriert: Mo 25. Jun 2012, 09:50
Wohnort: Kiel

Re: Ergebnis einer Query in Makro weiterverarbeiten

Beitrag von Originalgangsta » So 13. Apr 2014, 20:38

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!
Verwende Libre Office 4.1.5.3

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Ergebnis einer Query in Makro weiterverarbeiten

Beitrag von RobertG » So 13. Apr 2014, 21:48

Hallo Originalgangsta,

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)
....
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
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

Originalgangsta
Beiträge: 13
Registriert: Mo 25. Jun 2012, 09:50
Wohnort: Kiel

Re: Ergebnis einer Query in Makro weiterverarbeiten

Beitrag von Originalgangsta » Mo 21. Apr 2014, 22:24

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
Verwende Libre Office 4.1.5.3

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Ergebnis einer Query in Makro weiterverarbeiten

Beitrag von F3K Total » Mo 21. Apr 2014, 23:21

Hi,
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
HTH R
Windows 11: AOO, LO Linux Mint: AOO, LO

Originalgangsta
Beiträge: 13
Registriert: Mo 25. Jun 2012, 09:50
Wohnort: Kiel

Re: Ergebnis einer Query in Makro weiterverarbeiten

Beitrag von Originalgangsta » So 27. Apr 2014, 16:07

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:

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
Danke!
OG
Verwende Libre Office 4.1.5.3

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Ergebnis einer Query in Makro weiterverarbeiten

Beitrag von RobertG » So 27. Apr 2014, 17:54

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
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

Originalgangsta
Beiträge: 13
Registriert: Mo 25. Jun 2012, 09:50
Wohnort: Kiel

Re: Ergebnis einer Query in Makro weiterverarbeiten

Beitrag von Originalgangsta » So 27. Apr 2014, 19:43

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:

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"
Danke!
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.



Antworten