机房收费系统总结之错误总结
2014-11-15 08:49
190 查看
机房收费系统中,自己在敲的时候出了好多问题,有的是自己想通的,有些是查资料解决的,有些是找同学帮忙解决的,非常感谢那些帮助过我的同学们,下面就对典型的问题进行总结。
1、如图所示:
![](https://img-blog.csdn.net/20141115085032239?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenpoOTIwNjI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这个问题算是比较早的问题了,打开数据库的时候打不开,出了这个问题一般情况下是服务没有打开,具体的操作步骤是:计算机(右击)----管理------服务和应用程序-----SQL
SERVER配置管理器 把其中的服务都打开,再连接数据就能连的上了。
2、在充值窗体中,用来显示的文本框中实现自动换行:首先把Text1的MultiLine属性设置为TRUE,然后相应的程序中添加类似Text1.Text= "aa" &
vbCrLf & "bb"就实现了。其次对于text文本框,没有.clear属 性 应该写成text1.text=""才能清空文本框中的内容。
3、在机房值班老师一览表的查询中, txtSQL = "select
distinct * from worklog_Info
order by serial"这条语句帮了我大忙,之前没有order by serial 结果查询的顺序很乱,之前没有distinct,结果是这样的额:
![](https://img-blog.csdn.net/20141115085314292?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenpoOTIwNjI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
当我把distinct加上之后:
![](https://img-blog.csdn.net/20141115085406927?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenpoOTIwNjI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
之前重复的记录就都不存在了,而且还是按顺序进行排列。
4、在敲“添加和删除用户”的时候,把ExecuteSQL(TXTSQL,MSGTEXT)中的内容写反了写成了ExecuteSQL(MSGTEXT,TXTSQL),结果在执行到关于mrc的代码就会报错,找了半天,原来是这个顺序不能变。
5、关于“引用无效NULL值”,在向myflexgrid控件中添加信息的时候,如果调用数据表中的字段有NULL值,则会报错“引用无效NULL值”,这个问题的解决办法如下:
If IsNull(Trim(mrc.Fields(6)) Then '通过IsNull函数来判断是否记录表为空
myflexgird.TextMatrix(.Rows - 1, 3) = ""
Else
myflexgrid.TextMatrix(.Rows - 1, 3) = mrc.Fields(6)
End If
加上这样的判断后,即使数据表中的值为NULL,也不会报错了。
6、关于上下机中重复登录的问题,之前在代码中有涉及到判断是否重复登录,可是并为起到作用,如下,这是我未修改之前的代码:
txtSQL = "select * from OnLine_Info" '把相关卡号的信息输入到OnLine表中
Set mrc1 = ExecuteSQL(txtSQL, MsgText)
If Not mrc1.EOF Then '(限制重复登录失败,因为mrc只为其中一条记录,而且不一定是field(0)=txt的记录) If mrc1.Fields(0) = Trim(txtCardNo.Text) Then '输入的卡号正在上机
MsgBox "您输入的卡号正在上机,请重新输入卡号!", vbOKOnly + vbExclamation, "警告"
txtCardNo.SetFocus
Exit Sub
End If
End If
可是这样便出了一个问题,mrc中会筛选出许多条记录,如何就能知道选出的记录正好就是正在上机的呢??好多次我再次单击上机按钮的时候,还可以继续上机,问题就出在了这里,于是乎,我把代码稍微做了调整如下:
txtSQL = "select * from OnLine_Info where cardno= '" & txtCardNo.Text & "'"
Set mrc2 = ExecuteSQL(txtSQL, MsgText) '此记录集可以用来限制重复登录
If Not mrc2.EOF Then
MsgBox "您输入的卡号正在上机,请重新输入卡号!", vbOKOnly + vbExclamation, "警告"
txtCardNo.SetFocus
Exit Sub
End If
这样的话就唯一确定了记录集中的内容为文本框中的记录。总而言之,数据库可以同时处理多个记录,而VB程序只能每次执行一条记录,这一点搞清楚了,问题就解决了。
7、剩下的这个问题就是字符或数据类型不匹配,由于这次的数据库不是自己创建的,所以在使用的过程中因为字符类型设计不合理出了一些问题,比如说怀疑自己的程序在这一点上出了问题,可以通过
Debug.Print mrc.Fields(0) ' 字符类型的错误 验证
Debug.Print Trim(txtCardNo.Text) '字符类型的错误 验证
这样的方式来验证是否是因为字符类型不匹配而导致的问题。
这几个问题是这次做系统中比较典型的问题,当然对于上下机、结账、组合查询这三座大山并不是没有问题,关于他们的理解会在接下来的博客中提及。通过总结问题,回头看看其实这个系统也就那么回事,自己一个人没有源码的情况下完成它确实不容易,接下来的学习中要更加努力了。
1、如图所示:
这个问题算是比较早的问题了,打开数据库的时候打不开,出了这个问题一般情况下是服务没有打开,具体的操作步骤是:计算机(右击)----管理------服务和应用程序-----SQL
SERVER配置管理器 把其中的服务都打开,再连接数据就能连的上了。
2、在充值窗体中,用来显示的文本框中实现自动换行:首先把Text1的MultiLine属性设置为TRUE,然后相应的程序中添加类似Text1.Text= "aa" &
vbCrLf & "bb"就实现了。其次对于text文本框,没有.clear属 性 应该写成text1.text=""才能清空文本框中的内容。
3、在机房值班老师一览表的查询中, txtSQL = "select
distinct * from worklog_Info
order by serial"这条语句帮了我大忙,之前没有order by serial 结果查询的顺序很乱,之前没有distinct,结果是这样的额:
当我把distinct加上之后:
之前重复的记录就都不存在了,而且还是按顺序进行排列。
4、在敲“添加和删除用户”的时候,把ExecuteSQL(TXTSQL,MSGTEXT)中的内容写反了写成了ExecuteSQL(MSGTEXT,TXTSQL),结果在执行到关于mrc的代码就会报错,找了半天,原来是这个顺序不能变。
5、关于“引用无效NULL值”,在向myflexgrid控件中添加信息的时候,如果调用数据表中的字段有NULL值,则会报错“引用无效NULL值”,这个问题的解决办法如下:
If IsNull(Trim(mrc.Fields(6)) Then '通过IsNull函数来判断是否记录表为空
myflexgird.TextMatrix(.Rows - 1, 3) = ""
Else
myflexgrid.TextMatrix(.Rows - 1, 3) = mrc.Fields(6)
End If
加上这样的判断后,即使数据表中的值为NULL,也不会报错了。
6、关于上下机中重复登录的问题,之前在代码中有涉及到判断是否重复登录,可是并为起到作用,如下,这是我未修改之前的代码:
txtSQL = "select * from OnLine_Info" '把相关卡号的信息输入到OnLine表中
Set mrc1 = ExecuteSQL(txtSQL, MsgText)
If Not mrc1.EOF Then '(限制重复登录失败,因为mrc只为其中一条记录,而且不一定是field(0)=txt的记录) If mrc1.Fields(0) = Trim(txtCardNo.Text) Then '输入的卡号正在上机
MsgBox "您输入的卡号正在上机,请重新输入卡号!", vbOKOnly + vbExclamation, "警告"
txtCardNo.SetFocus
Exit Sub
End If
End If
可是这样便出了一个问题,mrc中会筛选出许多条记录,如何就能知道选出的记录正好就是正在上机的呢??好多次我再次单击上机按钮的时候,还可以继续上机,问题就出在了这里,于是乎,我把代码稍微做了调整如下:
txtSQL = "select * from OnLine_Info where cardno= '" & txtCardNo.Text & "'"
Set mrc2 = ExecuteSQL(txtSQL, MsgText) '此记录集可以用来限制重复登录
If Not mrc2.EOF Then
MsgBox "您输入的卡号正在上机,请重新输入卡号!", vbOKOnly + vbExclamation, "警告"
txtCardNo.SetFocus
Exit Sub
End If
这样的话就唯一确定了记录集中的内容为文本框中的记录。总而言之,数据库可以同时处理多个记录,而VB程序只能每次执行一条记录,这一点搞清楚了,问题就解决了。
7、剩下的这个问题就是字符或数据类型不匹配,由于这次的数据库不是自己创建的,所以在使用的过程中因为字符类型设计不合理出了一些问题,比如说怀疑自己的程序在这一点上出了问题,可以通过
Debug.Print mrc.Fields(0) ' 字符类型的错误 验证
Debug.Print Trim(txtCardNo.Text) '字符类型的错误 验证
这样的方式来验证是否是因为字符类型不匹配而导致的问题。
这几个问题是这次做系统中比较典型的问题,当然对于上下机、结账、组合查询这三座大山并不是没有问题,关于他们的理解会在接下来的博客中提及。通过总结问题,回头看看其实这个系统也就那么回事,自己一个人没有源码的情况下完成它确实不容易,接下来的学习中要更加努力了。