为甚rs.RecordCount=-1,大虾请看一眼!
我在数据库里单独查询'select user from users where user ="zhangyongxing"有一条记录,没问题。
可程序里一运行就是rs.RecordCount=-1,百思不得其解,大虾们请指点一下下,不甚感激!!
(userlogon 在模块里当作全局变量,Public userlogon As String)
代码如下:
Private Sub 按ID查找_Click()
'============================================================
'验证用户身份
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.ConnectionString = "DRIVER={MySQL ODBC 5.1 Driver}; SERVER=192.168.1.102; DATABASE=yaf;UID=root;PWD=root; OPTION=3"
cn.Open
'MsgBox "form2按ID查找userlogon2=123" & userlogon & "123"
'这里输出没问题:form2按ID查找userlogon2=123zhangyongxing123
sql1 = "select user from users where user ='" & userlogon & "'"
'select user from users where user ="zhangyongxing"
rs.Open sql1, cn, 3, 3
'MsgBox "rs.Fields.Count=" & rs.Fields.Count
MsgBox "rs.RecordCount=" & rs.RecordCount
If rs.RecordCount <= 0 Then
MsgBox ("请先登录1!")
'Unload Me
Else
If rs.Fields(0) = "zhangxinyu" Or rs.Fields(0) = "zhangyongxing" Then
MsgBox ("身份验证成功!")
Form5.Show
Else
Dim a
a = MsgBox("请先登录!")
'Unload Me
End If
End If
'============================================================
End Sub
[解决办法]
-1 表示记录数不确定。
要确定记录数,需要两个条件:
1 使用客户端游标。
rs.CursorLocation = adUseClient
缺省条件下,是使用服务端游标的。也就是说,查询出的记录集数据保存在服务端。为了减少网络流量,只传送当前记录或几条记录。
2 记录较多时,必须遍历记录
rs.MoveLast
rs.MoveFirst
此时,才能确定得到了记录集的记录数。
不过,有排序关键字的查询,就不必这样做。因为数据库引擎已经遍历过了。