学生信息系统优化——全部删除记录报错3021优化1.1

       上次谈到3021的问题,在查询信息窗口主要是全部删除记录造成的,上次给出的方法在操作中遇到问题了,上次的代码(删除控件):

On Error GoTo p_err
    mybookmark = mrc.Bookmark
    str2$ = MsgBox("是否删除当前记录?", vbOKCancel + vbExclamation, "注意")
    If str2$ = vbOK Then
        mrc.MoveNext
        If mrc.EOF Then
            mrc.MoveFirst
            mybookmark = mrc.Bookmark
            mrc.MoveLast
            mrc.Delete
            mrc.Bookmark = mybookmark
            Call viewdata
        Else
            mybookmark = mrc.Bookmark
            mrc.MovePrevious
            mrc.Delete
            mrc.Bookmark = mybookmark
            Call viewdata
        End If
    Else
        mrc.Bookmark = mybookmark
        Call viewdata
    End If

    '处理错误
p_exit:
    Exit Sub
p_err:
If Len(txtclassno.Text) = 0 And Len(Combograde.Text) = 0 And Len(txtdirector.Text) = 0 And Len(txtclassroom.Text) = 0 Then
    MsgBox "没有记录可以删除,是否要添加记录", vbOKCancel + vbExclamation, "提示"
    If vbOK Then
    frmaddclassinfo.Show
    End If
Else
txtclassno.Text = ""
Combograde.Text = ""
txtdirector.Text = ""
txtclassroom.Text = ""
End If
End Sub

代码主要想通过将数据库清空后空的记录转移到文本框,即通过文本框清空来等价于清空数据库,以此判断,此时出现错误就对错误进行处理,继续删除,但操作中最后一条记录删不掉,修改判断依据为直接看数据库是否清空后还是不能删除最后一条记录。换方法改思路都不能实现,两天的努力后找到了问题的所在。代码如下(只展示处理错误部分了):

dateerr:
If err = 3021 Then
    If mrc.BOF And mrc.EOF Then
        MsgBox "当前无记录!", vbOKOnly + vbExclamation, "提示"
        'unload me
    Else	
        a = MsgBox("这是最后一条记录,是否删除!?", vbOKCancel + vbExclamation, "提示")
            If a = vbOK Then
                txtcourseno.Text = ""
                txtcoursename.Text = ""
                Combocoursetype.Text = ""
                txtcoursedes.Text = ""
                MsgBox "当前无记录,系统将退出", vbOKOnly + vbExclamation, "提示"
                Unload Me
            Else
                Exit Sub
            End If
    End If
End If

改了一下错误的命名,这两段代码差别不太大啊,也就两三行不一样,但就差在这两三行了。通过一步步的调试我发现第一段代码 错误 出现在到程序刚开始删除最后一条记录前,此时显示查询不到记录,就直接进行后面的错误处理了,没有在走下面删除数据库中记录的代码,想要删但会出错,相当于将最后一条记录保护起来了;而后一段代码定义的错误是当3021出现后再进行错误处理,此时不仅执行了查询记录而且也执行了删除记录,已经删了,已经报3021了,再处理错误,此时错误已经被删除了。所以这样就又省去了很多判断来回避删最后一条记录的问题甚至是因游标的使用不太清除而带来的更多问题。

        PS实际中最好不要用错误处理的方法来解决程序的出错,很可能因为同一个错误在不同的地方出错而导致处理混乱,达不到我们想要的效果,所以能直接解决的错误尽量直接解决。

        我的理解目前就到这了,有更好的解释欢到迎评论区留言哦!

猜你喜欢

转载自blog.csdn.net/qq_41026669/article/details/81735743
今日推荐