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

本文介绍了解决学生项目中遇到的EOF和BOF问题的方法。通过详细解释并提供示例代码,展示了如何在不同情况下正确处理记录的删除操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值