閱讀830 返回首頁    go 阿裏雲 go 技術社區[雲棲]


學生管理係統調試——實時錯誤(實時錯誤“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

  上一篇:go OBTAINING SPRING 3 ARTIFACTS WITH MAVEN
  下一篇:go 歐拉函數性質