首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

帮小弟我看看这段代码,运行程序就死掉

2012-04-20 
帮我看看这段代码,运行程序就死掉DimconAsADODB.ConnectionDimrsAsADODB.RecordsetPrivateSubCombo1_Chang

帮我看看这段代码,运行程序就死掉
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中填数据。

热点排行