=================主程序
Private Sub cmdt_Click()
Dim cn As New Adodb.Connection
Dim rs As New Adodb.Recordset
Dim sql As String
Dim username As String
Dim password As String
username = Trim(tbusername.Text)
If username = "" Then
MsgBox "用户名不能为空!", vbInformation, "系统登陆提示"
Exit Sub
End If
password = checkpwd.md5((tbpwd.Text))
sql = "select * from 系统表 where 用户名='" & username & "'"
MsgBox sql
Set rs = ExeSQL(sql)If rs.EOF = True Then '====对象变量或With块变量未设置
If errortime > 2 Then
MsgBox "连续三次输入错误,系统自动退出!如果有何疑问请与系统管理员联系.", vbCritical, "系统提示"
Unload Me
Else
MsgBox "没有此用户,请重新输入用户名!", vbExclamation
errortime = errortime + 1
tbusername.Text = ""
tbusername.SetFocus
End If
Else
If password = rs!密码 Then
Load frmmain
Load MDIFormmain
MDIFormmain.Show
frmmain.Show
Me.Hide
Unload Me
Else
MsgBox "密码输入错误,请重试!", vbInformation, "系统登陆提示"
errortime = errortime + 1
tbpwd.Text = ""
tbpwd.SetFocus
End If
End If
rs.Close
Set rs = Nothing
End Sub===============调用的ExeSQL(sql)过程
Public Function ExeSQL(ByVal sql As String) As Adodb.Recordset
On Error GoTo ErrHandler:
Dim cn As Adodb.Connection
Dim rs As Adodb.Recordset
Dim strArray() As String
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\jxcdbase.mdb;Persist Security Info=False"
Set cn = New Adodb.Connection
Set rs = New Adodb.Recordset
cn.Open ConnStr strArray = Split(sql)
If StrComp(UCase$(strArray(0)), "select", vbTextCompare) = 0 Then
rs.Open Trim$(sql), cn, adOpenKeyset, adLockOptimistic
Set ExeSQL = rs
Else
cn.Execute sql
End IfExeSQl_Exit:
Set rs = Nothing
Set cn = Nothing
Exit Function
ErrHandler:
' 显示错误信息
MsgBox "错误号:" & Err.Number & " 错误信息:" & Err.Description, vbExclamation
Resume ExeSQl_Exit
End Function
Private Sub cmdt_Click()
Dim cn As New Adodb.Connection
Dim rs As New Adodb.Recordset
Dim sql As String
Dim username As String
Dim password As String
username = Trim(tbusername.Text)
If username = "" Then
MsgBox "用户名不能为空!", vbInformation, "系统登陆提示"
Exit Sub
End If
password = checkpwd.md5((tbpwd.Text))
sql = "select * from 系统表 where 用户名='" & username & "'"
MsgBox sql
Set rs = ExeSQL(sql)If rs.EOF = True Then '====对象变量或With块变量未设置
If errortime > 2 Then
MsgBox "连续三次输入错误,系统自动退出!如果有何疑问请与系统管理员联系.", vbCritical, "系统提示"
Unload Me
Else
MsgBox "没有此用户,请重新输入用户名!", vbExclamation
errortime = errortime + 1
tbusername.Text = ""
tbusername.SetFocus
End If
Else
If password = rs!密码 Then
Load frmmain
Load MDIFormmain
MDIFormmain.Show
frmmain.Show
Me.Hide
Unload Me
Else
MsgBox "密码输入错误,请重试!", vbInformation, "系统登陆提示"
errortime = errortime + 1
tbpwd.Text = ""
tbpwd.SetFocus
End If
End If
rs.Close
Set rs = Nothing
End Sub===============调用的ExeSQL(sql)过程
Public Function ExeSQL(ByVal sql As String) As Adodb.Recordset
On Error GoTo ErrHandler:
Dim cn As Adodb.Connection
Dim rs As Adodb.Recordset
Dim strArray() As String
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\jxcdbase.mdb;Persist Security Info=False"
Set cn = New Adodb.Connection
Set rs = New Adodb.Recordset
cn.Open ConnStr strArray = Split(sql)
If StrComp(UCase$(strArray(0)), "select", vbTextCompare) = 0 Then
rs.Open Trim$(sql), cn, adOpenKeyset, adLockOptimistic
Set ExeSQL = rs
Else
cn.Execute sql
End IfExeSQl_Exit:
Set rs = Nothing
Set cn = Nothing
Exit Function
ErrHandler:
' 显示错误信息
MsgBox "错误号:" & Err.Number & " 错误信息:" & Err.Description, vbExclamation
Resume ExeSQl_Exit
End Function
解决方案 »
- 触发器可以用来做什么工作
- datagrid 数据绑定
- ********************发布一个控件类似于 Dadagrid,很好用,大家用用看**********************************
- 基础问题:转换时出现错误
- 为何adodb.command返回的recordset对象的recordset.count=-1
- 请教:一个关于从数据库中取2进制图片信息的问题!!!!请进来看看再说
- 请高手指点迷津!!
- *********请教winsock控件问题**********
- VB可以用JAVA的代码和控件吗?
- 关于combobox的问题
- 软件功能的两则小技巧
- 请问:WinHex中“剩余扇区在结尾”是怎么计算出来的?
Private Sub cmdt_Click()
Dim cn As New Adodb.Connection
Dim rs As New Adodb.Recordset
Dim sql As String
Dim username As String
Dim password As String
username = Trim(tbusername.Text)
If username = "" Then
MsgBox "用户名不能为空!", vbInformation, "系统登陆提示"
Exit Sub
End If
password = checkpwd.md5((tbpwd.Text))
sql = "select * from 系统表 where 用户名='" & username & "'"
MsgBox sql
Set rs = ExeSQL(sql)'=====================建议修改方案(换种方式)
sql="select * from 系统表 where 用户名='"& username & "'"
rs.open sql,conn,1,3msbox rs.eof
这样子调试看看'========================================If rs.EOF = True Then '====对象变量或With块变量未设置
If errortime > 2 Then
MsgBox "连续三次输入错误,系统自动退出!如果有何疑问请与系统管理员联系.", vbCritical, "系统提示"
Unload Me
Else
MsgBox "没有此用户,请重新输入用户名!", vbExclamation
errortime = errortime + 1
tbusername.Text = ""
tbusername.SetFocus
End If
Else
If password = rs!密码 Then
Load frmmain
Load MDIFormmain
MDIFormmain.Show
frmmain.Show
Me.Hide
Unload Me
Else
MsgBox "密码输入错误,请重试!", vbInformation, "系统登陆提示"
errortime = errortime + 1
tbpwd.Text = ""
tbpwd.SetFocus
End If
End If
rs.Close
Set rs = Nothing
End Sub
If StrComp(UCase$(strArray(0)), "SELECT", vbTextCompare) = 0 Then
或
If StrComp(LCase$(strArray(0)), "select", vbTextCompare) = 0 Then否则, 这个条件永远不可能是真。这个条件不为真的话, 你的SELECT语句被Execute了, 且ExeSQL函数不会返回数据集对象, 就造成了:
If rs.EOF = True Then '====出错处:对象变量或With块变量未设置
就是不知道UCase和LCase是什么意思?
If StrComp(LCase$(strArray(0)), "select", vbTextCompare) = 0 Then
已经改了,还有那里可能有问题??
看来这个程序并非楼主自己写的,对里面的函数的功能不是太了解哇。
或者rs.Open Trim$(sql), cn, adOpenKeyset, adLockOptimistic
Set ExeSQL = rs
有问题吗?