❤️ 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. 🌱


❤️ 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. 🤗

[gelöst]Datenherkunft Formular ändern?

Alles zur Programmierung im LibreOffice.
Antworten
Mocke47
Beiträge: 17
Registriert: Di 20. Nov 2012, 15:19

[gelöst]Datenherkunft Formular ändern?

Beitrag von Mocke47 » So 25. Nov 2012, 12:02

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
Zuletzt geändert von Mocke47 am Mo 3. Dez 2012, 14:23, insgesamt 1-mal geändert.

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Datenherkunft Formular ändern?

Beitrag von gogo » So 25. Nov 2012, 16:28

Das "Me!"-Objekt von VBA ist in Base einigermaßen 1:1 vorhanden:

Code: Alles auswählen

ThisComponent.DrawPage.Forms.getbyindex(0)
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
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:

Code: Alles auswählen

sub LibreOffice(oEvent)
dann kann in dieser Sub das Objekt "oEvent" verwendet werden.
Dieses Objekt hat bei einem Button nur 2 Eigenschaften, und keine Methoden:

Code: Alles auswählen

Source                    object                            
ActionCommand             string                       ""
die "Source"-Eigenschaft weist auf den Button hin, um's kurz zu machen:

Code: Alles auswählen

oEvent.Source.Model.Parent.Command
               entspricht 
ThisComponent.DrawPage.Forms.getbyindex(0).Command
Das Makro kann daher auch so aussehen:

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
Dies gilt für die oberste Formularebene - sollten Subformualre im Spiel sein, dann müsste dieses noch extra gesucht werden:

Code: Alles auswählen

ThisComponent.DrawPage.Forms.getbyindex(0).getByName("Name des Subformulars")
                          bzw
oEvent.Source.Model.Parent.Parent
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.
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

Mocke47
Beiträge: 17
Registriert: Di 20. Nov 2012, 15:19

Re: Datenherkunft Formular ändern?

Beitrag von Mocke47 » So 25. Nov 2012, 17:12

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

Hallo gogo,
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

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Datenherkunft Formular ändern?

Beitrag von gogo » So 25. Nov 2012, 18:01

Danke ;)

Code: Alles auswählen

ThisComponent.DrawPage.Forms.getbyindex(0)
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.
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

Mocke47
Beiträge: 17
Registriert: Di 20. Nov 2012, 15:19

Re: Datenherkunft Formular ändern?

Beitrag von Mocke47 » So 25. Nov 2012, 18:06

Hier noch mein erstellter Code:

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

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Datenherkunft Formular ändern?

Beitrag von gogo » So 25. Nov 2012, 19:17

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" ;)

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

Mocke47
Beiträge: 17
Registriert: Di 20. Nov 2012, 15:19

Re: Datenherkunft Formular ändern?

Beitrag von Mocke47 » Mo 26. Nov 2012, 08:41

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

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Datenherkunft Formular ändern?

Beitrag von gogo » Mo 26. Nov 2012, 19:11

Mocke47 hat geschrieben:... Automatische-Codevervollständigung...
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 System
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


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