終於弄完一個窗體了,之前我通過查看別人的博客,然後一直在想他們爲什麼都要用3個mrc,爲什麼不能用一個?經過多次嘗試後發現用3個mrc的用處了。爲什麼會發現3個mrc的用處呢,我還得感謝這個實時錯誤。
實時錯誤3265
問題:首先我要將這些數據存儲到worklog工作表中,明明mrc.fields(7)的位置就是要存放我的電腦名稱,但是他卻報錯說沒有找到項目。
'查詢指定用戶名的記錄
TxtSql = "select * from User_info where userID='" & TxtUserName & "'"
'執行查詢語句
Set mrc = ExecuteSQL(TxtSql, MsgText)
mrc.Fields(1) = Trim(TxtUserName.Text)
mrc.Fields(2) = Trim(mrc.Fields(2)) '判斷等級的
mrc.Fields(3) = Trim(Date) 'date爲當前系統的日期,time爲當前系統的時間
mrc.Fields(4) = Trim(Time)
mrc.Fields(7) = Trim(VBA.Environ("computername"))
mrc.Fields(8) = Trim(True)
mrc.Update
原因:我的mrc是在User_info這個表中進行查詢並存放記錄的,所以如果讓他更新的話,他就只能將數據存放到User_info這個表中了,沒有辦法存放到另一個表worklog中。
解決方法:我們需要創建一個能夠將worklog進行更新的mrc。
解決後:
'創建一個能夠返回worklog的記錄集
TxtSql2 = "select * from worklog_info"
'執行查詢語句
Set mrcWorklog = ExecuteSQL(TxtSql2, MsgText)
mrcWorklog.AddNew
mrcWorklog.Fields(1) = Trim(TxtUserName.Text)
mrcWorklog.Fields(2) = Trim(mrc.Fields(2)) '判斷等級的
mrcWorklog.Fields(3) = Trim(Date) 'date爲當前系統的日期,time爲當前系統的時間
mrcWorklog.Fields(4) = Trim(Time)
mrcWorklog.Fields(7) = Trim(VBA.Environ("computername"))
mrcWorklog.Fields(8) = Trim(True)
mrcWorklog.Update
mrcWorklog.Close
爲什麼要用三個mrc呢?因爲在一開始的時候我們需要一個用來存放我們在user_info 查詢的賬號密碼。一個用來更新worklog中的信息,一個用來更新onwork中的信息。總共需要三個。
登陸窗體
流程圖
Private Sub CmdOk_Click()
'用來存放SQL語句
Dim TxtSql As String
Dim TxtSql2 As String
Dim TxtSql3 As String
'用來存放記錄集對象
Dim mrc As ADODB.Recordset
Dim mrcWorklog As ADODB.Recordset
Dim mrcOnWork As ADODB.Recordset
'用來存放返回信息
Dim MsgText As String
Dim micount As Integer '用來記錄錯誤的次數
UserName = "" '用來存放賬戶名
'判斷用戶名是否爲空
If Trim(TxtUserName = "") Then
MsgBox "沒有這個用戶,請重新輸入用戶名", vbOKCancel + vbExclamation, "警告"
TxtUserName.SetFocus
TxtPassword = ""
micount = micount + 1
Exit Sub
Else
'判斷密碼時候爲空
If Trim(TxtPassword = "") Then
MsgBox "密碼不能爲空,請重新輸入密碼!", vbOKCancel + vbExclamation, "警告"
TxtPassword.SetFocus
micount = micount + 1
Exit Sub
End If
'查詢指定用戶名的記錄
TxtSql = "select * from User_info where userID='" & TxtUserName & "'"
'執行查詢語句
Set mrc = ExecuteSQL(TxtSql, MsgText)
If mrc.EOF = True And mrc.BOF = True Then
MsgBox "沒有該用戶,請重新輸入!", vbOKCancel + vbExclamation, "警告"
TxtUserName.SetFocus
TxtPassword.Text = ""
micount = micount + 1
Exit Sub
Else
'判讀輸入密碼是否正確
If Trim(mrc.Fields(1)) = Trim(TxtPassword.Text) Then
ok = True
UserName = Trim(TxtUserName.Text)
'判斷他們的等級
If Trim(mrc.Fields(2)) = "一般用戶" Then
FrmMain.level2.Enabled = False
FrmMain.level3.Enabled = False
FrmMain.Show
ElseIf Trim(mrc.Fields(2)) = "操作員" Then
FrmMain.level3.Enabled = False
FrmMain.Show
Else
FrmMain.Show
End If
'把當前內容添加到worklog數據庫中
'創建一個能夠返回worklog的記錄集
TxtSql2 = "select * from worklog_info"
'執行查詢語句
Set mrcWorklog = ExecuteSQL(TxtSql2, MsgText)
'創建一個能夠返回onwork的記錄集
TxtSql3 = "select * from onwork_info "
'執行查詢語句
Set mrcOnWork = ExecuteSQL(TxtSql3, MsgText)
mrcOnWork.AddNew
mrcOnWork.Fields(0) = Trim(TxtUserName.Text)
mrcOnWork.Fields(1) = Trim(mrc.Fields(2))
mrcOnWork.Fields(2) = Trim(Date)
mrcOnWork.Fields(3) = Trim(Time)
mrcOnWork.Fields(4) = Trim(VBA.Environ("computername"))
mrcOnWork.Update
mrcOnWork.Close
mrcWorklog.AddNew
mrcWorklog.Fields(1) = Trim(TxtUserName.Text)
mrcWorklog.Fields(2) = Trim(mrc.Fields(2)) '判斷等級的
mrcWorklog.Fields(3) = Trim(Date) 'date爲當前系統的日期,time爲當前系統的時間
mrcWorklog.Fields(4) = Trim(Time)
mrcWorklog.Fields(7) = Trim(VBA.Environ("computername"))
mrcWorklog.Fields(8) = Trim(True)
mrcWorklog.Update
mrcWorklog.Close
mrc.Close
Me.Hide
Else
MsgBox "輸入密碼不正確,請重新輸入!", vbOKOnly + vbExclamation, "提示"
TxtPassword = ""
TxtPassword.SetFocus
micount = micount + 1
End If
End If
End If
If micount = 3 Then
MsgBox "登錄錯誤以達到三次,請重新登錄!", vbOKOnly + vbExclamation, "提示"
Unload Me
End If
End Sub