PDA

Vollständige Version anzeigen : listenfeld / suche


nesti
05.10.2002, 17:04
ich habe ein ungebundenes formular mit einen suchfeld (such), 2 schaltflächen zum suchen und weitersuchen.

im Listenfeld (Me!Kunden) habe ich drei spalten: kdid, familienname, vorname

ereignis beim suchen:

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("Kunden", dbOpenDynaset)

With rs
.FindFirst "[Familienname] LIKE '*" & Me!Such & "*'"
If Not rs.NoMatch Then
Me!Kunden = rs!KDID
Else
MsgBox "Keinen gefunden!"
End If
End With
rs.Close: Set rs = Nothing
Set db = Nothing

funktioniert problemlos. weitersuchen:

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("Kunden", dbOpenDynaset)
With rs
.FindNext "[Familienname] LIKE '*" & Me!Such & "*'"
If Not rs.NoMatch Then
Me!Kunden = rs!KDID
Else
MsgBox "Keinen gefunden!"
End If
End With
rs.Close: Set rs = Nothing
Set db = Nothing

finde ich zwar den nächsten, aber keinen weiteren, was mir zwar irgendwie auch logisch erscheint, da ja bei jedem klicken von neuem begonnen wird, nur weiss ich nicht so wirklich wie ich es lösen könnte. bookmarks habe ich auch probiert aber auch ohne erfolg.

WalterS
05.10.2002, 17:41
Hi!
Als Denkanstoß für "Weitersuchen"
Im Recordet auf den Datensatz positionieren der im Listenfeld angezeigt wird und erst dann weiter suchen.

With rs
.FindFirst "KDID=" & Me!Kunden .FindNext "[Familienname] LIKE '*" & Me!Such & "*'"

Maximilian
05.10.2002, 17:44
Hy nesti,

versuchs mal mit

Private Sub cmd01SuchenStarten_Click()
On Error GoTo Err_cmd01SuchenStarten_Click
Dim lngElement As Long 'ist kein Eintrag ausgewählt, so wird der letzte Eintrag gewählt
If Me.DeinListenfeld.ListIndex = -1 Then Me.DeinListenfeld.Selected(Me.DeinListenfeld.ListCount - 1) = True

'Zeiger auf das nächste Element nach dem gewählten bzw.
'auf das erste Element setzen
lngElement = IIf(Me.DeinListenfeld.ListIndex = Me.DeinListenfeld.ListCount - 1, 0, Me.DeinListenfeld.ListIndex + 1)

'Prüfschleife starten
Do While True
'stimmt der Anfang des Listenelements mit dem Suchtext überein?
If Me.DeinListenfeld.ItemData(lngElement) Like "*" & Me.DeinUngebundenesTextfeld & "*" Then

'Listenelement auswählen und Schleife beenden
Me.DeinListenfeld.Selected(lngElement) = True
Exit Sub
End If

'wurde das Listenfeld einmal komplett durchsucht?
If lngElement = Me.DeinListenfeld.ListIndex Then
'Auswahlbalken löschen
Me.DeinListenfeld = Null
Exit Sub
End If

'Zeiger auf nächstes Element setzen
lngElement = IIf(lngElement = Me.DeinListenfeld.ListCount - 1, 0, lngElement + 1)
Loop

Exit_cmd01SuchenStarten_Click:
Exit Sub

Err_cmd01SuchenStarten_Click:
MsgBox Err.Description
Resume Exit_cmd01SuchenStarten_Click
End Sub

Gruß
Max

nesti
05.10.2002, 17:54
an walter:

habe es so wie du geschrieben hast gelöst - spitzen idee.

eine frage noch - ist es eigentlich ok das ich wie ich das listenfeld markiere ?

Me!Kunden = rs!KDID

oder muss ich das über die selected eigenschaft machen ?