这个错误提示,相信大家都在敲学生管理的时候看到过。
一、EOF和BOF的理解
一直理解的BOF是记录集第一行,EOF是最后一行,这是大错特错的。
在进行查询的时候,数据库将查询结果返回查询端。BOF表示当前的指针是在记录集的前面,EOF表示当前指针式在记录集的最后。
如果同时产生了BOF和EOF的情况,就是说当前的指针既在上界之外也在下界之外,这样只有一种情况,就是记录集是空的,这样当前指针无论是指到什么地方都是同时具有BOF和EOF的属性。
二、用法
If mrc.BOf Then :当前指针的位置是在第一行记录之前
If mrc.EOF Then :当前指针的位置是在最后一行记录之后
If Not mrc.EOF Then :当前指针的位置没有到达最后一条记录
If Not mrc.BOF Then :当前指针的位置没有到达第一条记录
If mrc.BOF AND mrc.EOF Then :没有任何记录
If Not (mrc.BOF AND mrc.EOF) Then :指针位于记录集的当中,说明一定有记录
三、代码完善
代码漏洞很多,关于上面的问题有:查询窗体、修改窗体、删除。
以成绩管理为例
查询窗体:
Private Sub inquireresultMenu_Click()
Dim txtSQL As String
Dim MsgText As String
Dim mrc As ADODB.Recordset
txtSQL = "select * from result_Info "
Set mrc = ExecuteSQL(txtSQL, MsgText)
If mrc.EOF And mrc.BOF Then
MsgBox "什么都没有查什么查先添加成绩信息吧亲", vbOKOnly + vbExclamation, "警告"
frmAddresult.Show
Exit Sub
Else
frmInquiresinfo.Show
End If
End Sub
修改窗体:
Private Sub modifyresultMenu_Click()
Dim txtSQL As String
Dim MsgText As String
Dim mrc As ADODB.Recordset
txtSQL = "select * from result_Info "
Set mrc = ExecuteSQL(txtSQL, MsgText)
If mrc.EOF And mrc.BOF Then
MsgBox "什么都没有改什么改,先添加成绩信息吧亲", vbOKOnly + vbExclamation, "警告"
frmAddresult.Show
Exit Sub
Else
frmModifyresult.Show
End If
End Sub
删除按钮:
Private Sub deleteCommand_Click()
myBookmark = mrc.Bookmark
Dim txtSQL As String
Dim MsgText As String
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
txtSQL = "select * from result_Info "
Set mrc = ExecuteSQL(txtSQL, MsgText)
If mrc.EOF And mrc.BOF Then
MsgBox "最后一条记录真的要删除吗", vbOKOnly + vbExclamation, "警告"
mrc.Close
Frame1.Enabled = False
Frame2.Enabled = False
comboExamtype.Text = ""
comboSID.Text = ""
comboCourse.Text = ""
comboClassNo.Text = ""
txtName.Text = ""
txtResult.Text = ""
Else
Call viewData
End If
Else
myBookmark = mrc.Bookmark
mrc.MovePrevious
mrc.Delete
mrc.Bookmark = myBookmark
Call viewData
End If
Else
myBookmark = mrc.Bookmark
Call viewData
End If
Unload Me
End Sub