學生管理係統調試——實時錯誤(實時錯誤“3021)
最近敲了一個小的練習項目——學生信息管理係統,在調試的過程了出現了一些問題。通過這些過問題又讓我學習到了不少新的知識,今天我首先要記錄的是”實時錯誤 ‘3021’“相信大多數人在初次使用VB鏈接數據庫的過程中都會遇到這樣的問題。怎麼解決實時錯誤”3021“呢?那還是先讓我們了解一下什麼是EOF和BOF吧。
使用ADO數據庫進行查詢的時候,將數據庫查詢結果返回查詢端的時候,在查詢端的內存中就會有一個列表,這個列表存放的就是查詢的結果集。我們假設mrc是數據集,1、2、3、4為該數據集中的四個數據如下圖:
如圖我們能很清楚的看到當mrc指向編號-1,這樣就符合了BOF的情況;指向5(並不存在這條記錄)的時候,這就是EOF的情況。如果同時出現BOF和EOF的情況,就是說指針既在上界之外也在下界之外,這就表示該數據集為空。
出現這種錯誤的原因:1、我們查找的數據庫記錄為空;
2、查找到數據後,用Del命令刪除記錄後,再引用Fields後出現錯誤;
3、已經用MoveFirst或用MovePrevious命令移動數據庫開始後再用MovePrevious命令;
4、已經用MoveLast或用MoveNext命令移動至數據庫最後位置後再用MoveNext命令。
解決問題的方法:
如果我們在查詢的表中沒有數據的話我們可以加上一個錯誤處理:
On Error resume next
mrc.MoveFirst
If Err=3021 then
Response.Write"無數據!"
End If
當我們刪除最後一條記錄的時候,引用Fields的過程中也會出現這樣的問題,大家可以參考一下以下代碼:
Private Sub cmdDelete_Click()
Dim intMsgbox As Integer
m_vntBookmark = m_rstCourseInfo.Bookmark
intMsgbox = MsgBox("是否刪除當前記錄?", vbOKCancel, "刪除當前記錄")
If intMsgbox = vbOK Then
m_rstCourseInfo.MoveNext
If m_rstCourseInfo.EOF = True Then
m_rstCourseInfo.MovePrevious
m_rstCourseInfo.MovePrevious
If m_rstCourseInfo.BOF = True Then
m_rstCourseInfo.MoveNext
m_rstCourseInfo.Delete
MsgBox "最後一條記錄刪除,記錄為空!", vbOKOnly + vbExclamation, "警告"
Unload Me
Else
m_rstCourseInfo.MoveFirst
m_vntBookmark = m_rstCourseInfo.Bookmark
m_rstCourseInfo.MoveLast
m_rstCourseInfo.Delete
m_rstCourseInfo.Bookmark = m_vntBookmark
Call viewData
End If
Else
m_vntBookmark = m_rstCourseInfo.Bookmark
m_rstCourseInfo.MovePrevious
m_rstCourseInfo.Delete
m_rstCourseInfo.Bookmark = m_vntBookmark
Call viewData
End If
Else
m_rstCourseInfo.Bookmark = m_vntBookmark
Call viewData
End If
End Sub
進一步的整理會在接下來的博客中陸續發布,希望大家能關注!
最後更新:2017-04-03 16:48:50