机房收费系统——上机【问题篇】之“夺命91”

   通过画流程图和查博客,缕清思路后开始敲代码,运行却发现有很多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”问题的本质还是数据库未连接好,首先断点调试检查是否代码有错误,如函数是否定义,字段是否与数据库中的字段名相对应,查询语句是否错误,是否有多空格,或者拼写错误等许多细节问题导致查询连接不到数据库,这就要求我们在编写代码时要认真,细心,逻辑思路清晰。

猜你喜欢

转载自blog.csdn.net/Ginny97/article/details/86636683
今日推荐