Laufzeitfehler 2957 bei Filter

17/05/2008 - 14:58 von Kai Apel (Berlin) | Report spam
Liebe NG,

Ich habe auf einem ungebundenen Suchformular ein Listenfeld, welche
mir die Trefferliste eines Suchbegriffes anzeigt. Jetzt möchte ich
über einen Schalter Filter auf alle Objekt des Listenfeldes im
Hauptformular filtern.

Mit

For i = 1 To Me.lstErgebnis.ListCount - 1
If i = 1 Then
strFilter = "[id_text] LIKE '" & Me.lstErgebnis.Column(0, i) &
"' "
Else
strFilter = strFilter & " OR [id_text] LIKE '" &
Me.lstErgebnis.Column(0, i) & "'"

End If
Next i

konstruiere ich mir den String für
Forms!Test.Filter = strFilter
Forms!Test.FilterOn = True

für kleiner Menge klappt das ganz gut, bei einer größere Menge bringt
das natürlich nichts, da der String zu lang wird. Gibt es eine andere
Möglichkeit eine x-beliebige Menge an Primàrschlüsseln als Kriterium
zu übergeben? Leider ist der Schlüssel ein Textfeld, was natürlich
nicht sehr ideal ist, kann ich aber leider nicht àndern.

Kai
 

Lesen sie die antworten

#1 Peter Doering
17/05/2008 - 15:32 | Warnen spam
Hallo,

Kai Apel (Berlin) wrote:

Ich habe auf einem ungebundenen Suchformular ein Listenfeld, welche
mir die Trefferliste eines Suchbegriffes anzeigt. Jetzt möchte ich
über einen Schalter Filter auf alle Objekt des Listenfeldes im
Hauptformular filtern.

Mit

For i = 1 To Me.lstErgebnis.ListCount - 1
If i = 1 Then
strFilter = "[id_text] LIKE '" & Me.lstErgebnis.Column(0, i) &
"' "
Else
strFilter = strFilter & " OR [id_text] LIKE '" &
Me.lstErgebnis.Column(0, i) & "'"

End If
Next i



OR ist erstens nicht besonders schnell, zweitens recht begrenzt in der
Anzahl. Wenn die Liste ueberschaubar ist, kannst du dir ein IN-Konstrukt
aufbauen, also:

For i = 1 To Me.lstErgebnis.ListCount - 1
If i = 1 Then
strFilter = "[id_text] IN ('" & Me.lstErgebnis.Column(0, i) & "' "
Else
strFilter = strFilter & ", '" & Me.lstErgebnis.Column(0, i) & "'"
End If
Next i
strFilter = strFilter & ")"

Aber auch das ist begrenzt. Sollten zu viele Kriterien kommen, empfiehlt es
sich, die Kriterien in eine Temp-Tabelle einzutragen und in der
Datenherkunft zu Joinen. Diese Option waere zwar etwas aufwaendiger, wuerde
aber in punkto Performance das Rennen machen.

Gruss - Peter

Ich beantworte keine Fragen per Email.
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com

Ähnliche fragen