做學生管理系統是,會一直彈出一個對話方塊就是:
執行時錯誤’3021‘; BOF或EOF中有一個是“真”,或者當前的記錄已被刪除,所需的操作要求一個當前的記錄。
它幾乎無所不在,它的意思很簡單就是,它需要資料時,沒有資料可用了。
一般來講,學生管理系統,就有2個地方最容易出現這個問題。
第一個:編碼錯了
If mrc.EOF = False Then
mrc.MoveFirst
mybookmark = mrc.Bookmark
mrc.MoveLast
mrc.Delete
mybookmark = mrc.Bookmark
Call Viewdata End If
這時就會出現這個錯誤,因為倒數第三句,它找不到該書籤,沒有資料讓它用了
那麼就要改為:
If mrc.EOF Then
mrc.MoveFirst
mybookmark = mrc.Bookmark
mrc.MoveLast
mrc.Delete
mrc.Bookmark = mybookmark
Call Viewdata
End If
第二種情況就是:它確實沒有資料了。
這種情況很常見,因為畢竟,當你刪除了最後一條記錄,就沒有資料可用了。
那麼我們就來編碼一下cancelcommand的程式碼,讓它給一個提示,告訴我們最後一條記錄了,刪除後,沒有記錄。
(1)這樣來將分為了2種情況:一種是正好是最後一條記錄(但是記錄不只有一條),第二種情況就是:有卻僅有一條記錄,首先到判斷出來
(2)這樣就用到了2個if語句,第一個先要判斷是不是最後一條記錄;第二個要判斷的是有且僅有一條記錄的,我們要讓所有的按鈕都不能用(這樣就不會出現這樣的錯誤),並提示無記錄。
解決的方法是這樣的:
Private Sub deleteCommand_Click()
mybookmark = mrc.Bookmark
str2$ = MsgBox("確認是否要刪除?", vbOKCancel, "刪除當前資料")
If str2$ = vbOK Then
mrc.MoveNext
If mrc.EOF Then ‘分為2種情況:一種是是最後一條記錄(但不只一條記錄);一種是有且僅有一條記錄
mrc.MovePrevious
mrc.MovePrevious
If mrc.BOF Then ‘有且僅有一條記錄的情況的處理
mrc.MoveNext
mrc.Delete
MsgBox "最後一條記錄已經刪除!", vbOKOnly + vbExclamation, "警告"
txtCourseno.Text = ""
txtCoursename.Text = ""
comboCoursetype.Text = ""
txtCoursedes.Text = ""
Frame2.Enabled = False
firstCommand.Enabled = False
previousCommand.Enabled = False
lastCommand.Enabled = False
nextCommand.Enabled = False
txtCourseno.Enabled = False
txtCoursename.Enabled = False
comboCoursetype.Enabled = False
txtCoursedes.Enabled = False
editCommand.Enabled = False
updateCommand.Enabled = False
cancelCommand.Enabled = False
deleteCommand.Enabled = False
Else
‘有很多條記錄,但正好刪的是第一條記錄的處理
mrc.MoveFirst
mybookmark = mrc.Bookmark
mrc.MoveLast
mrc.Delete
mrc.Bookmark = mybookmark
Call Viewdata
End If
Else ‘有很多條記錄也不是最後一條記錄的處理
'mrc.MoveNext
mybookmark = mrc.Bookmark
mrc.MovePrevious
mrc.Delete
mrc.Bookmark = mybookmark
Call Viewdata
End If
Else ‘不刪除的處理
mrc.Bookmark = mybookmark
Call Viewdata
End If
End Sub