❤️ 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]Datenbank filtern

Alles zur Programmierung im LibreOffice.
Antworten
kaldmalt
Beiträge: 4
Registriert: Do 22. Nov 2012, 10:15
Kontaktdaten:

[gelöst]Datenbank filtern

Beitrag von kaldmalt » Do 22. Nov 2012, 11:48

Hallo @ all,

ich möchte gerne in einem Formular ein Subformular einfügen. Für das Subformular möchte ich eine Abfrage (SQL Statement) hinterlegen, welches sich aus einem Dropdownfeld aus dem Hauptformular ergibt. Sprich, ich wähle aus dem Feld einen Namen aus und dann soll das SQL Statement so filtern, dass im Subformular nur noch Daten mit dem Namen stehen.

Das Hauptformular greift aber wie das Subformular auf die gleiche Tabelle zu. Also keine Beziehung zwischen verschiedenen Tabellen.

Geht das per Makro oder kann man das evtl. auch so lösen? Falls nur per Makro wäre ein Lösungsvorschlag wie ich das SQL Statement in das Subformular eintrage hilfreich.

Sorry, bin blutiger Anfänger was das Programmieren angeht. Daher bitte Nachsicht. :|

-----

So, nun noch mal eine Ergänzung. Ich habe mir mal einen Code zusammengewürfelt der so aussieht.

Code: Alles auswählen

Sub Subformular_Stunden_refresh
   	oDoc = ThisComponent
   	oForm = oDoc.Drawpage.Forms.getByName("FormStundenerfassung")
   	oSubform= oForm.getByName("SubFormular")
   
   	Rem Mitarbeiter aus DropDown auslesen
   	oAuswahlMitarbeiter = oForm.getByName("NameMitarbeiter").currentValue
   
   	Rem Aktuellen Monat ermitteln
	dim odate as new com.sun.star.util.Date
	odate.day = day(now())
	odate.Month = month(now())
	odate.Year = year(now())
	oForm.getbyname("AktuellerMonatswert").Value = odate.Month
	oFeldList1 = oForm.getbyname("AktuellerMonatswert")
	oFeldList1.commit()
   
   
   	oSubform.filter = " ""name_ma"" = '" & oAuswahlMitarbeiter & "'"
   	oSubform.ApplyFilter=true
   	oSubform.reload
   	
End Sub
Also der Filter funktioniert soweit wie er soll. Wie aber verlänger ich denn die Filterkriterien? Ich bekomme einfach keine weiteren hinzu? MIt AND und OR brech ich mir die Ohren.
Zuletzt geändert von kaldmalt am Do 29. Nov 2012, 13:18, insgesamt 1-mal geändert.
Mit freundlichen Grüßen
Malte

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

Re: Datenbank filtern

Beitrag von gogo » Do 22. Nov 2012, 23:20

Hi Malte,

wenn Du den Filter einmal angeworfen hast, dann kannst Du einfach im Subformular auf den "Filter"-Button in der Navigationsleiste klicken - dann gibt Du das 2. Filterkriterium ein (der erste sollte schon in Zeile 1 stehen) und kannst dann per

Code: Alles auswählen

x=inputbox(,,oSubform.filter)
den Filterstring ermitteln (und Kopieren) - wenn Du den dann im Makro nachbaust - voilà
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

kaldmalt
Beiträge: 4
Registriert: Do 22. Nov 2012, 10:15
Kontaktdaten:

Re: Datenbank filtern

Beitrag von kaldmalt » Fr 23. Nov 2012, 10:36

Hallo g,

danke für Deine Antwort. Da hab ich mich wohl falsch ausgedrückt.

Ich kann ja über die manuelle Maske weitere FIlterkriterien eingeben. Das möchte ich per Makro direkt machen, sodass der Anwender nur bestimmte, gefilterte Daten sieht.

Code: Alles auswählen

oSubform.filter = " ""name_ma"" = '" & oAuswahlMitarbeiter & "'"
Mit dem Code Filter ich auf eine bestimmte Spalte. Diesen Code möchte ich um weitere Filterkriterien erweitern. Nur bekomme ich das nicht hin. Wenn ich den Begriff mit AND oder OR verknüpfe, läuft das Makro nicht mehr, bzw. es werden keine Daten mehr ausgegeben.
Mit freundlichen Grüßen
Malte

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

