🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Abfrageergbnis innerhalb Base in Tabelle übergeben
Abfrageergbnis innerhalb Base in Tabelle übergeben
Hallo Forum,
ich habe jetzt lange gesucht und probiert, nun brauche ich hier wohl doch mal eure fachkundige Hilfe. Ich bin frisch bei Linux. Ich möchte mit LibreOffice Base Vers. 4.2 xx eine Konto-Datenbank aufbauen, mit MS Access habe ich es damals geschafft. Die Makrosprache in LO Base schafft mich als mutigen Laien aber wohl doch.
Ich möchte die Werte aus einer Abfrage (Formular dazu funktioniert) in eine Tabelle bei der gleichen Base-Datenbank übergeben, um diese dann für spätere Auswertung oder Statistik zu haben. Es sind vier Konten und deren Bestände, die ich dann nach Bedarf zum Zeitpunkt der Abfrage festhalten möchte in der Tabelle. Daraus dann später einen Bericht erstellen.
Ich schaffe es einfach nicht, dafür ein Makro zu finden oder anzupassen. Ich müsste doch sagen: markiere und kopiere in der Abfrage die Werte der Felder „Konto“ und „Bestand“ und füge diese Werte als neuen Datensatz der Tabelle „Bestände“ an. Es gelingt mir einfach nicht, die passenden Befehle zu finden. Schon gar nicht, überhaupt die Tabelle anzusteuern.
Das funktioniert wunderbar:
Sub Macro2_Oeffnen_Form_Bestand
ThisDatabaseDocument.FormDocuments.getByName("Abfrage2Bestand").open
End Sub
Oder schwirrt mir da was vor, was so in Base nicht zu leisten wäre? Glaub ich aber kaum. Vermutlich ist meine Herangehensweise falsch. Aber ich habe in dem Handbuch gestöbert und gesucht, aber bin nicht schlau drauß geworden. Ist mein Problem vielleicht so einfach, dass jemand hier im Forum mir da recht einfach eine „Makrohilfe“ geben kann. Vermute, das ist leicht zu lösen, aber ich finde es nicht alleine heraus.
Bin gespannt, was ihr meint
ich habe jetzt lange gesucht und probiert, nun brauche ich hier wohl doch mal eure fachkundige Hilfe. Ich bin frisch bei Linux. Ich möchte mit LibreOffice Base Vers. 4.2 xx eine Konto-Datenbank aufbauen, mit MS Access habe ich es damals geschafft. Die Makrosprache in LO Base schafft mich als mutigen Laien aber wohl doch.
Ich möchte die Werte aus einer Abfrage (Formular dazu funktioniert) in eine Tabelle bei der gleichen Base-Datenbank übergeben, um diese dann für spätere Auswertung oder Statistik zu haben. Es sind vier Konten und deren Bestände, die ich dann nach Bedarf zum Zeitpunkt der Abfrage festhalten möchte in der Tabelle. Daraus dann später einen Bericht erstellen.
Ich schaffe es einfach nicht, dafür ein Makro zu finden oder anzupassen. Ich müsste doch sagen: markiere und kopiere in der Abfrage die Werte der Felder „Konto“ und „Bestand“ und füge diese Werte als neuen Datensatz der Tabelle „Bestände“ an. Es gelingt mir einfach nicht, die passenden Befehle zu finden. Schon gar nicht, überhaupt die Tabelle anzusteuern.
Das funktioniert wunderbar:
Sub Macro2_Oeffnen_Form_Bestand
ThisDatabaseDocument.FormDocuments.getByName("Abfrage2Bestand").open
End Sub
Oder schwirrt mir da was vor, was so in Base nicht zu leisten wäre? Glaub ich aber kaum. Vermutlich ist meine Herangehensweise falsch. Aber ich habe in dem Handbuch gestöbert und gesucht, aber bin nicht schlau drauß geworden. Ist mein Problem vielleicht so einfach, dass jemand hier im Forum mir da recht einfach eine „Makrohilfe“ geben kann. Vermute, das ist leicht zu lösen, aber ich finde es nicht alleine heraus.
Bin gespannt, was ihr meint
Re: Abfrageergbnis innerhalb Base in Tabelle übergeben
Hallo Budbase,
etwas, was direkt darauf zugeschnitten ist, wirst Du im Handbuch nie finden. Das liegt daran, dass die Grundlage einer Datenbank ist, möglichst keine Daten zu duplizieren. und jede Kopie einer Datenzeile auch in eine andere Tabelle ist natürlich so ein Duplikat. Das würde im Handbuch schlicht über Abfragen und Views erledigt.
Trotdem geht das Ganze natürlich.
Ausgangspunkt ist die Abfrage, auf die Du über das Formular zugreifst. In dem Formular befindet sich ein Button, mit dem Du die Kopie anstößt.
Die Variablen musst Du deklarieren. Das Einlesen über den Index (1, 2, 3, ...) geschieht in der Reihenfolge, wie die Felder in der Datenquelle des Formulars vorliegen. Beim Druck auf den Button wird der aktuelle Datensatz eingefügt.
Gruß
Robert
etwas, was direkt darauf zugeschnitten ist, wirst Du im Handbuch nie finden. Das liegt daran, dass die Grundlage einer Datenbank ist, möglichst keine Daten zu duplizieren. und jede Kopie einer Datenzeile auch in eine andere Tabelle ist natürlich so ein Duplikat. Das würde im Handbuch schlicht über Abfragen und Views erledigt.
Trotdem geht das Ganze natürlich.
Ausgangspunkt ist die Abfrage, auf die Du über das Formular zugreifst. In dem Formular befindet sich ein Button, mit dem Du die Kopie anstößt.
Code: Alles auswählen
SUB Kopie(oEvent AS OBJECT)
oForm = oEvent.Source.Model.Parent
ID = oForm.getLong(1)
sName = oForm.getString(2)
dValue = oForm.getDouble(3)
...
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
oVerbindung = oDatenquelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()
stSql = "INSERT INTO ""Tabelle""(""ID"",""Name"",""Wert"") VALUES ('"+ID+"','"+sName+"','"+dValue+"')"
oSQL_Anweisung.executeUpdate(stSql)
END SUB
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
Re: Abfrageergbnis innerhalb Base in Tabelle übergeben
Hallo Robert,
danke für die rasche Antwort. Wie ich schrieb, Laie!
Will es natürlich ausprobieren, aber bekomme schon bei
Hängt das mit Feldformatierungen zusammen? Hab die Stelle noch nicht geknackt.
Beste Grüße
Budbase
danke für die rasche Antwort. Wie ich schrieb, Laie!

