【VB与数据库】机房收费系统开发阶段之登陆
2015-06-18 19:26
423 查看
在机房收费系统中开始就是登陆窗体,在开始的时候如果全局观没有把握好,就会丢掉更新数据库中的数据,我刚开始就忘了更新Onwork _Info中的数据,所以要做一个窗体前,就要给它建立好自己的关系图,牵一发而动全身。下面我介绍我做登陆窗体的思路:
一、思路流程图
通过做机房收费系统,我发现它锻炼的不仅仅是数据库表之间的增删改查,更是一种编程的逻辑。在操作的过程中有一点疏忽就会导致某个表中的数据没有更新或者被删除。所以可以通过流程图来进行思路的联通,按照思路来,就不会丢一步,多一步。
二、代码的组织
Private Sub cmdOK_Click()
Dim txtSQL As String '把从数据库中查找后的数据赋值给txtSQL
Dim mrc As ADODB.Recordset '定义一个记录集的类,条件是在工程中引用。
'定以后可以用set new来创建一个该类的实例,
Dim MsgText As String 'ExecuteSQL的参数,实行完SQL语句后的弹出框,是成功还是失败
Dim mrcc As ADODB.Recordset
Dim mrcd As ADODB.Recordset
Dim a, b, c, d
On Error Resume Next
UserName = ""
b = Date
c = Time
If Trim(txtUserName.Text = "") Then 'trim将字符串拷贝
MsgBox "用户名不能为空,请重新输入用户名!", 0 + 48, "警告"
txtUserName.SetFocus
Else
txtSQL = "select * from User_Info where userID='" & txtUserName & "'"
Set mrc = ExecuteSQL(txtSQL, MsgText)
a = mrc.Fields(2)
If mrc.EOF Then
MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
txtUserName.SetFocus
GoTo d:
Else
If Trim(mrc.Fields(1)) = Trim(txtpassword.Text) Then
ok = True
mrc.Close
Me.Hide
UserName = Trim(txtUserName.Text) '把用户名赋值给UserName
Else
MsgBox "密码错误,请重新输入!", vbOKOnly + vbExclamation, "警告"
GoTo d:
End If
End If
End If
txtSQL = "select * from OnWork_Info where UserID='" & Trim(txtUserName.Text) & "'"
Set mrcc = ExecuteSQL(txtSQL, MsgText)
If mrcc.EOF Then
mrcc.AddNew
mrcc.Fields(0) = Trim(txtUserName.Text)
mrcc.Fields(1) = a
mrcc.Fields(2) = b
mrcc.Fields(3) = c
mrcc.Fields(4) = Trim(VBA.Environ("computername")) '获取计算机名
mrcc.Update
Else
MsgBox "亲,您的用户处于登陆状态,检查您的账号或者联系管理员!", vbOKOnly + vbExclamation, "警告"
End
End If
mrcc.Close
txtSQL = "select * from worklog_Info "
Set mrcd = ExecuteSQL(txtSQL, MsgText)
mrcd.AddNew
mrcd.Fields(1) = UserName
mrcd.Fields(2) = a
mrcd.Fields(3) = b
mrcd.Fields(4) = c
mrcd.Fields(4) = c
mrcd.Fields(5) = Null
mrcd.Fields(6) = Null
mrcd.Fields(7) = Trim(VBA.Environ("computername")) '获取计算机名
mrcd.Fields(8) = Trim("True")
mrcd.Update
mrcd.Close
frmMain.Show
Unload Me
d:
miCount = miCount + 1
If miCount > 3 Then
End
Else
Exit Sub
End If
End Sub
一、思路流程图
通过做机房收费系统,我发现它锻炼的不仅仅是数据库表之间的增删改查,更是一种编程的逻辑。在操作的过程中有一点疏忽就会导致某个表中的数据没有更新或者被删除。所以可以通过流程图来进行思路的联通,按照思路来,就不会丢一步,多一步。
二、代码的组织
Private Sub cmdOK_Click()
Dim txtSQL As String '把从数据库中查找后的数据赋值给txtSQL
Dim mrc As ADODB.Recordset '定义一个记录集的类,条件是在工程中引用。
'定以后可以用set new来创建一个该类的实例,
Dim MsgText As String 'ExecuteSQL的参数,实行完SQL语句后的弹出框,是成功还是失败
Dim mrcc As ADODB.Recordset
Dim mrcd As ADODB.Recordset
Dim a, b, c, d
On Error Resume Next
UserName = ""
b = Date
c = Time
If Trim(txtUserName.Text = "") Then 'trim将字符串拷贝
MsgBox "用户名不能为空,请重新输入用户名!", 0 + 48, "警告"
txtUserName.SetFocus
Else
txtSQL = "select * from User_Info where userID='" & txtUserName & "'"
Set mrc = ExecuteSQL(txtSQL, MsgText)
a = mrc.Fields(2)
If mrc.EOF Then
MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
txtUserName.SetFocus
GoTo d:
Else
If Trim(mrc.Fields(1)) = Trim(txtpassword.Text) Then
ok = True
mrc.Close
Me.Hide
UserName = Trim(txtUserName.Text) '把用户名赋值给UserName
Else
MsgBox "密码错误,请重新输入!", vbOKOnly + vbExclamation, "警告"
GoTo d:
End If
End If
End If
txtSQL = "select * from OnWork_Info where UserID='" & Trim(txtUserName.Text) & "'"
Set mrcc = ExecuteSQL(txtSQL, MsgText)
If mrcc.EOF Then
mrcc.AddNew
mrcc.Fields(0) = Trim(txtUserName.Text)
mrcc.Fields(1) = a
mrcc.Fields(2) = b
mrcc.Fields(3) = c
mrcc.Fields(4) = Trim(VBA.Environ("computername")) '获取计算机名
mrcc.Update
Else
MsgBox "亲,您的用户处于登陆状态,检查您的账号或者联系管理员!", vbOKOnly + vbExclamation, "警告"
End
End If
mrcc.Close
txtSQL = "select * from worklog_Info "
Set mrcd = ExecuteSQL(txtSQL, MsgText)
mrcd.AddNew
mrcd.Fields(1) = UserName
mrcd.Fields(2) = a
mrcd.Fields(3) = b
mrcd.Fields(4) = c
mrcd.Fields(4) = c
mrcd.Fields(5) = Null
mrcd.Fields(6) = Null
mrcd.Fields(7) = Trim(VBA.Environ("computername")) '获取计算机名
mrcd.Fields(8) = Trim("True")
mrcd.Update
mrcd.Close
frmMain.Show
Unload Me
d:
miCount = miCount + 1
If miCount > 3 Then
End
Else
Exit Sub
End If
End Sub
这是我的代码,虽然这几句代码可以实现,但是在其中我还是发现了几个不和谐的地方:
①定义随意,没有一个系统的定义变量规律,虽然可以使用,但是如果团队合作,这将是最致命的。
②我记得我的C++老师说过,Goto语句尽量少用,我这次用了两三次,其中还是可以避免的,代码可以完善的更好。
③SQL语句用的繁琐,自己感觉可以完善。
三、小结
通过这次的练习,我发现我做流程图的能力提高了,同时还有在敲代码的过程中也提高了自己的纠错能力,发现自己不再怕bug了,哪里有bug,哪里就有我。所以只要我们多多的练习,有了bug,不要立刻找别人,先自己想一想,百度一下,可能你的下一步操作就会解决!老师总说代码如人生!从流程图的头到尾,就是人生的选择,在过程中就要看自己是选择Y还是N。
相关文章推荐
- SQL_XML 转化为标准Table格式
- oracle sql 执行计划分析
- nagios 监控 mongodb 解决nagios界面显示null 问题
- 数据库设计规范
- SQL Server 2008数据库邮件配置及应用
- 不安装oracle客户端,用plsql连接oracle
- SQLCipher的使用
- Oracle数据库的Ctrl+Z -> Undo
- linux下静默方式安装oracle
- Redhat 5.8 ORACLE 11gR2 RAC安装文档2-grid安装
- 加载web-inf下的xml文件,java连接oracle的几种情况,telnet,tnsping,sqlplus的一点学习
- redis集群部署之codis 维护脚本
- win7 64位pl/sql配置
- redis 数据库维护之 key 大小获取
- MySQLdb autocommit
- mysql int(3)与int(11)的区别
- JDBC连接MySQL字符集错误解决办法
- Redis主从配置
- 定位高消耗资源的sql语句
- sqlite 数据库增加 createdStamp, LastUpdatedStamp 列 (默认值为当前时间)