🙏 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. 🤗
Gelöst Base Abfrage "Kriterium" zugriff auf Formulardaten?
Gelöst Base Abfrage "Kriterium" zugriff auf Formulardaten?
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
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.
Re: Base Abfrage "Kriterium" zugriff auf Formulardaten?
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:
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:
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.
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
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
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
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: Base Abfrage "Kriterium" zugriff auf Formulardaten?
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.
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

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.
Re: Base Abfrage "Kriterium" zugriff auf Formulardaten?
Sorry gogo das ich mich solange nicht gemeldet habe.
Hier nun meine Lösung des Problemes mit Access2Base Erweiterung:
Funktioniert super 
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

Re: Gelöst Base Abfrage "Kriterium" zugriff auf Formulardate
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:
... 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.
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
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
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.