VB机房收费系统05——一般用户模块逻辑问题总结

来源:互联网 发布:mac如何装office 编辑:程序博客网 时间:2024/06/06 03:25

内容


确认按钮不管用



这个问题在别的窗体里也遇见过,当时只记得删除窗体,新建窗体,删除里面的代码,从新输入代码后问题解决,但具体问题在哪里还是不得而知。今天遇到问题后我依据老法子尝试后仍然没有效果。之后变逐个分析造成此问题的原因。

1.首先我想到的是,我的代码没有写“OK事件里”,尝试双击按钮后,发现就写在正确的事件中
2.接着,我一一核对属性名称,主窗体中链接的代码名称是否正确,依然没有问题
3.我开始排查代码,我查找代码有无写错,代码无错

4.我开始分析是否没连接到数据库中,可是代码真真切切没有毛病呀。
5.找到老曹后,最后分析出来我已经用“if mrc.eof = true then”判断了输入的卡号信息,但是红线的代码也是判断输入的卡号信息,同一条件判断两次的逻辑错误,红线上面的else=“红线内容”。
恍然大悟后明白了理解代码逻辑的重要性


修改窗体报出的各种错误

我们先来看一下我的代码
Private Sub cmdok_Click()        Dim txtsql As String        Dim msgtext As String        Dim mrc1 As ADODB.Recordset                 '判断输入的原密码是否正确        If Trim(txtoldpassword.Text) <> Trim(mrc1.Fields(1)) Then                    MsgBox "原密码错误,请重新输入!", vbonly + vbExclamation, "提示"            txtoldpassword.Text = ""            txtnewpassword1.Text = ""            txtnewpassword2.Text = ""        Else     '判断两次输入的新密码是否一致    If Trim(txtnewpassword1.Text) <> (Trim(txtnewpassword2.Text)) Then        MsgBox "新密码输入不一致!", vbOKOnly + vbExclamation, "提示"        txtoldpassword.Text = ""        txtnewpassword1.Text = ""        txtnewpassword2.Text = ""                txtsql = "select * from User_Info where userID='" & UserName & "'"        Set mrc1 = ExecuteSQL(txtsql, msgtext)                    Else        '与原密码一致,更新数据库            mrc1.Fields(1) = txtnewpassword1.Text            mrc1.update            mrc1.Close            MsgBox "密码修改成功,重新登录后生效!", vbonly + vbExclamation, "提示"            Me.Hide        End If        End If        End Sub


突破思路:首先它报的错误是“实时错误91”。我做的第一件事是认认真真仔仔细细的检查代码是否有问题,不仅自己检查还叫了几个小伙伴帮忙检查。就这样依靠以前遇到问题的惯性思维,2个小时过去了,始终没弄明白这错误是怎么回事。有意思的是,依照惯性方式,我照着师哥的代码从新敲了一遍,也没有解决问题。最后还是佳莹帮了我,她仔细帮我分析了代码的逻辑,让我恍然大悟。


Private Sub cmdok_Click()        Dim txtsql As String        Dim msgtext As String        Dim mrc1 As ADODB.Recordset                 '判断输入的原密码是否正确        If Trim(txtoldpassword.Text) <> Trim(mrc1.Fields(1)) Then                    MsgBox "原密码错误,请重新输入!", vbonly + vbExclamation, "提示"            txtoldpassword.Text = ""            txtnewpassword1.Text = ""            txtnewpassword2.Text = ""        Else     '判断两次输入的新密码是否一致    If Trim(txtnewpassword1.Text) <> (Trim(txtnewpassword2.Text)) Then        MsgBox "新密码输入不一致!", vbOKOnly + vbExclamation, "提示"        txtoldpassword.Text = ""        txtnewpassword1.Text = ""        txtnewpassword2.Text = ""                txtsql = "select * from User_Info where userID='" & UserName & "'"        Set mrc1 = ExecuteSQL(txtsql, msgtext)                    Else        '与原密码一致,更新数据库            mrc1.Fields(1) = txtnewpassword1.Text            mrc1.update            mrc1.Close            MsgBox "密码修改成功,重新登录后生效!", vbonly + vbExclamation, "提示"            Me.Hide        End If        End If        End Sub

我的代码是先调用的数据表再定义的,我声明的代码在调用之后,所以才会显示未定义。

紧接着,又出现了逻辑问题,程序报了另一个错误,“BOF或EOF为真”,我当时是按照自己以前的博客进行挑错但是也没有找出,佳莹一语道破,我这个窗体是单独运行的,在数据表声明中,我们声明了userID=UserName,这个UserName是程序登录的用户名。但是这个修改密码窗体单独运行,无论如何也是无法获取登录名的。果然,从登录窗体进入主窗体然后在进入修改密码栏后,密码修改成功!




结语

代码的逻辑才是调错的关键,学习的时候重在理解逻辑,切勿过于强调记忆