PDA

Vollständige Version anzeigen : Filter setzen funktioniert nicht


Christoph Eick
02.05.2011, 19:28
Hallo,
ich versuche mit einem Kombifeld, Daten im Unterformular zu Filtern.
irgendwie gelingt mir das aber nicht.


Hier die Funktion "Filtersetzen"
Function FilterSetzen()
StrFilter = ""

If cmbFilterRMTyp = "<Alle>" Then
MsgBox "Alle Datensätze werden angezeigt"
Else
MsgBox "Nur " & Me.cmbFilterRMTyp & " werden angezeigt"
StrFilter = StrFilter & " and [cmbFilterRMTyp] = " & Chr(34) & cmbFilterRMTyp & Chr(34)
End If

If (Nz(StrFilter, "")) > 0 Then
StrFilter = Right(StrFilter, Len(Nz(StrFilter, "")) - 5)
Me!frmUebersicht.Form.Filter = StrFilter
Me!frmUebersicht.Form.FilterOn = True
Else
Me!frmUebersicht.Form.Filter = ""
Me!frmUebersicht.Form.FilterOn = False
End If
End Function

Die Datenherkunft im Kombifeld "cmbFilterRMTyp"
lautet:
Private Sub Form_Load()
Dim strSQL As String

strSQL = "SELECT tblRettungsmittelTyp.Kurz FROM tblRettungsmittelTyp "

Me!cmbFilterRMTyp.RowSource = strSQL
Me!cmbFilterRMTyp = "<Alle>"
Me!frmUebersicht.Form.Form.Filter = ""
Me!frmUebersicht.Form.Form.FilterOn = False

End Sub

Eigenschaften "cmbFilterRMTyp"
Spaltenzahl: 1
Gebundene Spalte: 1

Der Erste Teil der Funktion "FilterSetzen" funktioniert, der Zweite, wo der Filter definiert wird nicht.
Wo habe ich mir hier einen Fehler eingebaut??

Gruß
Christoph

ebs17
02.05.2011, 19:39
If (Nz(StrFilter, "")) > 0 Then
Das ist aus mehreren Gründen Unsinn:
- Eine Variable vom Typ String kann nicht den Wert Null annehmen, also ist eine Behandlung mit Nz überflüssig.
- <tt>If "EinString" > 0</tt> ... das mutet etwas merkwürdig an. VBA findet das bestimmt auch und dürfte meckern mit "Typen unverträglich". Ist das Dir entgangen?
Vorstellbar wäre eine Prüfung wie ...
If Len(StrFilter) > 0 Then

Me!frmUebersicht.Form.Form.Filter = ""
Me!frmUebersicht.Form.Form.FilterOn = False
Da rumort nichts?

Toast78
03.05.2011, 06:12
Ich weiß nicht, was deine Right-Funktion da abschnippelt, aber müsste es nicht außerdem heißen:StrFilter = "Feldname = '" & cmbFilterRMTyp & "'"
Zumindest für ein Stringeld?

Lanz Rudolf
03.05.2011, 14:38
Hallo
mach einmal nach
StrFilter = Right(StrFilter, Len(Nz(StrFilter, "")) - 5)
ein
Debug.Print StrFilter
dann siehst Du was Du in StrFilter drin hast im direktfenster :)
oder eben Vor
Me!frmUebersicht.Form.Filter = StrFilter
ein
Debug.Print StrFilter

Christoph Eick
04.05.2011, 18:06
Hallo,
ich komme hier einfach nicht weiter.
Der abgeänderte Code lautet:
If Len(StrFilter) > 0 Then
StrFilter = Right(StrFilter, Len(Nz(StrFilter, "")) - 5)
Debug.Print StrFilter
Me!frmUebersicht.Form.Filter = StrFilter
Me!frmUebersicht.Form.FilterOn = True
Else
Me!frmUebersicht.Form.Filter = ""
Me!frmUebersicht.Form.FilterOn = False
End If

Debug.Print StrFilter ergibt: [cmbFilterRMTyp] = "MZF"

Das ist ja soweit auch richtig, nach diesem Fahrzeugtyp soll ja auch nun gefiltert werden, tut es aber nicht.

Ich habe im Anhang eine Bsp-Datei beigefügt. Vielleicht lässt sich dann ja hier der Fehler besser finden.


Gruß
Christoph

Der fehlende Anhang ist nun dabei!

ebs17
04.05.2011, 18:09
Eine DB kann ich nicht sehen. Ein Name wie "cmbFilterRMTyp" sieht aber nun nicht nach einem Tabellenfeldnamen aus. Gefiltert wird aber die Datenherkunft und damit letztendlich eine Tabelle, nicht ein Formularsteuerelement.

Lanz Rudolf
04.05.2011, 18:30
Hallo
@Eberhard wieso nimst Du mir die Worte aus dem Mund ? :):lachen:

Christoph Eick
04.05.2011, 18:58
So, nun habe ich es doch gefunden! :)
... danke für den Hinweis unter #6! Manchmal sieht man "den Wald vor lauter Bäumen" nicht.

Gruß
Christoph