Seite 1 von 1

Gelöst: Formularfilter - CaseInSensitive in mehreren Feldern

Verfasst: Mi, 07.01.2009 23:50
von gunman
Hallo,

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! :D

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

Re: Formularfilter - Kleinbuchstaben & Feldnamen lesen

Verfasst: Do, 08.01.2009 17:17
von gunman
Hallo Leute,

habe es soweit selbst gelöst, wenn auch nicht ganz zufrieden stellend. Wenn noch jemand eine Idee hat, her damit.

1. CaseInSensitive läuft tatsächlich mit LCASE, sh. Makro.
2.+3. Ich habe ein Listenfeld genommen und es manuell mit Werten befüllt. So oft werden sich die Suchfelder wohl nicht ändern.

Gruß, 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")
       oSuchFeld = oForm.getByName("txtSuche")
       sSuchwort1 = oSuchFeld.text
       oTypFeld = oForm.getByName("lstSucheTyp")
       sSuchwort2 = oTypFeld.CurrentValue

REM => dann Filter setzen
	if oTypFeld.CurrentValue <> "" then 
	oForm.filter = "   LCASE ("+sSuchwort2+")   LIKE   LCASE ('%" +sSuchwort1+ "%')   "
	oForm.ApplyFilter=true
	else
	oForm.ApplyFilter = False
	end if 

	oForm.reload()
end sub

Re: Gelöst: Formularfilter - CaseInSensitive in mehreren Fel

Verfasst: Mi, 02.01.2013 16:24
von juetho
Solche Fragesteller, die sich selbst helfen, sind besonders beliebt. :D

Wie die Liste der Spaltennamen zu erhalten ist, steht im Base-Handbuch auf Seite 237 ff.

Gruß Jürgen