2016-07-22 6 views
0

Ich schrieb eine Combo-Box Fuzzy-Suche, die fast funktioniert.
Problem? Wenn ich 2 Zeichen schreibe, sieht es nur 1.MS Access Combo Box unscharfe Suche

Hier ist mein Code aus der Combo-Box in der "KeyPress" -Event.

Private Sub cmbBASELINE_SEARCH_KeyPress(KeyAscii As Integer) 
     Dim strSQL As String 


     strSQL = "SELECT tbl_COB_CAT.COB_ID, tbl_COB_CAT.BASELINE " _ 
       & "FROM tbl_COB_CAT " _ 
       & "WHERE tbl_COB_CAT.BASELINE Like '*" & Me.cmbBASELINE_SEARCH.Text & "*'" _ 
       & "ORDER BY tbl_COB_CAT.BASELINE; " 



     Debug.Print strSQL 


       Select Case KeyAscii 
       Case 65 To 90, 48 To 57, 8 ' A-Z, 0-9 and backspace 
       'Let these key codes pass through 
        Me.cmbBASELINE_SEARCH.RowSource = strSQL 
        Me.cmbBASELINE_SEARCH.Dropdown 


       Case 97 To 122, 8, 127 'a-z, backspace and delete 
       'Let these key codes pass through 
        Me.cmbBASELINE_SEARCH.RowSource = strSQL 
        Me.cmbBASELINE_SEARCH.Dropdown 
       Case Else 
       'All others get trapped 
        KeyAscii = 0 ' set ascii 0 to trap others input 
       End Select 


End Sub 

Zum Beispiel, wenn ich tippe „CAB“ sucht es nach CA Wenn ich Typ „25“ er sucht nach

Was ich tun tun müssen, um es zu bekommen zu sein genauer? Wenn ich den Text im Kombinationsfeld lösche, sollten alle Werte, die eingegrenzt wurden, wieder in der Dropdownliste erscheinen, aber ich muss noch einmal auf "Backspace" drücken, damit die gefilterte Liste wieder normal wird .

Was fehlt mir?

Antwort

0

Ich vermute, dass das Problem darin besteht, dass Sie das KeyPress-Ereignis anstelle des KeyUp-Ereignisses verwenden. Wenn Sie den Tastendruck verwenden, wird die gedrückte Taste theoretisch noch nicht zum Text im Steuerelement hinzugefügt - Sie haben es zuvor bereits abgefangen.

Und daher würde ich davon ausgehen, dass die Ausgabe der debug.print SQL-Anweisung dies widerspiegelt.

ich dann, dass statt vorschlagen würde, was du hast, musst du es, wie dies tun:

Private Sub cmbBASELINE_SEARCH_KeyPress(KeyAscii As Integer) 
    Dim strSQL As String 
    dim valu as string: valu = "" 

    Select Case KeyAscii 
     Case 65 To 90, 48 To 57, 97 To 122, 8, 127 'A-Z, a-z, 0-9, BS & Del 
      'Let these key codes pass through 
      valu = cboBASELINE_SEARCH.Text & chr(KeyAscii) 
     Case Else 
      'All others get trapped 
      KeyAscii = 0 ' set ascii 0 to trap others input 
      Exit Sub 
    End Select 

    strSQL = "SELECT COB_ID, BASELINE FROM tbl_COB_CAT " _ 
      & "WHERE BASELINE LIKE '*" & valu & "*' ORDER BY 2" 

    Me.cmbBASELINE_SEARCH.RowSource = strSQL 
    Me.cmbBASELINE_SEARCH.Dropdown 

    Debug.Print strSQL 
End Sub 

Hoffnung, das hilft.

+0

Ich mag es! Funktioniert genau wie erwartet. – monty327

0

Oder Sie könnten einfach das Ereignis Change des Textfelds verwenden und seine .Text -Eigenschaft in dieser Ereignisprozedur verwenden. Ich sehe keinen Grund, einzelne Tastenanschläge einzeln von Hand aufzufangen.

Nitpick: Es gibt nichts unscharfes bei Ihrer Suche, es ist eine normale Volltextsuche.