通过画流程图和查博客,缕清思路后开始敲代码,运行却发现有很多BUG,不过,最开心也是最有意义的事情就应该是调BUG啦,都说要站在BUG的肩膀上成长,没有问题,我又怎么能成长呢?
问题一:实时错误:“91”,对象变量或with块变量未设置
调试:mrcBa=Nothing,显示msgtextBa查询错误,所以下边比较余额是否充足时也没有数据可以比较。
查询错误显示“列名”有错误,查看代码,对比数据库,发现数据库Basicdata表中没有cardno字段,所以使用cardNo为查询条件怎么可以查到数据集呢?
思考我到底要查询哪个字段来与余额进行比较?修改查询语句
有两种设计思路:
一、设计用户卡中的钱至少大于基本数据中的最少金额——5元即可,则其对应数据库中的limitcash字段。
此时代码应为:
'判断卡中余额是否充足——student表和basicdata表对比最低金额
txtsqlBa = "select limitcash from basicdata_info " '查询basicdata表中的最低金额——limitcash字段,将查询的数据集与student表中的余额cash进行对比
Set mrcBa = ExecuteSQL(txtsqlBa, msgtextBa)
txtsqlStu = "select * from student_info where cardno='" & Trim(txtcardno.Text) & "'"
Set mrcStu = ExecuteSQL(txtsqlStu, msgtextStu)
If Val(mrcStu.Fields(7)) < Val(mrcBa.Fields(0)) Then '注意因为以limitcash为查询条件,所以此时mrcBa数据集中只有一列字段名——limitcash,所以写mrcba.fields(0)
MsgBox "此卡余额不足,请先充值!", 0 + 48, "提示"
txtcardno.Text = ""
txtcardno.SetFocus
Exit Sub
Else
MsgBox "上机成功!", 0 + 48, "提示"
Exit Sub
End If
注意: 因为已limitcash为查询条件,所以此时mrcBa数据集中只有一列字段名——limitcash,所以写mrcba.fields(0),所以不可以写数据库中的mrcba.fields(5),否则报错:实时错误:“3265”:在对应所需名称或序数的集合中,未找到项目。
二、考虑用户的卡中余额是否充足,即要考虑卡中的钱是否足够用户上机的基本时间——2分钟,并且上机2分钟即算上机1个小时,则此时要考虑用户类型不同,每小时的消费金额不同:固定用户一个小时的费用为2元,而临时用户每小时费用是5元。
此时应该分开查询并且与余额进行比较:
1.查询student表中卡号的用户类型为固定用户的,则用basicdata表中的Rate字段与余额进行比较
2.查询student表中卡号的用户类型为临时用户的,则用basicdata表中的tmpRate字段与余额进行比较。
代码:(只是分开查询,注意字段名和查询条件即可,代码暂略)
此外,出现“91”错误的原因还有其他的可能,比如数据库权限未打开,ODBC数据源未连接好,代码的其他错误等,但是出现“91”问题的本质还是数据库未连接好,首先断点调试检查是否代码有错误,如函数是否定义,字段是否与数据库中的字段名相对应,查询语句是否错误,是否有多空格,或者拼写错误等许多细节问题导致查询连接不到数据库,这就要求我们在编写代码时要认真,细心,逻辑思路清晰。