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

❤️ 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 Base Abfrage "Kriterium" zugriff auf Formulardaten?

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

Gelöst Base Abfrage "Kriterium" zugriff auf Formulardaten?

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

Hallo,
in Access kann man in einer Abfrage ein Kriterium wie folgt vergeben:

Kriterien: [Formulare]![Hauptformular]![Unterformular]![Textfeld1] wobei das Unterformular ein Endlosformular ist (in Base auch möglich?)

Funktion: Die erstellte Abfrage mit diesem Kriterium wurde in ein Formular "Datensatz Bearbeiten" als Datenherkunft eingefügt. Wenn man nun aus dem Formular "Datensatz Suchen" mit Unterformular "Datensatz Liste" den Button "Bearbeiten" klickte, wurde nur der gerade sektierte Datensatz im Formular "Datensatz bearbeiten" angezeigt.

Geht das in Libre Base auch so einfach?

Mocke47
Zuletzt geändert von Mocke47 am Do 11. Apr 2013, 10:51, insgesamt 1-mal geändert.

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

Re: Base Abfrage "Kriterium" zugriff auf Formulardaten?

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

Nein, da der Base-Editor nur so ähnlich aussieht wie der von Access. Einen Verweis auf ein Laufzeit-Objekt gibt's dabei nicht, dafür ist die Struktur des LO-Desktops nicht wirklich geeignet.

Wenn ich so ein Bearbeiten-Formular haben will, dann mach' ich das so:

Button erstellen, und folgendes Makro zuweisen:

Code: Alles auswählen

sub gefiltertes_Formular_oeffnen(oEvent)

oForm = oEvent.Source.Model.Parent
oTextfeld = oForm.getbyname("Textfeld1") ' Das wäre der Verweis auf [Formulare]![Hauptformular]![Unterformular]![Textfeld1]

oBearbForm = ThisComponent.Drawpage.Forms.getbyname("Bearbeiten-Formular").open
oBearbForm.Filter = ""Feldname" = " & CStr(oTextfeld.CurrentValue) ' oder sonst eine Property oder Methode die den Wert des
                                                                   ' Textfeldes liefert
                                                                   ' ggf mit cStr() in einen String verwandeln
oBearbForm.applyfilter = true
oBearbForm.reload
end sub
Den Button solltest Du in dem Formular erstellen, in dem das Textfeld ist.

kleiner Tip gratis (frei nach Robert G.):
oEvent.Source.Model ist der Button - der hat z.B. die Eigenschaft ".Tag" - das ist ein nicht genutzter String, den Du in den Kontrollelement-Eingenschaften ganz unten als "Zusatzinformation" findest. Wenn Du da z.B. reischreibst:
"Bearbeiten-Formular;Feldname"
dann kannst Du damit übergeben, dass die Sub das Formular "Bearbeiten-Formular" öffnen soll, und nach dem Wert im Feld "Feldname" filtern soll:

Code: Alles auswählen

aTextArray() = Split(oEvent.Source.Model.Tag, ";")
oTextfeld = oForm.getbyname(aTextArray(1))
oBearbForm = ThisComponent.Drawpage.Forms.getbyname(aTextArray(0)).open
Den Button kannst Du dann einfach kopieren und in ein anderes Formular einfügen - nach Anpassen der "Zusatzinformation" kannst Du dann regeln was geöffnet werden soll, und nach was gefiltert wird. Praktisch oder?

PS: die .open-Methode in der Sub funktioniert nur wenn das Formular in dem der Button ist (oForm) auch eine aktive Datenbankverbindung hat. Diese Eigenschaft erbt das oBearbForm dann ... sollte aber kein Problem sein, wenn im oForm Daten angezeigt werden.
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: Base Abfrage "Kriterium" zugriff auf Formulardaten?

Beitrag von Mocke47 » Di 27. Nov 2012, 07:46

Morgen gogo,
erneut danke für die sehr gute Beschreibung.

