PDA

Vollständige Version anzeigen : Listenfeld filtern


MichaelBe
03.05.2011, 23:37
Hallo,

ich habe ein Listenfeld (Liste27) und will dies filtern. Den Code hierfür will ich aus diesem Beitrag nachbauen:

http://www.*************************117367_0_0_asc.php

EDIT: Da Links hier nicht erlaubt sind hier der Code aus dem Beitrag, den ich nachbauen will:

Private Sub txtGemarkung_Change()
Dim str As String

Me.Requery
str = "SELECT lngGST_ID, txtGemarkung, lngFlur, txtFlurstückNr " & _
"FROM tblGrundstücke " & _
"WHERE txtGemarkung Like '" & Me!txtGemarkung & "*' " & _
"AND lngGST_ID IN(SELECT lngGST_ID " & _
"FROM tblWindpark_Grundstücke " & _
"WHERE txtKürzelWP = '" & _
Forms!frmWindpark!txtKürzelWP & "')"
Me!lbGST.RowSource = str
Me!txtGemarkung.SetFocus ' Focus wieder zurück an Textfeld
' Markierung des Textes im Textfeld auflösen Cursor setzen
Me!txtGemarkung.SelStart = Len(Nz(Me!txtGemarkung))
End Sub

Mein code sieht nun wie folgt aus:

Private Sub LF_Speicherbezeichnung_Change()
Dim str As String
'Filtern im Listenfeld (durch Eingabe)
Me.Requery
strSQL = "SELECT [Lagerbestand HVS].ID, [Lagerbestand HVS].Projekt, [Lagerbestand HVS].Speicherbezeichnung, [Lagerbestand HVS].Annehmer, [Lagerbestand Megamaten].Annahmedatum, [Lagerbestand Megamaten].Kommentar " & _
"FROM [Lagerbestand HVS] " & _
"WHERE Speicherbezeichnung Like '" & Me!LF_Speicherbezeichnung & "*' "
Me!Liste27.RowSource = strSQL
Me!LF_Speicherbezeichnung.SetFocus ' Focus wieder zurück an Textfeld
' Markierung des Textes im Textfeld auflösen Cursor setzen
Me!LF_Speicherbezeichnung.SelStart = Len(Nz(Me!LF_Speicherbezeichnung))
End Sub


Der Code bewirkt bisher allerdings nur, dass sobald etwas in das Textfeld LF_Speicherbezeichnung eingegeben wird im Listenfeld nichts mehr angezeigt wird, auch wenn es Treffer geben müsste.

Marsu65
04.05.2011, 00:00
Hi,
da fehlt die 2. Tabelle im FROM-Abschnitt
SELECT [Lagerbestand HVS].ID, ... [Lagerbestand Megamaten].Annahmedatum,...
FROM [Lagerbestand HVS] ... 'Inner/Left/Right Join ...

Tip: Lasse dir mit Debug.Print den erzeugten SQL im Direktfenster ausgeben und prüfe diesen in einer Abfrage.

MichaelBe
04.05.2011, 00:35
Das mit den Megamaten war lediglich ein Fehler von mir, das sollte ebenfalls HVS heißen. Danke für den Hinweis. Das mit dem Debug Print sollte ich mir echt mal anschaun, für mich ist das alles noch sehr neu.

Nach dem korrigieren des Fehlers gehts einwandfrei.

Maxel
04.05.2011, 19:34
Hallo,
Nach dem korrigieren des Fehlers gehts einwandfrei.
Was mich allerdings wundert angesichts von
Dim str As String
...
strSQL = "SELECT

Option Explicit würde hier einen Protest erzeugen.

MichaelBe
04.05.2011, 23:09
Wenn ich Option Explicit verwenden würde wär dem sicher so :-)
Noch so ein Punkt den ich mir evtl angewöhnen sollte...

MichaelBe
06.05.2011, 08:31
Ein kleines Problem habe ich mit diesem Filter jedoch noch, ich hoffe ihr könnt mir helfen.

Meine Datensätze sind nicht immer komplett ausgefüllt, etwa das Feld Kommentar wird öfter mal freigelassen. Wenn ich nun in einer Spalte filter in der nicht alle Datensätze einen Wert besitzen funktioniert dies, jedoch wenn ich die den Inhalt des Suchfeldes wieder lösche werden nun die Datensätze angezeigt in denen in der Spalte des Suchfeldes auch ein Wert vorhanden ist. Die Datensätze ohne Kommentar werden dann nicht angezeigt.

Marsu65
06.05.2011, 12:26
Das kannst du z.B. so machen:

strSQL = "SELECT ... " & _
"FROM [Lagerbestand HVS] "
If Len("" & Me!LF_Speicherbezeichnung.Text) > 0 then
strSQL = strSQL & "WHERE Speicherbezeichnung Like '" & Me!LF_Speicherbezeichnung.Text & "*' "
End If

BTW: Bei der Verwendung des Change-Ereignisses solltest du die Text-Eigenschaft des Textfeldes auswerten, da sich die (Standard-)Value-Eigenschaft nicht ändert.