我想实现当输入内容后,从数据库的信息1,信息2表中读数据比较,信息1中有的
话显示信息1的内容,否则显示信息2的内容,两个都没有就显示错误,下面的代码运行后是死循环,该怎么改改,我一般晚上上网,回答合适的话,即给分,针对我的代码。
Private Sub sn_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
If sn.Text = "" Then  //sn.text是输入框
jing.Caption = "请输入"
Else
Dim sql11 As String
Dim rs_add11 As New ADODB.Recordset
sql11 = "select * from 信息1 where '" & sn.Text & "'"
rs_add11.Open sql11, conn, adOpenKeyset, adLockPessimisticDim sql22 As String
Dim rs_add22 As New ADODB.Recordset
sql22 = "select * from 信息2 where '" & sn.Text & "'"
rs_add22.Open sql22, conn, adOpenKeyset, adLockPessimistic
While (rs_add22.EOF = False)
If UCase(Trim(rs_add22.Fields(1))) = UCase(Trim(sn.Text)) Then
       acus = rs_add22.Fields(0) //acus,asn,ampn是字符串常量
       asn = rs_add22.Fields(1)
       ampn = rs_add22.Fields(2)ElseIf UCase(Trim(rs_add11.Fields(1))) = UCase(Trim(sn.Text)) Then
       acus = rs_add11.Fields(0) //acus,asn,ampn是字符串常量
       asn = rs_add11.Fields(1)
       ampn = rs_add11.Fields(2)
        Else
        jing.caption ="错误"
        End If
        Wend
End If
End If
End Sub

解决方案 »

  1.   

    sql11 = "select * from 信息1 where '" & sn.Text & "'"
    sql22 = "select * from 信息2 where '" & sn.Text & "'"
    这两句,where子句漏了字段名吧?后面显示部分,不需要循环,改成这样
    if rs_add11.eof=false then
        acus = rs_add11.Fields(0) //acus,asn,ampn是字符串常量
    elseif rs_add22.eof=false then
        acus = rs_add22.Fields(0) //acus,asn,ampn是字符串常量
    else
        错误
    endif
      

  2.   

    where '" & sn.Text & "',这里好像不需要子句吧,我只从一个表中比较数据就是这样操作的,可以读出来,只是有While (rs_add22.EOF = False)或者While (rs_add11.EOF = False)这两句就可以
      

  3.   

    where '" & sn.Text & "'
    =======================
    真的不需要指定字段名???
    俺,一般会写成select * from 表 where 字段1='123'这样的形式
    没试过select * from 表 where ‘123’
      

  4.   

    while循环拿来干什么用呢?
    循环体里面没有rs_add11.movenext这样的操作,肯定死循环
      

  5.   

    也是,那如果,写成select * from 表 where 字段1='123'这样的形式,怎么用输入框的内容依次比较两个数据表里的内容呢?
      

  6.   

    从控件的名字"sn"来看,数据库里面对应的记录应该只有一条吧?
    如果真的只有一条,就不需要循环,用if分之就可以了
      

  7.   

    "sn"是唯一的,两个表中都是
    If UCase(Trim(rs_add22.Fields(1))) = UCase(Trim(sn.Text)) Then
           acus = rs_add22.Fields(0) //acus,asn,ampn是字符串常量
           asn = rs_add22.Fields(1)
           ampn = rs_add22.Fields(2)ElseIf UCase(Trim(rs_add11.Fields(1))) = UCase(Trim(sn.Text)) Then
           acus = rs_add11.Fields(0) //acus,asn,ampn是字符串常量
           asn = rs_add11.Fields(1)
           ampn = rs_add11.Fields(2)
            Else
            jing.caption ="错误"
            End If
    这样的话不知道,rs_add22.movenext rs_add11.movenext 写在哪里?
      

  8.   

    如果是唯一的,那么查询出来的肯定只有一条,
    不需要循环,也不需要MoveNext
    下面这些足够了:
    sql11 = "select * from 信息1 where '" & sn.Text & "'"
    rs_add11.Open sql11, conn, adOpenKeyset, adLockPessimisticDim sql22 As String
    Dim rs_add22 As New ADODB.Recordset
    sql22 = "select * from 信息2 where '" & sn.Text & "'"
    rs_add22.Open sql22, conn, adOpenKeyset, adLockPessimistic
    if rs_add11.eof=false then
        acus = rs_add11.Fields(0) //acus,asn,ampn是字符串常量
           asn = rs_add11.Fields(1)
           ampn = rs_add11.Fields(2)
    elseif rs_add22.eof=false then
        acus = rs_add22.Fields(0) //acus,asn,ampn是字符串常量
           asn = rs_add22.Fields(1)
           ampn = rs_add22.Fields(2)
    else
        jing.caption ="错误"
    endif
      

  9.   

    晕,没改Select语句
    sql11 = "select * from 信息1 where 字段sn'=" & sn.Text & "'"
    rs_add11.Open sql11, conn, adOpenKeyset, adLockPessimisticDim sql22 As String
    Dim rs_add22 As New ADODB.Recordset
    sql22 = "select * from 信息2 where 字段sn='" & sn.Text & "'"
      

  10.   

    我刚才已经改了,只是没写rs_add22.eof=false这两句,谢了哈
      

  11.   

    如果是唯一的,那么查询出来的肯定只有一条,
    不需要循环,也不需要MoveNext
    下面这些足够了:
    sql11 = "select * from 信息1 where '" & sn.Text & "'"
    rs_add11.Open sql11, conn, adOpenKeyset, adLockPessimisticDim sql22 As String
    Dim rs_add22 As New ADODB.Recordset
    sql22 = "select * from 信息2 where '" & sn.Text & "'"
    rs_add22.Open sql22, conn, adOpenKeyset, adLockPessimistic
    if rs_add11.eof=false then
        acus = rs_add11.Fields(0) //acus,asn,ampn是字符串常量
           asn = rs_add11.Fields(1)
           ampn = rs_add11.Fields(2)
    elseif rs_add22.eof=false then
        acus = rs_add22.Fields(0) //acus,asn,ampn是字符串常量
           asn = rs_add22.Fields(1)
           ampn = rs_add22.Fields(2)
    else
        jing.caption ="错误"
    endif写个存储过程直接用vb一调用,就不需要vb内存开销那么大,而且效率又高
    还有可以这么写sql:
    sql11 = "select * from 信息1 where '" & sn.Text & "';"select * from 信息2 where '" & sn.Text
    然后直接用一个rs open就是,使用信息2的值时
    rs.nextrecordset(0).fields(0)不记得是不是这样写来获得字段的值了