Re: Datenbank filtern

Beitrag von gogo » Sa 24. Nov 2012, 19:49

gogo hat geschrieben:dann gibt Du das 2. Filterkriterium ein...
den Filterstring ermitteln (und Kopieren) - wenn Du den dann im Makro nachbaust - voilà
kaldmalt hat geschrieben:Wenn ich den Begriff mit AND oder OR verknüpfe, läuft das Makro nicht mehr,...
Mach einen weiteren Button.
Lass diesen folgendes Makro auslösen:

Code: Alles auswählen

Sub Zeige_Subformular_FilterString
      oDoc = ThisComponent
      oForm = oDoc.Drawpage.Forms.getByName("FormStundenerfassung")
      oSubform= oForm.getByName("SubFormular")

      x=inputbox("Der Text in der Box kann mit Strg+C in die Zwischenablage kopiert werden!","Titel",oSubform.filter)
End Sub
Öffne das Formular.
Gib 2 Filterkriterien ein.
Klick auf den neuen Button.
Der String, der in der Input-Box steht zeigt Dir wie das System die 2 Kriterien verbindet.
Genau so solltest Du dann den String für Deine Sub "Subformular_Stunden_refresh" zusammenbauen.
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

kaldmalt
Beiträge: 4
Registriert: Do 22. Nov 2012, 10:15
Kontaktdaten:

Re: Datenbank filtern

Beitrag von kaldmalt » Di 27. Nov 2012, 11:48

Hallo gogo,

erst mal danke für den Tipp. Ich habe das soweit mal gemacht. Mit dem Ergebnis, dass der Filter nichts anzeigt. Ermittelt habe ich folgendes:

Code: Alles auswählen

`stundenbuch_stundenbuch`.`name_ma` = 'Mitarbeitername AND `stundenbuch_stundenbuch`.`zeit_datum` >= '{D ''2012-10-01'' }' AND `stundenbuch_stundenbuch`.`zeit_datum` >= '{D ''2012-10-31'' }'
Das habe ich nun in das Makro kopiert. Das sieht dann so aus:

Code: Alles auswählen

oSubform.filter =  " `stundenbuch_stundenbuch`.`name_ma` = 'Kaldewey Malte' AND `stundenbuch_stundenbuch`.`zeit_datum` >= '{D ''2012-10-01'' }' AND `stundenbuch_stundenbuch`.`zeit_datum` >= '{D ''2012-10-31'' }' "
Da passiert rein gar nichts. Was ich bisher nicht erwähnt habe, kann das daran liegen, dass ich eine MySQL Datenbank nutze?
Mit freundlichen Grüßen
Malte

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

Re: Datenbank filtern

Beitrag von gogo » Di 27. Nov 2012, 15:25

''2012-10-31'' hat vorne und hinten 2 Hochkommas - das könnte ein Problem sein, und:

Nachdem Du keinen Error bekommst würde ich sowieso auf das Datum tippen - nach Jahren frustrierender Versuche EIN Datumsformat für alle meine EDV-Sachen zu finden muss ich sagen: es geht nicht - das muss leider individuell geregelt werden.

Fehler bekommst Du deswegen nicht, weil '{D ''2012-10-31'' }' einen String ergibt, und der in MySQL für ein Datum gehalten wird...
Versuch's mal so:

Code: Alles auswählen

date('20121031')
Schreib' Dir dann für Deine DB eine Funktion die aus 2012-10-31 20121031 macht, dann kannst Du immer wieder drauf zurückgreifen.

... und die Filteränderung wird erst nach:

Code: Alles auswählen

oSubform.ApplyFilter=true
oSubform.reload
sichtbar! (.ApplyFilter=true dient nur zur Sicherheit falls man ihn ausgeschalten hat, aber ohne .reload geht gar nix)
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

kaldmalt
Beiträge: 4
Registriert: Do 22. Nov 2012, 10:15
Kontaktdaten:

[gelöst]Re: Datenbank filtern

Beitrag von kaldmalt » Do 29. Nov 2012, 13:17

Hallo g,

erst mal vielen Dank für Deine Anregungen. Ich habe es mir in der Zwischenzeit, dank Deiner Tipps hingebogen.

LG
Malte
Mit freundlichen Grüßen
Malte


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