学生信息系统优化——全部删除数据的处理1.0

       学生系统优化已经有两天了,一直困扰在全部删除数据的问题上,在解决方法上主要是在逻辑这一块儿乱了,顾东顾不了西,将思路方法总结一下,希望可以帮我找到其中的不足。

常见错误类型如下:

解决思路(用我窗体里的部分代码举例说明):

       一、阻止错误运行

      

这个是书中代码

Private Sub Form_Load()
    Dim txtsql As String
    Dim msgtext As String

    mrc.MoveFirst
    Call viewdata
    mybookmark = mrc.Bookmark
    mcclean = True  
end sub

 优化后 

Private Sub Form_Load()
    Dim txtsql As String
    Dim msgtext As String 
 
    If mrc.EOF = False Then
        mrc.MoveFirst
        Call viewdata
        mybookmark = mrc.Bookmark
        mcclean = True
    Else
        str1 = MsgBox("提示内容", vbOKCancel + vbExclamation, "标题")
        If str1 = vbOK Then
            frmaddclassinfo.Show
            'frmmodifyclassinfo.Hide    
        Else
        End If
    End If
end sub

       这个方法是在form load 事件中加了一个判断:如果指针(mrc.eof=true)可以指向最后一个记录的下一条记录(即无记录情况)。在全部删除数据后,通过判断跳过load事件的使错误运行来回避错误代码较简单。控件处理同此。

       二、错误运行后处理错误

优化前代码同方法一

优化后

Private Sub cmddelete_Click()
On Error GoTo p_err

    Dim msgtext As String
    mybookmark = mrc.Bookmark
    str2$ = MsgBox("   ", vbOKCancel, "   ")
    If str2$ = vbOK Then
        mrc.MoveNext
        If mrc.EOF Then
            mrc.MoveFirst
            mybook = mrc.Bookmark
            mrc.MoveLast
            mrc.Delete
            mrc.Bookmark = mybookmark
            mrc.Close
            txtsql = "select*from result_Info"
            Set mrc = ExecuteSQL(txtsql, msgtext)
            mrc.MoveLast
            Call viewdata
        Else
            mybookmark = mrc.Bookmark
            mrc.MovePrevious
            mrc.Delete
            mrc.Bookmark = mybookmark
            mrc.Close
            txtsql = "select*from result_Info"
            Set mrc = ExecuteSQL(txtsql, msgtext)
            mrc.MoveLast
            Call viewdata
        End If
    Else
        mrc.Bookmark = mybookmark
        Call viewdata
    End If

p_exit:
Exit Sub
p_err:
If Len(Comboexamtype.Text) = 0 And Len(Comboclassno.Text) = 0 And Len(combosid.Text) = 0 And Len(txtname.Text) = 0 And Len(Combocourse.Text) And Len(txtresult.Text) Then
    str1 = MsgBox(" ", vbOKCancel + vbExclamation, "   ")
        If str1 = vbOK Then
        frmaddresult.Show
        Else   
        End If
Else
Comboexamtype.Text = ""
Comboclassno.Text = ""
combosid.Text = ""
txtname.Text = ""
Combocourse.Text = ""
txtname.Text = ""
txtresult.Text = ""
End If
    
End Sub

       通过加一个错误处理,当错误出现后怎样做来面对错误,需要每个涉及到处理数据库的控件都要进行此种错误处理,代码量比较大,容易造成关系混乱,根据代码从简原则,不建议大家采用。(我代码中疏漏的地方是处理错误的情况发生在文本框为空的情况下,将数据库为空文本框就为空混淆了。大家用的时候注意。)

       通过对这个错误的处理,同时我对面向对象与面向过程有了更深的体会,当错误发生后,最终目的是解决错误,不限方法   是面向对象的思想,好处是思路特别活,不会在一棵树上吊死;错误发生后,通过此种方法来解决问题,目的放在了方法上,注重方法是怎样执行的   这种是面向过程思想,好处是可以做到很严谨,但容易把关系变得复杂。         这样理解这两个概念不知道可不可以。

   

猜你喜欢

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