【学生】实时错误3021

 

最近在调试学生的时候,好几次出现了这个错误,尤其是在修改信息的时候,那么我们先来回顾一下EOF和BOF。

使用ADO连接数据库进行查询的时候,数据库将查询结果返回查询端,在查询端的内存里面就会有一个列表,这个列表存放的就是查询的结果。这个内存中的列表就是数据集。在你的程序里面rs就是表示这个数据集。BOF指示当前记录位置位于 Recordset 对象的第一个记录之前,EOF指示当前记录位置位于 Recordset 对象的最后一个记录之后。比如数据集里面有编号为1,2,3,4的4条记录,但是rs指向的编号是-1,这样就会符合了BOF的情况。同理,当rs的指针指向5,而第五条记录并不存在,这样就会产生了EOF的情况。

如果同时产生了BOF和EOF的情况,就是说rs的指针既在上界之外也在下界之外,这样只有一种情况,就是rs所代表的数据集是空的,这样rs的指针无论是指到什么地方都是同时具有BOF和EOF的属性。

数据集是空的,SQL语句查询出来的值是空的,在读取rs数据集里面的值的时候就会报这个错误。

解决方法:
①使用 If  mrc.BOF  And  mrc.EOF Then 这个判断可以判别rs里面是否有数据集,如果符合这个条件,说明数据集是空的,在程序中就要绕开对rs里字段的访问。

Private Sub Form_Load()

    Dim txtSQL As String

    Dim MsgText As String

    txtSQL = "select * from student_Info "   'SQL语句

    Set mrc = ExecuteSQL(txtSQL, MsgText)    '执行查询操作

    

    If mrc.EOF And mrc.BOF Then

        MsgBox "无记录!"

        frmModifyclassinfo.Show

    Else

        mrc.MoveFirst   '移到第一条记录

        Call viewData  '显示数据  

        mcbookmark = mrc.Bookmark '记下当前记录的位置

        mcclean = True '给标志赋初值

    End If

End Sub

之后就会出现如下弹出框,点击确定即可显示本窗体。

 

错误处理的本质就是当遇到错误时,可以跳过该错误,直接进行下一步,以便于程序顺利进行!那么我们根据这个原理在代码中添加错误处理,问题便可迎刃而解!代码如下:

Private Sub Form_Load()
    Dim txtSQL As String
    Dim MsgText As String
    txtSQL = "select * from student_Info "   'SQL语句
    Set mrc = ExecuteSQL(txtSQL, MsgText)    '执行查询操作
    
    On Error GoTo 1:
    
        mrc.MoveFirst   '移到第一条记录
        Call viewData  '显示数据
        
        mcbookmark = mrc.Bookmark '记下当前记录的位置
        mcclean = True '给标志赋初值
1:
        If Err = 3021 Then
            MsgBox "无记录!"
        End If
End Sub

之后弹出“无记录”,同上,点击确定即可。

猜你喜欢

转载自blog.csdn.net/hsm_Jasmine/article/details/81810919
今日推荐