❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
[gelöst]Datenherkunft Formular ändern?
[gelöst]Datenherkunft Formular ändern?
Hallo,
ich möchte im Hauptformular die Datenherkunft über Basic ändern?
In Access sieht das so aus:
...
Me!Formularname.Form.RecordSource = ... (z.B. SQL-Befehl)
...
Wie geht das in Basic?
Mocke47
ich möchte im Hauptformular die Datenherkunft über Basic ändern?
In Access sieht das so aus:
...
Me!Formularname.Form.RecordSource = ... (z.B. SQL-Befehl)
...
Wie geht das in Basic?
Mocke47
Zuletzt geändert von Mocke47 am Mo 3. Dez 2012, 14:23, insgesamt 1-mal geändert.
Re: Datenherkunft Formular ändern?
Das "Me!"-Objekt von VBA ist in Base einigermaßen 1:1 vorhanden:
Die VBA-Eigenschaft "RecordSource" heisst hier "Command"
Du solltest als "Art des Inhaltes" "SQL-Befehl" eingestellt haben, dann sollte z.B. folgender Code funktionieren:
Die 2. Möglichkeit das "Me!"-Objekt zu bekommen ist das Event-Objekt, das Dein Makro auslöst.
Wenn Du einen Button klickst, dann wird dabei immer ein Event-Objekt kreiert, das immer mitübergeben wird. Wenn also die "sub NurLibreOffice" mit dem "Aktion ausführen"-Ereignis des Buttons verbunden ist, und der Code der Sub so beginnt:
dann kann in dieser Sub das Objekt "oEvent" verwendet werden.
Dieses Objekt hat bei einem Button nur 2 Eigenschaften, und keine Methoden:
die "Source"-Eigenschaft weist auf den Button hin, um's kurz zu machen:
Das Makro kann daher auch so aussehen:
Dies gilt für die oberste Formularebene - sollten Subformualre im Spiel sein, dann müsste dieses noch extra gesucht werden:
man muss also beim Event-Objekt für jedes übergeordnete Formular nur ein weiteresc ".Parent" anhängen, während man per ThisComponent.DrawPage genau wissen muss welches Element des übergeordneten Formaulars das Sub-Formular ist.
Für Makros (und auslösende Buttons) die man in verscheidenen Formularen verwendet eignet sich daher der Verweis über das Event-Objekt besser.
Code: Alles auswählen
ThisComponent.DrawPage.Forms.getbyindex(0)
Du solltest als "Art des Inhaltes" "SQL-Befehl" eingestellt haben, dann sollte z.B. folgender Code funktionieren:
Code: Alles auswählen
sub NurLibreOffice
ThisComponent.DrawPage.Forms.getbyindex(0).Command= "Select * from Projekte where Projekte.Firma = 'LibreOffice';"
ThisComponent.DrawPage.Forms.getbyindex(0).reload
end sub
Wenn Du einen Button klickst, dann wird dabei immer ein Event-Objekt kreiert, das immer mitübergeben wird. Wenn also die "sub NurLibreOffice" mit dem "Aktion ausführen"-Ereignis des Buttons verbunden ist, und der Code der Sub so beginnt:
Code: Alles auswählen
sub LibreOffice(oEvent)
Dieses Objekt hat bei einem Button nur 2 Eigenschaften, und keine Methoden:
Code: Alles auswählen
Source object
ActionCommand string ""
Code: Alles auswählen
oEvent.Source.Model.Parent.Command
entspricht
ThisComponent.DrawPage.Forms.getbyindex(0).Command
Code: Alles auswählen
sub NurLibreOffice(oEvent)
oEvent.Source.Model.Parent.Command.Command= "Select * from Projekte where Projekte.Firma = 'LibreOffice';"
oEvent.Source.Model.Parent.reload
end sub
Code: Alles auswählen
ThisComponent.DrawPage.Forms.getbyindex(0).getByName("Name des Subformulars")
bzw
oEvent.Source.Model.Parent.Parent
Für Makros (und auslösende Buttons) die man in verscheidenen Formularen verwendet eignet sich daher der Verweis über das Event-Objekt besser.
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Datenherkunft Formular ändern?
Hallo gogo,gogo hat geschrieben:Die VBA-Eigenschaft "RecordSource" heisst hier "Command"
Du solltest als "Art des Inhaltes" "SQL-Befehl" eingestellt haben, dann sollte z.B. folgender Code funktionieren:
Code: Alles auswählen
sub NurLibreOffice
ThisComponent.DrawPage.Forms.getbyindex(0).Command= "Select * from Projekte where Projekte.Firma = 'LibreOffice';"
ThisComponent.DrawPage.Forms.getbyindex(0).reload
end sub
genial beschrieben und funktioniert auch perfekt.
Nur eine kleine Ergänzung für alle die vielleicht das selbe Problem haben werden: Wenn "Art des Inhaltes" auf "SQL-Befehl" gestellt wird, dann muss man bei "Inhalt" einen SQL-Befehle eingeben (z.B. SELECT * FROM Tabelle), sonst werden beim ersten Start des Formulars keine Daten angezeigt.
Mocke47
Re: Datenherkunft Formular ändern?
Danke 
Man muss nur beachten, dass es in einem Base Formular (das ja eingetlich ein Writer-Dokument ist) mehrere Formulare "hierarchisch nebeneinander" und gleichzeitig auch mehrere Formulare "hierarchisch untereinander" geben kann. Das .getbyindex(0) bezieht sich dabei auf das erste angelegte Form-Objekt, wären weitere Formulare da, müsste man das Richtige mit .getbyName("Name des Formulars") oder dem richtigen Index (.getbyindex(x)) finden.
In Access ist das nicht möglich, da kann innerhalb einer grafischen Oberfläche immer nur ein Dateninhalt vorkommen. Es ist am Anfang auch verwirrend, dass die einzelnen Kontrollelemente der unterschiedlichen Formulare kreuz und quer durcheinander auf dem "Base Formular" verteilt sein können, die Formularstruktur ist dabei nicht an die grafische Oberfläche gebunden, sondern wird über die jeweiligen Objekte geregelt.
Die beste Übersicht über die Formularstruktur bietet der Formular-Navigator (Icon in der Formular-Entwurf-Symbolleiste), mit dem man sich auf alle Fälle mal beschäftigen sollte.

