当我输入时,如何使用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
列中包含了这些数据:
因此,当我输入 a 时,它应该更新列表并显示以下数据:
同样,如果我输入第二个字母 aa ,该列表将更新为:
......等等。
我该怎么做?
这将从一个列中选择名称,如果我在此表中有另一列调用 ID ,我想要但文本框中的值我该怎么办?它
rsFList.Open "SELECT ID, name FROM goods WHERE name LIKE '%" & sValue & " %' ORDER BY name", StCon, adOpenStatic, adLockOptimistic
一个例子:
在ComboBox中它应该只显示名称,但当我选择 ID 会在文本框中显示时,该怎么办?
答案 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