Seite 1 von 1

[gelöst]Datenbank filtern

Verfasst: Do 22. Nov 2012, 11:48
von kaldmalt
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.

Re: Datenbank filtern

Verfasst: Do 22. Nov 2012, 23:20
von gogo
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à

Re: Datenbank filtern

Verfasst: Fr 23. Nov 2012, 10:36
von kaldmalt
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.

Re: Datenbank filtern

Verfasst: Sa 24. Nov 2012, 19:49
von gogo
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.

Re: Datenbank filtern

Verfasst: Di 27. Nov 2012, 11:48
von kaldmalt
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?

Re: Datenbank filtern

Verfasst: Di 27. Nov 2012, 15:25
von gogo
''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)

[gelöst]Re: Datenbank filtern

Verfasst: Do 29. Nov 2012, 13:17
von kaldmalt
Hallo g,

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

LG
Malte