2014-05-21 65 views
-2

如何在使用組合框輸入時從數據庫表中搜索字段?我使用這個代碼,但它不工作的方式我想:組合框中的VB6搜索選項

Private Sub Combo1_Change() 

    Dim sValue As String 

    sValue = Combo1.Text 

    If Combo1.Text <> "" Then 
     Set rsFList = New ADODB.Recordset 
     Combo1.Refresh 

     rsFList.Open "SELECT name FROM goods WHERE name LIKE '%" & sValue & " %' ORDER BY name", StCon, adOpenStatic, adLockOptimistic 
     If rsFList.RecordCount > 0 Then 
      Do While Not rsFList.EOF 
       Combo1.AddItem rsFList.Fields("name").Value 
       rsFList.MoveNext 
      Loop 
     End If 

     Combo1.Text = sValue 
    End If 

End Sub 

的我想要的一個例子:

在數據庫表中,我有這個數據列name

  • AAA
  • AAB
  • AAC
  • AAD
  • AGH
  • BGR
  • BFS

所以,當我鍵入一個,應該更新列表和顯示這樣的數據:

  • AAA
  • AAB
  • aac
  • AAD
  • AGH

再次,如果我輸入第二個字母,AA,該列表將更新爲:

  • AAA
  • AAB
  • aac
  • aad

...等等。

我該怎麼辦?

這個它會從一個呼叫選擇,如果我在這個表調用ID有另一列,我想,但我怎麼能做到這一點在文本框中的值。

rsFList.Open "SELECT ID, name FROM goods WHERE name LIKE '%" & sValue & " %' ORDER BY name", StCon, adOpenStatic, adLockOptimistic 

一個例子:

  • ID - 名稱
  • 1 - AAA
  • 2 - ABD
  • 3 - ABC

在組合框它應該只示出名稱,但是當我選擇ID會在文本框中顯示,怎麼辦呢?

+1

你的問題會更容易回答,如果不是「它不工作,因爲我想」,你描述的到底發生了什麼,你想發生什麼。我看到的一個問題是,當您修改組合框列表時,文本將被清除,我認爲這是爲什麼您要在方法結尾處設置文本。但是,這會導致事件再次觸發,並且您將得到堆棧空間錯誤。 – jac

回答

1

你的代碼的審查顯示以下內容:

Private Sub Combo1_Change() 

    Dim sValue As String 

    sValue = Combo1.Text 

    If Combo1.Text <> "" Then 
     Set rsFList = New ADODB.Recordset 

到目前爲止,一切都很好。但是,下一行沒有意義。 Refresh()方法用於重新繪製控件。我的猜測是,自從以後你將項目添加到組合框中時,你實際上想要在這裏刪除所有項目。

 Combo1.Refresh 

所以你其實,你應該使用:仔細

 rsFList.Open "SELECT name FROM goods WHERE name LIKE '%" & sValue & " %' ORDER BY name", StCon, adOpenStatic, adLockOptimistic 

看:Combo1.Clear

下一行的SQL看起來有點不對勁LIKE '%" & sValue & " %'。我認爲你想找到所有以你的角色爲前綴的值。但是您匹配開頭sValue中的任何字符,然後匹配一個空格,然後匹配結尾處的任何字符sValue。例如,如果sValue是「aa」,則它將評估爲:LIKE '%aa %'。我想你會想要:LIKE 'aa%'。因此在更換行應該是:rsFList.Open "SELECT name FROM goods WHERE name LIKE '" & sValue & "%' ORDER BY name", StCon, adOpenStatic, adLockOptimistic

 If rsFList.RecordCount > 0 Then 
      Do While Not rsFList.EOF 
       Combo1.AddItem rsFList.Fields("name").Value 
       rsFList.MoveNext 
      Loop 
     End If 

     Combo1.Text = sValue 
    End If 

End Sub 
+0

感謝您解決我的問題,我嘗試它,它的工作。我有另一個查詢另一個查看原始問題我會編輯它。 –

+0

你的第二個問題使你在第一個問題中犯了同樣的錯誤。這真是令人困惑,因爲你已經批准了我的答案。另外,我認爲我理解第二個問題,但我不應該猜測。如果我猜錯了,那麼我浪費了你的時間和時間。你能否根據我給你的答案將它作爲一個新問題,並將其重寫爲儘可能簡單?謝謝,馬克。 –