这个错误提示,相信大家都在敲学生管理的时候看到过。
一、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