[置頂] 如何處理:BOF或EOF中有一個是“真”,或者當前的記錄已被刪除,所需的操作要求一個當前的記錄...

weixin_34219944發表於2013-08-07

做學生管理系統是,會一直彈出一個對話方塊就是:

執行時錯誤’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
 
 
 


 

 

 

 

相關文章