ComboBox中的VB6搜索选项

时间:2014-05-21 17:56:52

标签: search combobox vb6

当我输入时,如何使用ComboBox从数据库表中搜索字段。我使用此代码,但它没有按照我想要的方式运行:

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

因此,当我输入 a 时,它应该更新列表并显示以下数据:

  • 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

在ComboBox中它应该只显示名称,但当我选择 ID 会在文本框中显示时,该怎么办?

1 个答案:

答案 0 :(得分:1)

对代码的审核显示以下内容:

Private Sub Combo1_Change()

    Dim sValue As String

    sValue = Combo1.Text

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

到目前为止,这么好。但是,下一行没有意义。 Refresh()方法用于重绘控件。我的猜测是,既然你以后要在组合框中添加项目,你实际上想要删除这里的所有项目。

        Combo1.Refresh

实际上,你应该使用:Combo1.Clear

下一行中的SQL看起来有点不对:

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

仔细查看:LIKE '%" & sValue & " %'。我假设你想找到所有以你的字符为前缀的值。但是您匹配sValue开头处的任何字符,然后您匹配一个空格,然后匹配sValue end 处的任何字符。例如,如果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