文章編號: 190642 - 上次校閱: 2005年3月2日 - 版次: 2.2

PRB: ADODC 錯誤 reposition EOFAction 時 adDoAddNew 上

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

徵狀

當您將移過去的 EOF 會顯示新的空白記錄,而 「 ADO 資料控制 EOFAction 屬性設定成 2 adDoAddNew。如果您不要輸入新的資料錄的資料,和移動的資料錄,您會收到錯誤訊息:
無法插入一列空列-必須有至少一個資料行值設定。

發生的原因

ADO 會隱含式資料錄集中移動上的更新。當 ADO 資料控制 EOFAction 屬性設定成 2 adDoAddNew 時,ADO 加入新資料錄,而且允許使用者編輯結合控制項中的資料錄。當使用者登出的新建立的資料錄移動時,ADO 會執行資料錄集更新。如果使用者已決定不以新增一筆資料錄,讓繫結的控制項保持空白,並將移完新建] 記錄嘗試的更新會造成 ADO 顯示訊息無法插入一列空列中-必須有至少一個資料行值設定。

ADO 資料控制 EOFAction-adDoAddNew 行為與不同 DAO 資料控制項 EOFAction-加入新的行為和遠端資料控制項 EOFAction-rdAddNew 行為。如果您移動關閉新加入的資料錄的使用資料控制項或遠端資料控制項時,不會收到的訊息。

解決方案

藉由加入錯誤處理程式碼在 ADO 資料控制錯誤事件程序中的,可以解決這個問題。以下是要處理是錯誤號碼 16389 這個特定錯誤的程式碼範例:
    Private Sub Adodc1_Error(ByVal ErrorNumber As Long, _
        Description As String,  ByVal Scode As Long, _
        ByVal Source As String, ByVal HelpFile As String, _
        ByVal HelpContext As Long, fCancelDisplay As Boolean)

        If ErrorNumber = 16389 Then
            If Adodc1.Recordset.State = ADODB.adStateOpen Then
                Adodc1.Recordset.CancelUpdate
                Adodc1.Recordset.MoveLast
                fCancelDisplay = True
            End If
        End If
    End Sub
				

狀況說明

這種行為是經過設計規劃的。

其他相關資訊

重製行為的步驟

這個範例使用隨附於 Visual Basic Biblio.MDB 資料庫。
  1. 在 Visual Basic 中建立新的標準 EXE 專案。預設會建立 Form1。
  2. 從 [專案] 功能表選擇 [元件],] 然後選取 [Microsoft ADO 資料控制。
  3. 繪製文字] 方塊和在 Form1 上的 ADO 資料控制。
  4. 設定 ADO 資料控制項的屬性:

    1. 設定 [ConnectionString 屬性 (在資料來源中的路徑的下面字串以反映您的系統上的 Biblio.MDB 位置的變更):
               Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\Program
                    Files\Microsoft Visual Studio\VB98\Biblio.mdb
         
      								
    2. 將 EOFAction 屬性設定為 2 adDoAddNew。
    3. 將 [記錄來源] 屬性設定為作者。
  5. 設定 [文字] 方塊的屬性。

    1. 將資料來源屬性設定為 ADODC1。
    2. 將 DataField 屬性設定為作者。
  6. 測試應用程式。

    1. 按一下 [執行]。[文字] 方塊應該會顯示第一個作者。
    2. 按一下 [ADODC MoveLast 按鈕。[文字] 方塊將會顯示最後的作者。
    3. 按一下 [ADODC MoveNext 按鈕。因為您設定 [ADODC EOFAction 到 2-adDoAddNew 中,您會看到空白文字方塊,準備好進行資料輸入。
    4. 按一下以取消您 AddNew ADODC 的 MovePrevious 按鈕。 您會看到訊息:
      無法插入一列空列-必須有至少一個資料行值設定。
      按一下訊息方塊的 [確定] 按鈕。
    5. 若要繼續,您必須在 [文字] 方塊中鍵入新的作者名稱,然後在 [移動關閉該記錄,或按一下 [Form1 的 [關閉] 按鈕]。
  7. 加入程式碼解決:

    1. 在設計模式中按兩下 ADO 資料控制項,以開啟其事件程序] 視窗。
    2. 將下列程式碼複製到 ADO 資料控制錯誤事件程序:
               If ErrorNumber = 16389 Then
                  If Adodc1.Recordset.State = ADODB.adStateOpen Then
                      Adodc1.Recordset.CancelUpdate
                      Adodc1.Recordset.MoveLast
                      fCancelDisplay = True
                  End If
               End If
         
      								
  8. 重新測試應用程式。您不再會收到錯誤訊息。

?考

在 Visual Basic 選取說明搜尋...],然後輸入 ADO 資料控制。

表單包含 ADO 資料控制上, 選取控制項],然後按 F1 鍵。

這篇文章中的資訊適用於:
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
關鍵字:?
kbmt kbprb KB190642 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:190642? (http://support.microsoft.com/kb/190642/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。