In dieser Hinsicht hat Access ein dickes Plus, da die oben genannte Möglichkeit, einfach in einer Abfrage als Kriterium das Textfeld eines Formulares anzugeben, nicht mit der Base variante zu vergleichen ist (was Kürze und Verständlichkeit angeht). Aber war hat gesagt das der Umstieg leicht ist :-). Bin mittlerweile doch sehr beeindruckt von den Möglichkeiten die Libre Office (freie Software) bietet, da ich meine Access Datenbank schon fast (fehlen nur noch ein paar Kleinigkeiten wie halt obiges Problem) vollständig nutzen kann.

Ist zwar keine Rückmeldung auf Deine super Beschreibung, aber ich bin jetzt ein paar Tage nicht da und aus Anstand wollte ich mich nochmal melden.

Melde mich zum Thema, sowie ich einen Schritt weiter bin (mit Codeschnipsel und wahrscheinlich fragen dazu :-) ).

Mocke47

PS. Habe mir Xray-Tool geladen und werde mich mal damit auseinandersetzen.

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

Re: Base Abfrage "Kriterium" zugriff auf Formulardaten?

Beitrag von Mocke47 » Do 11. Apr 2013, 10:50

Sorry gogo das ich mich solange nicht gemeldet habe.

Hier nun meine Lösung des Problemes mit Access2Base Erweiterung:

Code: Alles auswählen

Sub FormularBearbeiten
	Dim sTextfeld as String
	
	sTextfeld = getValue("Forms!Formularname!Tabellenfeld!Spaltenbezeichnung") 'übergibt den gefilterten Wert an sTextfeld
	
	OpenForm "Formularname", , ("""Feldname"" = '" & sTextfeld & "'") ' Feldname ... ist das Textfeld welches im Bearbeitungsformular gefilter wird
End Sub
Funktioniert super :-)

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

Re: Gelöst Base Abfrage "Kriterium" zugriff auf Formulardate

Beitrag von gogo » Do 11. Apr 2013, 12:46

Ja, aber Du musst für jeden Button ein eigenes Makro schreiben.

Wenn Du das Makro oben verwendest, und den Wert "Textfeld1" aus der .tag-Eigenschaft des Buttons ermittelst, dann kannst Du den Button überallhin kopieren, und musst das Makro nicht umschreiben, sondern nur immer im Feld "Zusatz" des Buttons den Namen des zu suchenden Filterfeldes ändern...

Das Makro kann natürlich auch noch in ganz andere Richtungen erweitert werden, z.B. kann man den Namen des zu öffnenden Formulars dazunehmen. So etwa:

Code: Alles auswählen

sub gefiltertes_Formular_oeffnen(oEvent)
' Konvention fuer .tag:
'   String
'   separiert durch: |
'   ZuOeffnendesFormular|FilterStringVorne|FeldNachDemGefiltertWerdeSoll|FilterStringHinten
'      sTag(0)=ZuOeffnendesFormular
'      sTag(1)=FilterStringVorne
'      sTag(2)=FeldNachDemGefiltertWerdeSoll
'      sTag(3)=FilterStringHinten

dim sTag() as String

oForm = oEvent.Source.Model.Parent
oButton = oEvent.Source.Model
sTag() = split(oButton.tag, "|")

if ubound(sTag)<>3 then
   msgbox ("Buttonkriterium '.tag' falsch angegeben!" & chr(10) _
                & "Fehler beim Lesen des Strings:" & chr(10) _
                & "oEvent.Source.Model.tag: '" & oButton.tag & "'")
   exit sub
end if

oTextfeld = oForm.getbyname(trim(sTag(2)))

oBearbForm = ThisComponent.Drawpage.Forms.getbyname(trim(sTag(0))).open
oBearbForm.Filter = sTag(1) & CStr(oTextfeld.CurrentValue) & sTag(3)
oBearbForm.applyfilter = true
oBearbForm.reload

end sub
... und es geht noch viel komplexer/praktischer ... wie man möchte.
Grundidee dahinter: im Feld .tag kann man damit den "Ausdrucks-Editor" von Access sozusagen im Kommandline-Modus nachampfinden ... je nach Lust und Laune.
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