Will es natürlich ausprobieren, aber bekomme schon bei
die Meldung : "Basic-Laufzeitfehler, Argument ist nicht optional"oForm = oEvent.Source.Model.Parent
Hängt das mit Feldformatierungen zusammen? Hab die Stelle noch nicht geknackt.
Beste Grüße
Budbase
Re: Abfrageergbnis innerhalb Base in Tabelle übergeben
Hallo Budbase,
das Makro muss an einen Button in dem Formular gekoppelt sein, aus dem heraus Du die Daten kopieren willst:
Eigenschaften: Schaltfläche → Ereignisse → Aktion ausführen
Wie führst Du das Makro aus?
Gruß
Robert
das Makro muss an einen Button in dem Formular gekoppelt sein, aus dem heraus Du die Daten kopieren willst:
Eigenschaften: Schaltfläche → Ereignisse → Aktion ausführen
Wie führst Du das Makro aus?
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
Re: Abfrageergbnis innerhalb Base in Tabelle übergeben
Hi Robert,
ja, das dachte ich mir schon als erstes und habe in dem Formular eine Schaltfläche eingebaut und die Aktion wollte ich bei "Maustaste losgelassen" starten lassen. Habe vorher dein Makro in den Makroeditor kopiert und dann die Aktion zugewiesen. Die Meldung bekomme ich, wenn ich im Editor (wenn man das so nennt) die Einzelschritte (F8) prüfe. Ich hoffe, es ist egal, wo die Makros gespeichert werden. Bei "Makros verwalten" sind die Makros jetzt alle unter dem Namen der Datenbank abgelegt.
Gruß Budbase
ja, das dachte ich mir schon als erstes und habe in dem Formular eine Schaltfläche eingebaut und die Aktion wollte ich bei "Maustaste losgelassen" starten lassen. Habe vorher dein Makro in den Makroeditor kopiert und dann die Aktion zugewiesen. Die Meldung bekomme ich, wenn ich im Editor (wenn man das so nennt) die Einzelschritte (F8) prüfe. Ich hoffe, es ist egal, wo die Makros gespeichert werden. Bei "Makros verwalten" sind die Makros jetzt alle unter dem Namen der Datenbank abgelegt.
Gruß Budbase
Re: Abfrageergbnis innerhalb Base in Tabelle übergeben
Hallo Budbase,
Makros, die aus einem Formular gestartet werden sollen, kannst Du nur selten im Makroeditor schrittweise ablaufen lassen. Ich setzte häufig zur Kontrolle eine Messagebox ein, die mir den Inhalt bestimmter Elemente aufzeigt:
msgbox ID
würde Dir z.B. den Inhalt des Feldes anzeigen, aus dem Du die ID auslesen willst. Nützlich, wenn Du nicht genau weißt, ob die Felder nun korrelt sind.
Wenn Du
statt des normalen Endes in das Makro eingibst, dann passiert erst einmal bei der Ausführung über den Button nichts mit Deiner Datenbank. Die Ausführungsanweisung ist als Kommentar ausgewiesen. Stattdessen wird Dir der SQL-Befehl in der Messagebox angezeigt.
Die Makros solltest Du grundsätzlich innerhalb der Datenbank speichern, nicht unter "Meine Makros". Nur dann sind sie auch noch verfügbar, wenn Du die Datenbank z.B. auf einem anderen Rechner öffnest.
Gruß
Robert
Makros, die aus einem Formular gestartet werden sollen, kannst Du nur selten im Makroeditor schrittweise ablaufen lassen. Ich setzte häufig zur Kontrolle eine Messagebox ein, die mir den Inhalt bestimmter Elemente aufzeigt:
msgbox ID
würde Dir z.B. den Inhalt des Feldes anzeigen, aus dem Du die ID auslesen willst. Nützlich, wenn Du nicht genau weißt, ob die Felder nun korrelt sind.
Wenn Du
Code: Alles auswählen
stSql = "INSERT INTO ""Tabelle""(""ID"",""Name"",""Wert"") VALUES ('"+ID+"','"+sName+"','"+dValue+"')"
msgbox stSql
'oSQL_Anweisung.executeUpdate(stSql)
Die Makros solltest Du grundsätzlich innerhalb der Datenbank speichern, nicht unter "Meine Makros". Nur dann sind sie auch noch verfügbar, wenn Du die Datenbank z.B. auf einem anderen Rechner öffnest.
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
Re: Abfrageergbnis innerhalb Base in Tabelle übergeben
Hallo Budbase,
noch ein Hinweis, den ich jetzt doch in dem nächsten Handbuch unter gebracht habe:
Wenn Du Werte aus einem Formular ausliest und nur in SQL weiter verarbeiten willst (also keine Rechnungen oder so etwas durchführen), dann ist es günstiger, gar nicht erst nach Variablentypen zu differenzieren.
lässt sich immer in einem weiteren SQL-Befehl verarbeiten. Auch Datumswerte werden so direkt im SQL-tauglichen Format ausgelesen und können in Abfragen oder Eingaben genutzt werden.
Gruß
Robert
noch ein Hinweis, den ich jetzt doch in dem nächsten Handbuch unter gebracht habe:
Wenn Du Werte aus einem Formular ausliest und nur in SQL weiter verarbeiten willst (also keine Rechnungen oder so etwas durchführen), dann ist es günstiger, gar nicht erst nach Variablentypen zu differenzieren.
Code: Alles auswählen
stWert1 = oForm.getString(1)
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
Re: Abfrageergbnis innerhalb Base in Tabelle übergeben
Hallo Robert,
nun habe ich endlich durch deine Hilfe einen Teilerfolg an der Stelle. Hab noch etwas probiert und gefummelt und die erste Zeile der Abfrage landet in der Tabelle. Du ahnst mein Problem?
In der Abfrage werden mir vier Konten und deren Bestände angezeigt. Die möchte ich dann auch alle in die "Bestandstabelle" übernehmen. Wie bringe ich das Mako dazu, das gleich noch dreimal nur einen Datensatz weiter jeweils zu machen. Irgendwie mit "oResult.next" vielleicht. Bevor ich die halbe Nacht versuche, gibt es hier bestimmt ne richtige Lösung
Beste Grüße Budbase
Zur Info, das läuft jetzt bei mir störungsfrei:
nun habe ich endlich durch deine Hilfe einen Teilerfolg an der Stelle. Hab noch etwas probiert und gefummelt und die erste Zeile der Abfrage landet in der Tabelle. Du ahnst mein Problem?