Code: Alles auswählen
ThisComponent.DrawPage.Forms.getbyindex(0)
In Access ist das nicht möglich, da kann innerhalb einer grafischen Oberfläche immer nur ein Dateninhalt vorkommen. Es ist am Anfang auch verwirrend, dass die einzelnen Kontrollelemente der unterschiedlichen Formulare kreuz und quer durcheinander auf dem "Base Formular" verteilt sein können, die Formularstruktur ist dabei nicht an die grafische Oberfläche gebunden, sondern wird über die jeweiligen Objekte geregelt.
Die beste Übersicht über die Formularstruktur bietet der Formular-Navigator (Icon in der Formular-Entwurf-Symbolleiste), mit dem man sich auf alle Fälle mal beschäftigen sollte.
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Datenherkunft Formular ändern?
Hier noch mein erstellter Code:
Beschreibung:
Ein Formular als Liste erstellt - Über Formular bearbeiten ein Textfeld (Name: Suchen) eingefügt - diesem Textfeld über Ereignisse "Text modifiziert" obiges Makro "FormularFiltern" zugewiesen = Bei jeder Eingabe wird Liste automatisch mit Eingabe aktualisiert. Man könnte auch Suchformular dazu sagen.
Mocke47
Code: Alles auswählen
Sub FormularFiltern
Dim oForm as Object
Dim oFeld as Object
Dim sSuchen as String
oForm = ThisComponent.DrawPage.Forms.getByName("MainForm")
oFeld = oForm.getByName("Suchen")
sSuchen = oFeld.getCurrentValue()
ThisComponent.DrawPage.Forms.getbyindex(0).Command = "SELECT * FROM ""tblTeilnehmer"" WHERE ""Nachname"" LIKE '*" & sSuchen & "*'"
ThisComponent.DrawPage.Forms.getbyindex(0).reload
End Sub
Ein Formular als Liste erstellt - Über Formular bearbeiten ein Textfeld (Name: Suchen) eingefügt - diesem Textfeld über Ereignisse "Text modifiziert" obiges Makro "FormularFiltern" zugewiesen = Bei jeder Eingabe wird Liste automatisch mit Eingabe aktualisiert. Man könnte auch Suchformular dazu sagen.
Mocke47
Re: Datenherkunft Formular ändern?
Falls Du's "auf die übliche Tour" haben willst:
Meist wird ein Filter in's Formular gesetzt (und aktiviert) - Dein "oForm" hat diese Eingenschaft, sie heisst ... ".filter"
Über die Eigenschaft ".Command" kannst Du den gesamten SQL-String austauschen, und über die Eigenschaft ".filter" an die "Datenherkunft" eine where-Klausel setzen. Insgesamt ein sehr flexibler Ansatz.
Meist wird ein Filter in's Formular gesetzt (und aktiviert) - Dein "oForm" hat diese Eingenschaft, sie heisst ... ".filter"

Code: Alles auswählen
Sub FormularFiltern
Dim oForm as Object
Dim oFeld as Object
Dim sSuchen as String
oForm = ThisComponent.DrawPage.Forms.getByName("MainForm")
oFeld = oForm.getByName("Suchen")
sSuchen = oFeld.getCurrentValue()
oForm.filter = ""Nachname"" LIKE '*" & sSuchen & "*'"
oForm.applyfilter = true
oForm.reload
End Sub
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Datenherkunft Formular ändern?
Hallo gogo,
danke für den Hinweis.
Will meine alte Access Datenbank unter Base zum laufen bringen, aber es ist doch eine Umstellung, da die Automatische-Codevervollständigung von Access-VBA sehr komfortable ist. Man konnte damit immer sehr schön experimentieren
, ohne viel über irgendwelche Befehle zu wissen. Leider unter Libre-Basic nicht so einfach.
Habe schon wieder ein Problem, bitte sieh Dir mal mein nächstes Thema an.
Danke
Mocke47
danke für den Hinweis.
Will meine alte Access Datenbank unter Base zum laufen bringen, aber es ist doch eine Umstellung, da die Automatische-Codevervollständigung von Access-VBA sehr komfortable ist. Man konnte damit immer sehr schön experimentieren

Habe schon wieder ein Problem, bitte sieh Dir mal mein nächstes Thema an.
Danke
Mocke47
Re: Datenherkunft Formular ändern?
Wird auf absehbare Zeit nicht kommen. Am besten ist es wenn Du Dich mit dem Tool XRay beschäftigst - das ist supereinfach zum scannen der Methoden und Properties und wenn Du den LO SDK installiert hast kannst Du per Button die API-Hilfe ansehen - gaaanz ausgefeiltes SystemMocke47 hat geschrieben:... Automatische-Codevervollständigung...
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
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.