机房收费系统可以看成网吧的系统,我们去网吧上网需要上机,当然也需要下机,下机同时要计算消费金额、消费时间等,还要从上机表中删除,添加到上机表中。
一般的套路就是从上机表中需要下机的卡号的一行信息删去,在下机表中添加刚才下机的卡号的信息,当然大多数伙伴选择了这样的套路。大家可以先看一下下机表里需要填的信息:
一共14列信息需要填写,也是因为这样,我突然想到了之前高占路师哥说触发器,我们可以定义一个触发器,使上机表中删除一行数据时,并把这条数据添加到下机表中,这样下机岂不是省去了好多代码。
有了这样的想法就要去做,首先先在SQL里建立一个触发器,结合百度把建立触发器的代码写出来了(如下图)
ALTER trigger [dbo].[xiaji]
on [dbo].[OnLine_Info]
for delete
as
begin
insert into Line_Info (cardno ,studentNo ,studentName ,Department ,sex ,ondate ,ontime,computer)
select cardno ,studentNo ,studentName ,Department ,sex ,ondate ,ontime,computer
from deleted
end
现在问题来了,下机表中有好多值,上机表中是没有的,就会出现NULL,数据库是不允许这样的,那我之后再VB里把这些没有的字段都加上,调试的过程是很艰难的,中间的时候我有想过放弃这种方法,因为这样并没有起到减少代码的作用。但是我还是一条路走到黑了,既然有了这种想法,就要实现它,方法总是比困难多。下面是我成功的代码展示。
Dim mrc As ADODB.Recordset
Dim txtsql As String
Dim msgtext As String
Dim mrcc As ADODB.Recordset
Dim mrccc As ADODB.Recordset
Dim mrcccc As ADODB.Recordset
Dim mrccccc As ADODB.Recordset
Dim mrcccccc As ADODB.Recordset
If Not testtxt(txtID.Text) Then
MsgBox "请输入卡号!", 48, "警告"
Exit Sub
End If
txtsql = "select * from basicdata_info "
Set mrc = ExecuteSQL(txtsql, msgtext)
txtsql = "select * from student_info where cardno = '" & txtID.Text & "'"
Set mrcc = ExecuteSQL(txtsql, msgtext)
txtsql = "select * from online_info where cardno = '" & txtID.Text & "'"
Set mrccc = ExecuteSQL(txtsql, msgtext)
txtsql = "select * from online_info where cardno = '" & txtID.Text & "'"
Set mrccc = ExecuteSQL(txtsql, msgtext)
If mrcc.EOF Then
MsgBox "该卡号不存在", 48, "警告"
Exit Sub
End If
If Trim(mrcc.Fields(10)) = "不使用" Then
MsgBox "该卡号已经退卡!", 48, "提示"
Exit Sub
End If
If mrccc.EOF Then
MsgBox "该卡号以下机!", 48, "提示"
Exit Sub
End If
txtOffDate = Date
txtOffTime = Time
txtCTime.Text = Abs(Val(DateDiff("n", Time, Trim(mrccc.Fields(7))))) '计算消费时间
If txtCTime.Text < Trim(mrc.Fields(3)) Then
txtCash = mrcc.Fields(7)
txtCTime.Text = "0"
txtCMoney.Text = 0
Else
If Trim(mrcc.Fields(14)) = "临时用户" Then
txtCMoney = (CInt(Trim(txtCTime / 30 + 1)) * (Trim(mrc.Fields(1)) / 3)) '计算消费金额
txtCash = Trim(mrcc.Fields(7)) - txtCMoney.Text '计算余额
Else
txtCMoney = (CInt(Trim(txtCTime / 30) + 1) * (Trim(mrc.Fields(0)) / 2))
txtCash = Trim(mrcc.Fields(7)) - txtCMoney.Text
End If
End If
txtID = mrccc.Fields(0)
txtSID = mrccc.Fields(2)
txtName = mrccc.Fields(3)
txtSex = mrccc.Fields(5)
txtDepartment = mrccc.Fields(4)
txtCardType = mrcc.Fields(14)
txtOnDate = mrccc.Fields(6)
txtOnTime = mrccc.Fields(7)
mrcc.Fields(7) = txtCash.Text
lblPeople.Caption = mrccc.RecordCount - 1
mrccc.Delete
mrccc.Update
txtsql = "select * from line_info where ontime = '" & txtOnTime.Text & "'"
Set mrcccccc = ExecuteSQL(txtsql, msgtext)
txtsql = txtsql & Text1.Text & " " & " cardno = '" & Trim(txtID.Text) & "'"
Set mrccccc = ExecuteSQL(txtsql, msgtext)
mrccccc.Fields(8) = Date
mrccccc.Fields(9) = Time
mrccccc.Fields(10) = txtCTime.Text
mrccccc.Fields(11) = txtCMoney.Text
mrccccc.Fields(12) = txtCash.Text
mrccccc.Fields(13) = "正常下机"
mrccccc.Update
MsgBox "下机成功", 48, "提示"