对于第一次机房这个项目,早就开始了,但是由于学校课程紧张的问题,一直没有跟进,后来弄完了机房了,又快考试了没来的进行总结,现在对此进行总结一下:
对于登录界面的流程如下:
输入用户名----判断是否输入(未输入提示)-----输入密码------判断输入是否为空(为空提示)-----连接数据库表User_Info、onwork_Info和worklogInfo-----与表中数据比对-----隐藏界面显示主窗体
登录界面涉及到的数据库表如下:
worklog_info表(用于存放用户登录记录)、
onwork_info表(用于确定用户是否登录)、
user_info表(用于记录用户信息)
登录界面具体内容如下:
输入用户名判断两者是否为空(为空提示),输入密码判断是否为空(为空提示),连接三个表,首先与user_info表比对查看是否存在此用户(为空提示无此用户),与onwork_info表比对查看是否存在数据(存在则提示此用户已登录),将数据存入worklog_info表中。
具体代码如下:
点击“确定”按钮的执行的操作如下:
Private Sub cmdOK_Click()
'对worklog_info 表操作
Dim mrcworklog As ADODB.Recordset '用于存放记录集
Dim worklogSQL As String '用于存放SQL语句
Dim worklogMsgText As String '用于存放返回信息
'对onwork_info表操作
Dim mrconwork As ADODB.Recordset '用于存放记录集
Dim onworkSQL As String '用于存放SQL语句
Dim onworkMsgText As String '用于存放返回信息
'对user_info表操作
Dim txtSQL As String '用于存放SQL语句 '用来存放SQL语句
Dim mrc As ADODB.Recordset '用于存放记录集
Dim MsgText As String '用于存放返回信息
onworkSQL = "select * from onwork_info where UserID = '" & Trim(txtUserName.Text) & "'"
Set mrconwork = ExecuteSQL(onworkSQL, onworkMsgText)
worklogSQL = "select * from worklog_info where UserID = '" & Trim(txtUserName.Text) & "' and status='True'"
Set mrcworklog = ExecuteSQL(worklogSQL, worklogMsgText)
'判断用户名是否为空
If Trim(txtUserName.Text = "") Then
MsgBox "请输入用户名!", vbOKOnly + vbExclamation, "警告"
txtUserName.SetFocus
txtPassWord.Text = ""
Else
txtSQL = "select * from User_Info where userID = '" & Trim(txtUserName.Text) & "'"
Set mrc = ExecuteSQL(txtSQL, MsgText)
'判断记录是否为空
If mrc.EOF = True Then
MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
txtUserName.SetFocus
txtPassWord.Text = ""
mrc.Close
Exit Sub
Else
'判断密码是否正确
If Trim(mrc.Fields(1)) = Trim(txtPassWord.Text) Then
If Trim(mrc.Fields(2)) = "管理员" Then
frmMain.GeneralUser.Enabled = True
frmMain.Operator.Enabled = True
frmMain.Administrators.Enabled = True
Else
If Trim(mrc.Fields(2)) = "操作员" Then
frmMain.GeneralUser.Enabled = True
frmMain.Operator.Enabled = True
frmMain.Administrators.Enabled = False
Else
If Trim(mrc.Fields(2)) = "一般用户" Then
frmMain.GeneralUser.Enabled = True
frmMain.Operator.Enabled = False
frmMain.Administrators.Enabled = False
End If
End If
End If
'判断是否此用户是否登陆过的问题
If mrconwork.EOF = True And mrcworklog.EOF = True Then
ok = True
'更新数据表worklog_info
mrcworklog.AddNew
mrcworklog.Fields(1) = Trim(txtUserName.Text)
mrcworklog.Fields(2) = Trim(mrc.Fields(2))
mrcworklog.Fields(3) = Date
mrcworklog.Fields(4) = Time
mrcworklog.Fields(7) = VBA.Environ("computername")
mrcworklog.Fields(8) = "True"
mrcworklog.Update
mrcworklog.Close
'更新数据表worklog_info
mrconwork.AddNew
mrconwork.Fields(0) = Trim(txtUserName.Text)
mrconwork.Fields(1) = Trim(mrc.Fields(2))
mrconwork.Fields(2) = Date
mrconwork.Fields(3) = Time
mrconwork.Fields(4) = VBA.Environ("computername")
mrconwork.Update
mrconwork.Close
mrc.Close
Else
ok = True
'更改onwork_info、worklog_info两个表的数据信息
mrcworklog.Fields(3) = Date
mrcworklog.Fields(4) = Time
mrcworklog.Update
mrcworklog.Close
mrconwork.Fields(2) = Date
mrconwork.Fields(3) = Time
mrconwork.Update
mrconwork.Close
mrc.Close
End If
frmMain.Show
Me.Hide
Else
'判断密码框是否为空以及密码真确性
If txtPassWord.Text = "" Then
MsgBox "密码不能为空,请输入密码!", vbOKCancel + vbExclamation, "警告"
txtPassWord.SetFocus
Exit Sub
Else
MsgBox "输入密码不正确,请重新输入!", vbOKCancel + vbExclamation, "警告"
txtPassWord.SetFocus
txtPassWord.Text = ""
mrc.Close
End If
End If
End If
End If
执行“取消”的操作如下:
Dim str As VbMsgBoxResult '定义消息框结果
Private Sub cmdCancel_Click()
str = MsgBox("是否退出系统?", vbOKCancel + vbQuestion, "提示")
If str = vbOK Then
Unload Me
End If
End Sub
优化方面:
1.随意拖动窗体:
Dim mx As Long '用于随意拖动窗体中宽的计算
Dim my As Long '用于随意拖动窗体中高的计算
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button And vbLeftButton Then '按下鼠标左按钮
mx = X
my = Y
End If
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'随意拖动无边框窗体
If Button And vbLeftButton Then
Me.Move Me.Left - mx + X, Me.Top - my + Y
End If
End Sub
2.限制字符:
见如下博客:
https://mp.csdn.net/postedit/86636625
3.禁止粘贴内容:
实现方法是在鼠标按下时清空粘贴板上的内容
Private Sub txtPassWord_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'不可粘贴
If Button = 2 Then
Clipboard.Clear
End If
End Sub
4.限制登录次数:
Private Sub Form_Load()
ok = False
'初次为0
miCount = 0
End Sub
Public ok As Boolean '记录确定次数
Dim miCount As Integer '定义密码的次数
Private Sub cmdOK_Click()
'限制登录次数,超过次数强制退出系统
miCount = miCount + 1
If miCount = 5 Then
MsgBox "超出限定次数,系统将被强制退出!", vbOKOnly + vbExclamation, "警告"
Unload Me
End If
End Sub
5.添加快捷键Enter:
Private Sub txtPassWord_KeyPress(KeyAscii As Integer)
'添加Enter快捷键
If KeyAscii = 13 Then
cmdOK.SetFocus
End If
End Sub