学生系统优化已经有两天了,一直困扰在全部删除数据的问题上,在解决方法上主要是在逻辑这一块儿乱了,顾东顾不了西,将思路方法总结一下,希望可以帮我找到其中的不足。
常见错误类型如下:
解决思路(用我窗体里的部分代码举例说明):
一、阻止错误运行
这个是书中代码
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
通过加一个错误处理,当错误出现后怎样做来面对错误,需要每个涉及到处理数据库的控件都要进行此种错误处理,代码量比较大,容易造成关系混乱,根据代码从简原则,不建议大家采用。(我代码中疏漏的地方是处理错误的情况发生在文本框为空的情况下,将数据库为空文本框就为空混淆了。大家用的时候注意。)
通过对这个错误的处理,同时我对面向对象与面向过程有了更深的体会,当错误发生后,最终目的是解决错误,不限方法 是面向对象的思想,好处是思路特别活,不会在一棵树上吊死;错误发生后,通过此种方法来解决问题,目的放在了方法上,注重方法是怎样执行的 这种是面向过程思想,好处是可以做到很严谨,但容易把关系变得复杂。 这样理解这两个概念不知道可不可以。