帮我看看这段代码,运行程序就死掉
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Private Sub Combo1_Change()
Set rs = New ADODB.Recordset
Dim strsql As String
strsql = "select ICD10,Key,中文名称 from ZXD1 where 中文名称 like '% " + Combo1.Text + "% ' "
con.Open
rs.Open strsql, con, 3, 1
Combo1.Clear
While Not rs.EOF
Combo1.AddItem rs.Fields( "中文名称 ")
Wend
rs.Close
con.Close
End Sub
Private Sub Form_Load()
Set con = New ADODB.Connection
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source= " & App.Path & "\ICD10.mdb; "
End Sub
[解决办法]
程序死掉的原因是代码引起了递归,用户输入文字和代码改变Combo.Text属性都会引发Change事件。解决方法:
Private Sub Combo1_Change()
Dim strsql As String
Set rs = New ADODB.Recordset
strsql = "select ICD10,Key,中文名称 from ZXD1 where 中文名称 like '% " + Combo1.Text + "% ' "
con.Open
rs.Open strsql, con, 3, 1
Clear
While Not rs.EOF
Combo1.AddItem rs.Fields( "中文名称 ")
rs.MoveNext
Wend
rs.Close
con.Close
End Sub
' 移除Combo中的所有项,不用Combo.Clear方法是因为它会清空文本和改变插入点的位置
Private Sub Clear()
On Error Resume Next
Dim i As Long
For i = Combo1.ListCount - 1 To 0 Step -1
Combo1.RemoveItem i
Next
End Sub
楼主是在开发HIS吧?不过你这种方式效率太低了,ICD-10有好几万条记录,用户输入文字就去查询不太可靠。试试我的方法:
1、从DB中取出全部的ICD-10数据。
2、用户输入时,在客户端检索,
即 Rs.Find " '% " & Combo1.Text & "% ' " 或者
Rs.Filter = " '% " & Combo1.Text & "% ' "
3、往Combo中填数据。