學生資訊管理系統錯誤總結之3021

2021-08-07 11:23:41 字數 3290 閱讀 7352

在這些天敲寫和除錯學生資訊管理系統的時候,經常會用到eof(end of file)和bof(before of file),稍加不注意查詢我們的資料庫就會出錯,那麼這兩個究竟是個什麼鬼?

bof:指當前記錄位置位於recordset物件的第乙個記錄之前

eof:指當前記錄位置位於recordset物件的最後乙個記錄之後 

這兩個的屬性值均返回布林型:true和false,使用bof

和 eof 屬性可確定 recordset 物件是否包含記錄,或者從乙個記錄移動到另乙個記錄時是否超出 recordset 物件的限制。 下表即是各自的使用說明及查詢結果:

eofbof

true

當前行的位置是在最後一行的後面,無記錄

當前行的位置是在第一行之前,無記錄

false

當前行的位置是在最後一行或其前面,有記錄

當前位置是在第一行或其後,有記錄

說明:

如果當前記錄位於第乙個記錄之前,bof

屬性將返回 true(-1),如果當前記錄為第乙個記錄或位於其後則將返回 false (0)。

如果當前記錄位於

recordset 物件的最後乙個記錄之後 eof 屬性將返回true,而當前記錄為 recordset 物件的最後乙個記錄或位於其前,則將返回 false。 

如果bof 或 eof 屬性為 true,則沒有當前記錄。

如果開啟沒有記錄的

recordset 物件,bof 和 eof 屬性將設定為true,而 recordset 物件的 recordcount 屬性設定為零。開啟至少包含一條記錄的 recordset 物件時,第一條記錄為當前記錄,而bof 和 eof 屬性為 false。

如果刪除

recordset 物件中保留的最後記錄,bof 和 eof屬性將保持 false,直到重新安排當前記錄。

而在我們的學生資訊管理系統中,會涉及到對指標進行的movefirst、movelast、moveprevious與movenext四種方法。一般來說,當需要對記錄集recordset中的所有行進行操作時,**可以使用movenext,迴圈遍歷各行,直到eof屬性被置為true

如果當 eof 被置為 true 時再使用 movenext ,或當 bof被置為 true 時再使用 moveprevious ,都將產生乙個提示代號為『3021』的錯誤。

需要注意的是:允許乙個move 方法並非意味著,該方法能成功地定位某行。它僅表示執行這個指定的 move 方法是允許的,並且不產生乙個錯誤。 bof 和 eof屬性的狀態可以隨著該移動的結果而改變。 

if mrc.bof then

表示:當前指標的位置是在第一行記錄之前,則...

if mrc.eof then

表示:當前指標的位置是在最後一行記錄之後,則...

if not mrc.eof then

表示:當前指標的位置沒有到達最後一條記錄

if not mrc.bof then

表示:當前指標的位置沒有到達第一條記錄

推薦使用下面兩條

if not (mrc.bof and mrc.eof) then

表示:指標位於recordset 的當中(並非是最後一條和第一條) ,說明一定有記錄。

if mrc.bof and mrc.eof then

表示:沒有任何記錄

說完了eof和bof之後就要說說我們的3021錯誤了。錯誤定位在更改學籍資訊中。

private sub cmdprevious_click()

'資料集向前移動

mrc.moveprevious

'判斷是否到起始位置

if mrc.bof then

mrc.movelast

end if

call viewdata

end sub

自己錯把bof達成了eof。這一點就是自己的粗心的問題了。

第二個錯誤就是關於記錄查詢問題了,在查詢資訊頁面如果沒有向資料庫中新增記錄的情況下,會出現錯誤3021,因為搜尋不到記錄集,而指標依然要求移到第一條記錄這時就會出現查詢錯誤。

錯誤處理方法:一、進行錯誤處理

private sub form_load()

dim txtsql as string

dim msgtext as string

txtsql = "select * from student_info "

set mrc = executesql(txtsql, msgtext) '得到臨時表

on error goto 1:

mrc.movefirst

call viewdata

mybookmark = mrc.bookmark '對當前記錄進行標記

mcclean = true '可編輯狀態

1:if err = 3021 then

msgbox "無記錄!"

end if

end sub

錯誤處理方法二:用if條件將錯誤顯示出來

private sub form_load()

dim txtsql as string

dim msgtext as string

txtsql = "select * from student_info "

set mrc = executesql(txtsql, msgtext) '得到臨時表

』考慮無記錄情況

if mrc.eof and mrc.bof then 』一條if語句充當錯誤處理,當無記錄時,mrc.eof=true

』和mrc.bof=true兩個條件同時滿足!

msgbox "無記錄!請先新增記錄。"

frmaddsinfo.show 』直接進行下一步,顯示窗體

else

mrc.movefirst

call viewdata

mybookmark = mrc.bookmark '對當前記錄進行標記

mcclean = true '可編輯狀態

end if

總結:3021錯誤是乙個很常見的問題,這個問題會讓我們不斷加深我們對於eof和bof的理解,每次的錯誤都會讓我們成長的更快。

學生資訊管理系統錯誤總結

解決方法 這個知道是進入死迴圈了,但是不知道在 是死迴圈,因為對除錯不是很了解,所以不會解決,自從學會了除錯,這個就簡單多了,這個除錯比較簡單,直接f8往下走就知道 出現問題了。二 實時錯誤 91,物件變數或 with 塊變數未設定 解決方法 這裡控制項的名稱可能與 中的名稱不匹配。我當時是複製出來...

學生資訊管理系統總結

經過這一階段的學習,我結束了學生資訊管理系統,在這個學習階段不僅使我對於vb有了更深一步的認識,而且對於sql語句也有了較深的了解。下面是我的記錄 1.str2 msgbox 是否刪除當前記錄?vbokcancel,刪除當前記錄 中 代表的意思?用來將變數定義成字串,如 dim str2 2.frm...

學生資訊管理系統總結

前言 學生資訊管理系統歷時乙個多月,經過乙個多月的努力,敲完了所有 改完了所有bug,優化了某些方面。是程式設計的靈魂。在我們開始學生的時候往往會有點迷惑,會不知道從 開始學習學生,不知道是先敲 呢?還是先安裝資料庫呢?在改bug的時候,是乙個乙個窗體的改呢還是敲完一起改呢?現在我提出一些自己的建議...