Forums Neueste Beiträge
 

Filter setzen mit mehreren Suchwörter in UND-Verknüpfung

01/11/2008 - 19:31 von Marion Hildebrandt | Report spam
Guten Abend,
ich möchte folgende Aufgabenstellung lösen:
Ich habe ein Formular, das auf einer Abfrage beruht. In diesem Formular gibt
es u.a. ein ungebundenes Textfeld „FTFSuche“ für die Eingabe eines oder auch
mehrerer
Suchwörter zum Filtern der anzuzeigenden Datensàtze.
Es sollen die Datensàtze angezeigt werden, welche mit meinem eingegebenen
Suchwort im Textfeld „FTFSuche“ und dem Abfragefeld „ADSuche“
übereinstimmen. Werden mehrere Suchwörter eingeben sollen alle Suchwörter
UND-verknüpft sein.
Durch vorangegangene Hinweise in dieser Diskussionsgruppe habe ich mir
folgenden VBA-Code gebastelt.
Private Sub USFSuche_Click()
On Error GoTo Err_USFSuche_Click
Dim myarray As Variant
Dim i As Long
myarray = Split(Me.FTFSuche, " ")
For i = LBound(myarray) To UBound(myarray)
Me.Filter = "[ADSuche] LIKE '*" & myarray(i) & "*'"
Next i
Form.FilterOn = True
Exit_USFSuche_Click:
Exit Sub
Err_USFSuche_Click:
MsgBox Err.Description
Resume Exit_USFSuche_Click
End Sub
Alles wunderbar, aber die Suchwörter werden nicht UND-verknüpft sonder
ODER-verknüpft. Wie kann ich das richtig stellen? Ich wàre sehr dankbar für
einen weiteren Hinweis.
Viele Grüße aus dem Norden
Marion

PS. Betriebssystem Vista, nicht konvertierte Datenbank Access 2003 in Access
2007
 

Lesen sie die antworten

#1 Stefan Dase
01/11/2008 - 20:36 | Warnen spam
Hallo Marion!

Private Sub USFSuche_Click()
On Error GoTo Err_USFSuche_Click
Dim myarray As Variant
Dim i As Long
myarray = Split(Me.FTFSuche, " ")
For i = LBound(myarray) To UBound(myarray)
Me.Filter = "[ADSuche] LIKE '*" & myarray(i) & "*'"
Next i
Form.FilterOn = True
Exit_USFSuche_Click:
Exit Sub
Err_USFSuche_Click:
MsgBox Err.Description
Resume Exit_USFSuche_Click
End Sub
Alles wunderbar, aber die Suchwörter werden nicht UND-verknüpft sonder
ODER-verknüpft. Wie kann ich das richtig stellen? Ich wàre sehr dankbar für
einen weiteren Hinweis.



Wenn du deinen Code mal genau betrachtest wirst du feststellen, dass du
eigentlich nur das letzte eingegebene Wort im Filter verwendest. Die
vorigen werden immer überschrieben.

Statt einer direkten Zuweisung an den Formularfilter solltest du den
Ausdruck im Vorfeld als String zusammenfügen und dann erst den Filter
setzen:

Dim myarray As Variant
Dim sFilter As String
Dim i As Long

On Error GoTo Err_USFSuche_Click

myarray = Split(Me.FTFSuche, " ")
For i = LBound(myarray) To UBound(myarray)
sFilter = sFilter & " AND ([ADSuche] LIKE '*" & myarray(i) & "*')"
Next i

If Len(sFilter) > 0 Then
sFilter = Mid(sFilter, 6) 'erstes AND entfernen
Form.FilterOn = True
End If
'...

HTH,
Stefan

Ähnliche fragen