在机房的时候确实有许多细节需要注意,有很多事数据库中的细节问题,正式开始之前,对数据库中的各个表进行了一个小小的研究和讨论,为了能够后期更方便的在写代码过程中清楚运用哪个表。其中在Worklog这个表中发小了一些问题,那就是这表中的数据在登陆时添加一条记录,在退出窗体时添加的这条记录又进行更新一次。
登陆时候增加信息的代码很简单了:
Private Sub MDIForm_Load()
txtSQL = "select * from onwork_info " ' 查询记录
Set mrc = ExecuteSQL(txtSQL, msgtext)
txtSQL = "select * from user_info where userID='" & UserName & "'" ' 查询指定用户
Set mrcc = ExecuteSQL(txtSQL, msgtext)
txtSQL = "select * from worklog_info where userID='" & UserName & "'" '查询指定记录"
Set mrccc = ExecuteSQL(txtSQL, msgtext)
'更新onwork数据表
mrc.AddNew
mrc.Fields(0) = Trim(mrcc.Fields(0))
mrc.Fields(1) = Trim(mrcc.Fields(2))
mrc.Fields(2) = Trim(Date)
mrc.Fields(3) = Trim(Time)
mrc.Fields(4) = VBA.Environ("computername")
mrc.Update
mrc.Close
'更新worklog数据表
mrccc.AddNew
mrccc.Fields(1) = Trim(UserName)
mrccc.Fields(2) = Trim(mrcc.Fields(2))
mrccc.Fields(3) = Trim(Date)
mrccc.Fields(4) = Trim(Time)
mrccc.Fields(7) = VBA.Environ("computername")
mrccc.Fields(8) = "True"
mrccc.Update
myBookmark = mrccc.Bookmark
mrccc.Close
txtSQL = "select * from user_info where userid='" & UserName & "'"
Set mrc = ExecuteSQL(txtSQL, msgtext)
Rem:权限判定
If Trim(mrc.Fields(2)) = "一般用户" Then
frmMain.Operation(1).Enabled = False
frmMain.Manager(2).Enabled = False
End If
If Trim(mrc.Fields(2)) = "操作员" Then
frmMain.Manager(2).Enabled = False
End If
mrc.Close
End Sub
此代码用到了书签“bookmark”,记得一定要进行定义。(我感觉Bookmark的作用就是做一个标记,在使用的时候直接移动到这个标签处使用就可以(希望有大神能够帮我完善))。
然后就是关闭窗体的代码,关闭窗体的时候,Worklog进行更新,这里用到了QueryUnload事件,此代码在frmMain窗体上写:
Rem:判定是否退出,清空ONwork数据表
Private Sub MDIForm_queryUnload(Cancel As Integer, unloadmode As Integer)
txtSQL = "select * from onwork_info where userid='" & Trim(UserName) & "'"
Set mrcc = ExecuteSQL(txtSQL, msgtext)
txtSQL = "select * from worklog_info where userid='" & UserName & "' " '
Set mrccc = ExecuteSQL(txtSQL, msgtext)
If MsgBox("确定关闭吗", vbOKCancel + vbExclamation, "温馨提示") = vbOK Then
'更新worklog数据表
mrccc.Bookmark = myBookmark
mrccc.Fields(5) = Trim(Date)
mrccc.Fields(6) = Trim(Time)
mrccc.Fields(8) = "False"
mrccc.Update
mrccc.Close
Do While Not mrcc.EOF
mrcc.Delete
mrcc.Update
mrcc.MoveNext
Loop
Cancel = 0
Else
Cancel = 1
End If
End Sub
此代码在开始的时候一直没有实现功能,后来经过多次调试,发现在worklog的代码中用精确查找就能够轻易解决问题了。本以为问题很难复杂,多次尝试,换个思维就能迎刃而解。
而且此代码的思路实在巨人的肩膀上学习的。