1:登录窗体的文本框禁止复制
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
Clipboard.clear ’清空粘贴板
Endif
End Sub
2:msflexgrid 控件的显示的问题
a、去除多余空行
原因:
原因:当我们多次单击查询按钮的时候,.rows属性会一直累加,所以导致我们的总行数一直在增加。
这个时候我们需要做的就是: 在每次单击之前先将.rows的属性设置为1 只剩下标题行。
b : 选中变色
Private Sub myFlexGrid1_Click()
myFlexGrid1.SelectionMode = flexSelectionByRow '单击的时候选择的是整行
myFlexGrid1.FocusRect = flexFocusNone '在当前单元的周围华一个焦点框
End Sub
c:当msflexgrid的内容为空的时候,禁止使用excel 导出:
If MSFlexGrid1.Rows = 1 Then
MsgBox "当前没有查询到任何记录,所以无法导出到Excel", vbOKOnly + vbExclamation, "警告"
Exit Sub
在建立表之前添加一条判断语句,当我们的msflexgrid 中的记录只有标题栏,
也就是只有一条记录,那么我们就提示错误,不允许数据导出!
3:上机状态查询窗体:
a : 当字段名选中为姓名的时候,操作符中只能显示“=”
b : 当字段名选中日期或者时间的时候要显示日期或时间控件
代码:
Private Sub col1_Click()
'如果我们选中的是姓名,那么我们的符号框中只能显示等于号
If col1.Text = "姓名" Then
fuhao1.Text = "="
fuhao1.Enabled = False
Else
fuhao1.Enabled = True
End If
'如果我们选中的查询字段是日期,那么我们将显示日期控件,否则隐藏
If col1.Text = "上机日期" Or col1.Text = "下机日期" Then
day1.Visible = True
txt1.Text = day1.Value
Else
day1.Visible = False
txt1.Text = ""
End If
但是这样写有一个问题就是当我们在选中时间的时候由于我将日期控件的属性改为时间控件之后,返回的时间值还是日期,所以如果随便输入一些不符合要求的符号,那么久容易出错,所以我在查询控件的代码中加入了一个on error goto 代码:
On Error GoTo Err_line
Err_line:
Exit Sub
4:所有学生下机:
优化之前存在的问题:
a : 所有学生下线虽然数据库中的数据都下线了,但是主界面的上机人数却没有改变
没有跟新line表中的数据,也没有更新student表中所剩的金额
全部下机涉及到的表有:
Line_info online_info student_info
代码:
Private Sub allDown_Click()
Dim mrc As ADODB.Recordset '链接online 表
Dim txtsql As String
Dim msgtxt As String
Dim mrcc As ADODB.Recordset '链接line表
Dim txtsqlc As String
Dim msgtxtc As String
Dim mrc_stu As ADODB.Recordset '链接学生表
Dim txtsqls As String
Dim msgtxts As String
Dim dat
dat = Date
Dim tim
tim = Time
Dim usemoney As Long
Dim usetime As Long
Dim cardid As String
Dim cashmoney As Long
txtsqlc = "select * from line_info where status='true'"
Set mrcc = ExecuteSQL(txtsqlc, msgtxtc)
If Not mrcc.EOF Then
Do While Not mrcc.EOF
cardid = mrcc.Fields(1)
mrcc.Fields(8) = dat
mrcc.Fields(9) = tim
costday = DateDiff("n", mrcc.Fields(6), Date) '花费的时间
costtime = DateDiff("n", mrcc.Fields(7), Time) '花费的时间
usetime = Val(costday) + Val(costtime)
mrcc.Fields(10) = Trim(Str(usetime))
mrcc.Fields(13) = "false"
mrcc.Fields(14) = "HYF"
mrcc.Update
txtsqls = "select * from student_info where cardno='" & Trim(cardid) & "'"
Set mrc_stu = ExecuteSQL(txtsqls, msgtxts)
cashmoney = mrc_stu.Fields(7)
If usetime < 2 Then
usemoney = 0
mrcc.Fields(11) = 0
mrcc.Fields(12) = Trim(Str(cashmoney))
mrcc.Update
Else
If usetime < 60 Then
usemoney = 2
mrcc.Fields(11) = 2
mrcc.Fields(12) = Trim(Val(cashmoney) - Val(usemoney))
mrc_stu.Fields(7) = Trim(Val(cashmoney) - Val(usemoney))
mrc_stu.Update
mrcc.Update
Else
usemoney = (usetime Mod 60) * 2
mrcc.Fields(11) = Str(usemoney)
mrcc.Fields(12) = Trim(Val(cashmoney) - Val(usemoney))
mrc_stu.Fields(7) = Trim(Val(cashmoney) - Val(usemoney))
mrc_stu.Fields.Update
mrcc.Update
End If
End If
mrcc.MoveNext
Loop
End If
'将所有的学生下机
txtsql = "select * from online_info"
Set mrc = ExecuteSQL(txtsql, msgtxt)
If mrc.EOF Then
MsgBox "当年没有用户上机!", vbOKOnly + vbExclamation, "警告"
Else
Do While Not mrc.EOF
mrc.Delete
mrc.MoveNext
Loop
myFlexGrid1.Clear
MsgBox "所有学生已经成功下机!", vbOKOnly + vbExclamation, "警告"
frmMain.allPeople(10).Caption = "0"
End If
End Sub
5:再某一时刻只让一个窗体显示:
Private Sub Form_Deactivate()
If Me.WindowState <> 1 Then
Me.WindowState = 1
End If
End Sub
6:强烈大家在更新数据表中数据的时候,在添加的内容前面加上trim()函数
trim()函数的作用是去掉括号内部字符串的前后空格,
如果不加这个trim()函数,我们添加到数据库表中的数据就是 空格+字符串,所添加的字符串的前面会多一个空字符,
这样不便于后面的“数据库查找操作”!