bin mir nicht sicher, ob ich hier richtig bin oder ins Makro-Forum muss. Sagt es mir bitte einfach. Habe außerdem noch mal darüber gearbeitet und die DB angehängt.
In einem Formular ist ein Tabellen-Kontrollfeld, das per Makro (s.u.) gefiltert wird. Mit einem Kombinationsfeld "cmbSucheTyp" wird festgelegt, in welcher Spalte gesucht werden soll, ein Textfeld "txtSuche" enthält den Suchbegriff. Bin wirklich kein Fachmann, aber es läuft irgendwie!

Ich habe allerdings ein paar Fragen.
1. Wie kann ich dafür sorgen, dass der Filter nicht (!) CaseSensitive arbeitet? Wie geht das, dass sowohl die Daten in "sSuchwort1" (bzw. "txtSuche") wie auch die aus der zu filternden Tabelle als kleine Buchstaben (LCase oder so etwas) ausgelesen werden, also unabhängig davon, wie sie in der Tabelle stehen oder vom User in "txtSuche" eingegeben werden?
2. Aus dem Kombinationsfeld "cmbSucheTyp" werden die Feldnamen für den Filter ausgelesen. Diese habe ich in einer eigenen Tabelle gespeichert und lese sie in "Test-Filter 1" dazu aus. Lässt sich das auch automatisieren? Gibt es eine Möglichkeit die Feldnamen der Tabelle in das Kombinationsfeld zu lesen?
Ich habe dazu eine Möglichkeit gefunden, aber sie gefällt mir nicht. In den Eigenschaften des Kombinationsfeldes lässt sich bei Art des Listeninhaltes auch "Tabellenfelder" aktivieren. Da ich aber auch eine Suche über alle Felder haben will, habe ich das mit einer eigenen Abfrage realisiert (sh. "Test-Filter 2"). Geht so etwas nicht eleganter in SQL?
3. Es lassen sich in das Kombinationfeld leider auch eigene Daten eingeben. So etwas führt aber zu einem SQL-Status: S0022 / Fehler-Code: -28. Wie kann ich vermeiden, dass eigene Daten in das Kombinationsfeld eingegeben werden?
Ich nutze OO 3.0 mit der internen Datenbank (HSQLDB) unter WinXP.
Vielen Dank für eure Hilfe!
Gunnar
Code: Alles auswählen
sub Filter_setzen
Dim oSuchFeld as variant
Dim oTypFeld as variant
Dim oDoc as variant
Dim oForm as variant
oDoc = ThisComponent
oForm = oDoc.DrawPage.Forms.GetByName("frmSuche") 'oder getByIndex()
oSuchFeld = oForm.getByName("txtSuche")
sSuchwort1 = oSuchFeld.text
oTypFeld = oForm.getByName("cmbSucheTyp")
sSuchwort2 = oTypFeld.text
oForm.filter = " "+sSuchwort2+" LIKE '%" +sSuchwort1+ "%'"
oForm.ApplyFilter=true
oForm.reload()
end sub