EOF和BOF搞什么鬼?
或许敲学生项目的小伙伴们,在进行的过程中会遇到一个比较棘手的问题,辣么就是标题这个东东,究竟会报什么错呢?我们一起来了解一下-
当初我遇到这个问题的时候,完全懵逼,一看很多东西都不是很理解,不过多亏了连康的万能办法-On Error Resume next(万能办法) ,这个问题被暂时压制了,虽然有些费事,终究是解决了,这不学生项目搞定了,只剩下这个问题了,辣么我就搜集资料研究一下吧,不研究还好,一研究竟然直接解决了,feel 爽!
但是这里我想先提及其中会遇到的知识点,不知道大家还有没有印象呢?具体是做什么的请各位查看一下资料
辣么只要我们把这个思路整理好了后,下面就方便写代码了,之前在网上搜寻的资料逻辑没有问题,不过他思考的还是不够全面的,以下是我做的一些代码整合和标注,大家看看还有没有值得优化的地方呢
这个是关于“
删除记录
”的按钮代码,其中涉及到的“
几种情况
”已经注释到了代码里面了。
Private Sub deleteCommand_Click()
If mrc.EOF And mrc.BOF Then
MsgBox "表中未添加任何数据", vbOKOnly + vbExclamation, "警告"
Frame2.Enabled = False
Frame1.Enabled = False
txtCourseno.Enabled = False
txtCoursename.Enabled = False
comboCoursetype.Enabled = False
txtcoursedes.Enabled = False
Else
myBookmark = mrc.Bookmark '表中必须有数据
str2$ = MsgBox("是否删除当前记录?", vbOKCancel, "删除当前记录")
If str2$ = vbOK Then
mrc.MoveNext '先执行next
If mrc.EOF Then
mrc.MovePrevious
If mrc.BOF Then
'因为一开始就判断表中是否含有数据,此处不需要代码执行
Else
'删除的是最后一条记录(下次从第一个开始)的处理和有且仅有一条记录的情况--两种情况
mrc.MovePrevious
If mrc.BOF Then
mrc.MoveNext
myBookmark = mrc.Bookmark
mrc.Delete
MsgBox "最后一条记录已经删除!", vbOKOnly + vbExclamation, "警告"
For Each ctrl In Me.Controls
If TypeOf ctrl Is TextBox Then
ctrl.Text = ""
End If
Next
For Each ctrl In Me.Controls
If TypeOf ctrl Is ComboBox Then
ctrl.Text = ""
End If
Next
Frame2.Enabled = False
Frame1.Enabled = False
txtCourseno.Enabled = False
txtCoursename.Enabled = False
comboCoursetype.Enabled = False
txtcoursedes.Enabled = False
mrc.Bookmark = myBookmark
Else
myBookmark = mrc.Bookmark
mrc.MoveLast
mrc.Delete
mrc.Bookmark = myBookmark
Call viewData
End If
End If
Else
myBookmark = mrc.Bookmark '删除第一条记录和中间位置记录-两种情况
mrc.MovePrevious
mrc.Delete
mrc.Bookmark = myBookmark
Call viewData
End If
Else
mrc.Bookmark = myBookmark '不删除的处理
Call viewData
End If
End If
End Sub
不知道您的思路是否有些清晰了呢,其实做这个过程最重要的就是需要把其中的各种情况都考虑清楚,只要这样才方便你整理代码,本以为昨天调试成功了呢,结果今天调试,缺少一种情况,然后又死了一片脑细胞,哎!!!
然后根据我自己的意愿,我又优化了窗体加载load的代码:也许会对各位有帮助吧,不妨来瞧瞧,免费的...
Private Sub Form_Load()
Dim txtSQL As String
Dim MsgText As String
Unload FormNow
Set FormNow = Me
'控件不可编辑
txtCourseno.Enabled = False
txtCoursename.Enabled = False
comboCoursetype.Enabled = False
txtcoursedes.Enabled = False
txtSQL = "select * from course_Info " '执行查询操作
Set mrc = ExecuteSQL(txtSQL, MsgText) '得到student表,并显示出来
'select得到的临时表,游标指向尾记录,在Access中指向第一条
If mrc.EOF And mrc.BOF Then
MsgBox "表中未添加任何数据", vbOKOnly + vbExclamation, "警告"
Frame2.Enabled = False
Frame1.Enabled = False
txtCourseno.Enabled = False
txtCoursename.Enabled = False
comboCoursetype.Enabled = False
txtcoursedes.Enabled = False
Else
mrc.MoveFirst
'显示数据
Call viewData
'记下当前记录的位置
mcbookmark = mrc.Bookmark
'做标记
mcclean = True
End If
End Sub
虽然纠错的过程稍微艰辛些,但是想想还是值了,尤其是思考的过程和实现的喜悦感,博客写到这里,学生项目也算是结束了,剩下的就是一些不入流的优化了,我们下一个项目再见。