Beste Grüße Budbase
Zur Info, das läuft jetzt bei mir störungsfrei:
SUB Kopie(oEvent AS OBJECT)
DIM oForm AS OBJECT
oForm = oEvent.Source.Model.Parent
oForm.IsModified = TRUE
Konto =oForm.getString(1)
Bestand = oForm.getString(4)
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
oVerbindung = oDatenquelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()
stSql = "INSERT INTO ""WertetabelleBestand""(""Konto"",""Bestand"") VALUES ('"+Konto+"','"+Bestand+"')"
oSQL_Anweisung.executeUpdate(stSql)
END SUB
Re: Abfrageergbnis innerhalb Base in Tabelle übergeben
Hallo Budbase,
das auslösende Ereignis ist ja mit dem aktuellen Datensatz des Formulars verbunden. Ich würde jetzt einfach einmal
probieren.
Allerdings steht in Deinbem Code oForm.IsModified = TRUE (warum auch immer ...). Den Ansatz verstehe ich nicht.
Wenn ich jetzt eine Schleife einbauen würde, dann würde statt oForm.IsModified folgendes stehen:
Habe ich jetzt, wie geschrieben, nicht nachgetestet ...
Gruß
Robert
das auslösende Ereignis ist ja mit dem aktuellen Datensatz des Formulars verbunden. Ich würde jetzt einfach einmal
Code: Alles auswählen
oForm.next
Allerdings steht in Deinbem Code oForm.IsModified = TRUE (warum auch immer ...). Den Ansatz verstehe ich nicht.
Wenn ich jetzt eine Schleife einbauen würde, dann würde statt oForm.IsModified folgendes stehen:
Code: Alles auswählen
FOR i = 1 TO 4
Konto =oForm.getString(1)
Bestand = oForm.getString(4)
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
oVerbindung = oDatenquelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()
stSql = "INSERT INTO ""WertetabelleBestand""(""Konto"",""Bestand"") VALUES ('"+Konto+"','"+Bestand+"')"
oSQL_Anweisung.executeUpdate(stSql)
oForm.next
NEXT i
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
Re: Abfrageergbnis innerhalb Base in Tabelle übergeben
Hallo Robert,
danke für deine Hilfe, es klappt.
Die unnötige Zeile hatte ich beim ausprobieren einkopiert, hab sie wieder gelöscht.
Nun bastel ich an den nächsten Schritten. Bis zum nächsten mal
Nochmal vielen Dank
Gruß
Budbase
danke für deine Hilfe, es klappt.
Die unnötige Zeile hatte ich beim ausprobieren einkopiert, hab sie wieder gelöscht.
Nun bastel ich an den nächsten Schritten. Bis zum nächsten mal

Nochmal vielen Dank
Gruß
Budbase
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.