轻松理解—“EOF”和“BOF”

来源:互联网 发布:电脑桌面软件大全 编辑:程序博客网 时间:2024/06/05 23:53

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 IfEnd Sub
    虽然纠错的过程稍微艰辛些,但是想想还是值了,尤其是思考的过程和实现的喜悦感,博客写到这里,学生项目也算是结束了,剩下的就是一些不入流的优化了,我们下一个项目再见。