在敲学生的时候,经常出现‘3021’问题,当BOF或EOF中有一个为真时,就会出现’3021‘的错误,出现这个问题的原因主要是查找的数据库当中没有数据,在修改学籍信息的时候,将所有的数据删除就报错,可以添加一个on error goto line 错误捕捉语句,出现3021问题的时候弹出提示框提示没有学籍信息,需要先添加学籍信息,代码如下:
Private Sub cmddelete_Click()
On Error GoTo err
'记录当前记录位置
mybookmark = mrc.Bookmark
'提示是否删除
str2$ = MsgBox("是否删除当前记录?", vbOKCancel, "删除当前记录")
'判断按钮类型
If str2$ = vbOK Then
'移动到数据集下一条记录
mrc.MoveNext
'判断数据集对象是否为空
If mrc.EOF Then
'移动到数据集的第一条记录
mrc.MoveFirst
'记载当前记录的位置
mybookmark = mrc.Bookmark
'移动到最后一条记录
mrc.MoveLast
'删除记录
mrc.Delete
mrc.Bookmark = mybookmark
'调用函数显示数据
Call viewdata
Else
'记载当前位置
mybookmark = mrc.Bookmark
'移动到前一条记录
mrc.MovePrevious
'删除记录
mrc.Delete
'回到原来位置
mrc.Bookmark = mybookmark
'调用函数显示数据
Call viewdata
End If
Else
mrc.Bookmark = mybookmark
Call viewdata
End If
'错误处理
err:
If err = 3021 Then
If mrc.EOF And mrc.BOF Then
MsgBox "当前没有记录!", vbOKOnly + vbExclamation, "警告"
Else
a = MsgBox("这是最后一条记录,是否删除!?", vbOKOnly + vbExclamation, "警告")
If a = vbOK Then
txtSID.Text = ""
txtName.Text = ""
combosex.Text = ""
txtTel.Text = ""
txtAdress.Text = ""
txtcomment.Text = ""
ComboClassNo.Text = ""
MsgBox "当前无记录,系统将退出!", vbOKOnly + vbexcalamation, "警告"
Unload Me
Else
Exit Sub
End If
End If
End If
End Sub
这样在将所有的信息删除之后,就不会再报3021,没有记录的时候会退出系统,刚开始认为这样就可以了,但是后来发现,当我再次点开修改信息这个窗体的时候还是会报3021,所以又在主窗体的菜单栏那块增加了这些代码,再点击修改学籍信息窗体的时候进行判断,如果数据库信息为0(mrc.recordcount=0),就报提示框,然后返回添加学籍信息窗体添加信息,代码如下
Private Sub midifystu_Click()
Dim txtsql As String
Dim mrc As ADODB.Recordset
Dim msgtext As String
txtsql = "select * from student_info "
Set mrc = ExecuteSQL(txtsql, msgtext)
'修改学籍信息的时候没有信息首先判断要添加学籍信息
If mrc.RecordCount = 0 Then
MsgBox "没有学籍信息,请先添加学籍信息!", vbOKOnly + vbExclamation, "警告"
mrc.Close
Set mrc = Nothing
frmaddsinfo.Show
Exit Sub
Else
frmModifyinfo.Show
End If
End Sub