我想实现当输入内容后,从数据库的信息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的内容,否则显示信息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
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
=======================
真的不需要指定字段名???
俺,一般会写成select * from 表 where 字段1='123'这样的形式
没试过select * from 表 where ‘123’
循环体里面没有rs_add11.movenext这样的操作,肯定死循环
如果真的只有一条,就不需要循环,用if分之就可以了
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 写在哪里?
不需要循环,也不需要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
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 & "'"
不需要循环,也不需要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)不记得是不是这样写来获得字段的值了