小弟今天做VB连接ACCESS数据库时,在做登陆界面时,老是报错,请各位帮帮忙
程序:
Dim cnn As ADODB.Connection '数据库连接
Dim rst As ADODB.Recordset '记录集
Dim mrc As ADODB.Recordset '记录集
Dim sTokens() As String '分取SQL语言
Dim txtSQL As String '存放SQL语言
Dim MsgText As String '存放返回信息 Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset
On Error GoTo ExecuteSQL_Error
conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path & " \DataBase.mdb" + ";Persist Security Info=false"
sTokens = Split(SQL)
Set cnn = New ADODB.Connection
cnn.Open conn '打开连接
If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then
cnn.ExecuteSQL
MsgString = sTokens(0) & "query successful"
Else
Set rst = New ADODB.Recordset
rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic
Set ExecuteSQL = rst
MsgString = "查询到" & rst.RecordCount & "条记录"
End If
ExecuteSQL_Exit:
Set rst = Nothing
Set cnn = Nothing
Exit Function
ExecuteSQL_Error:
MsgString = "查询错误:" & Err.Description
Resume ExecuteSQL_Exit
End Function Dim miCount As Integer
miCount = 0
Private Sub Form_Load() End Sub
Private Sub confirm_Click()
Dim txtSQL As String
Dim mrc As ADODB.Recordset
Dim MsgText As String
If Trim(userID.Text = "") Then
MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
userID.SetFocus
Else
txtSQL = "select * from account where userID='" & userID.Text & "'"
Set mrc = ExecuteSQL(txtSQL, MsgText)
If mrc.EOF = True Then////////////////错误部分////
MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
userID.SetFocus
userID.Text = ""
Else
If Trim(mrc.Fields(1)) = Trim(PWD.Text) Then
mrc.Close
Me.Hide
userID = Trim(userID.Text)
PWD = Trim(PWD.Text)
main.Show
Else
MsgBox "输入密码不正确,请重新输入!", vbOKOnly + vbExclamation, "警告"
PWD.SetFocus
PWD.Text = ""
End If
End If
End If
miCount = miCount + 1
If miCount = 3 Then
Me.Hide
End If
Exit Sub
End Sub 我按F8时,报错的地方是mrc.EOF=true
我看了一些同样错误的帖子,是说没有实例化,MRC要NEW一下,我也改了,也不行,还有帖子说我引用有问题,但我的引用都打上了,没有错误,我自己觉得好像是没有读到数据库中的USERID项,但我检查过数据库了,都有记录的,不是空数据库.小弟这个程序比较急,求各位指点下!谢谢!
程序:
Dim cnn As ADODB.Connection '数据库连接
Dim rst As ADODB.Recordset '记录集
Dim mrc As ADODB.Recordset '记录集
Dim sTokens() As String '分取SQL语言
Dim txtSQL As String '存放SQL语言
Dim MsgText As String '存放返回信息 Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset
On Error GoTo ExecuteSQL_Error
conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path & " \DataBase.mdb" + ";Persist Security Info=false"
sTokens = Split(SQL)
Set cnn = New ADODB.Connection
cnn.Open conn '打开连接
If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then
cnn.ExecuteSQL
MsgString = sTokens(0) & "query successful"
Else
Set rst = New ADODB.Recordset
rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic
Set ExecuteSQL = rst
MsgString = "查询到" & rst.RecordCount & "条记录"
End If
ExecuteSQL_Exit:
Set rst = Nothing
Set cnn = Nothing
Exit Function
ExecuteSQL_Error:
MsgString = "查询错误:" & Err.Description
Resume ExecuteSQL_Exit
End Function Dim miCount As Integer
miCount = 0
Private Sub Form_Load() End Sub
Private Sub confirm_Click()
Dim txtSQL As String
Dim mrc As ADODB.Recordset
Dim MsgText As String
If Trim(userID.Text = "") Then
MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
userID.SetFocus
Else
txtSQL = "select * from account where userID='" & userID.Text & "'"
Set mrc = ExecuteSQL(txtSQL, MsgText)
If mrc.EOF = True Then////////////////错误部分////
MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
userID.SetFocus
userID.Text = ""
Else
If Trim(mrc.Fields(1)) = Trim(PWD.Text) Then
mrc.Close
Me.Hide
userID = Trim(userID.Text)
PWD = Trim(PWD.Text)
main.Show
Else
MsgBox "输入密码不正确,请重新输入!", vbOKOnly + vbExclamation, "警告"
PWD.SetFocus
PWD.Text = ""
End If
End If
End If
miCount = miCount + 1
If miCount = 3 Then
Me.Hide
End If
Exit Sub
End Sub 我按F8时,报错的地方是mrc.EOF=true
我看了一些同样错误的帖子,是说没有实例化,MRC要NEW一下,我也改了,也不行,还有帖子说我引用有问题,但我的引用都打上了,没有错误,我自己觉得好像是没有读到数据库中的USERID项,但我检查过数据库了,都有记录的,不是空数据库.小弟这个程序比较急,求各位指点下!谢谢!
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path & " \DataBase.mdb"
这句话的" \DataBase.mdb" 前面多了一个空格,这样 ado 怎么找到数据库?
你可以将 MsgString = "查询错误:" & Err.Description
改成 msgbox "查询错误:" & Err.Description
就可以看到问题所在了.