文章編號: 208799 - 上次校閱: 2005年6月23日 - 版次: 3.0

ACC2000: 新的 SQL 資料錄已刪除之前,會顯示資料錄集重新開啟

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
進階: 須具備專家編碼、 互通性,與多使用者技能。

本文只適用於 Microsoft Access 資料庫 (.mdb)。

在此頁中

全部展開 | 全部摺疊

徵狀

就會一筆資料錄加入應用程式,使用 Visual Basic,如果資料表的唯一索引欄位有預設值,而且您沒有指派到該欄位值的 SQL 資料表時,新顯示記錄已刪除直到重新開啟 SQL 資料表。如果嘗試從新的記錄取得值,您會收到下列錯誤訊息:
執行階段錯誤 '3167'

刪除資料錄。

解決方案

若要解決這個行為,當您使用 Visual Basic 程式碼來開啟 SQL 資料表時,包括為下列的範例中的 [dbSeeChanges] 選項:
Set rs = db.OpenRecordset("TestTable", dbOpenDynaset, dbSeeChanges)
				
dbSeeChanges 選項可確保任何新加入包含唯一的索引欄位中的預設值的記錄可用於目前資料錄集。

其他相關資訊

Microsoft 僅,為了說明提供程式設計範例,不提供任何明示或默示的保證。這包括,但不限於適售性或適合某特定用途之默示擔保責任。本文假設您已熟悉使用我們所示範的程式設計語言以及建立和偵錯程序所使用的工具。Microsoft 技術支援工程師可以協助解釋特定程序的功能,但它們不會修改這些範例以提供附加功能或建構程序,以符合您特定需求。

重製行為的步驟

注意: 本文中的範例程式碼會使用 Microsoft 資料存取物件。這個程式碼正常執行,您必須參考 Microsoft DAO 3.6 物件程式庫。以執行這項操作,按一下 引用項目 在 [工具] 功能表中 Visual Basic 編輯器] 中,請確定已選取 Microsoft DAO 3.6 物件程式庫] 核取方塊。

  1. 建立模組,如果它已經不存在,宣告 區段中輸入下面這一行:
    外顯的選項
  2. 鍵入下列程序:
    Function TestSQLData()
    
       Dim db As DAO.Database, rs As DAO.Recordset
       Dim idx, td
       Dim cmd As String
    
       ' Delete TestTable if it exists on the SQL server.
       
       'Insert your database name, user ID, password (if any), and dsn
       'to point to an ODBC data source.
       Set db = OpenDatabase("<MyDatabase>", False, False, _
       "ODBC, Database = <MyDatabase>, UID = <userid>, PWD = <password>, dsn = <MyDSN>")
       cmd = "if exists (select * from sysobjects where" _
          & " id = object_id('dbo.TestTable'))"
       cmd = cmd & " drop table TestTable"
       db.Execute cmd, dbSQLPassThrough
    
       ' Create TestTable with one field on SQL server.
       Set td = db.CreateTableDef("TestTable")
       td.Fields.Append td.CreateField("Int", dbInteger)
       td.Fields.Append td.CreateField("String", dbText, 50)
       db.TableDefs.Append td
    
       Set idx = td.CreateIndex("MyIdx")
       idx.Unique = True
       idx.Fields.Append idx.CreateField("Int")
       td.Indexes.Append idx
    
       cmd = "create Default TestDef3 as 100"
       db.Execute cmd, dbSQLPassThrough
    
       cmd = "sp_bindefault TestDef3, 'TestTable.Int'"
       db.Execute cmd, dbSQLPassThrough
    
       ' Open table, add a record, and then obtain values.
       Set rs = db.OpenRecordset("TestTable")
       rs.AddNew
       rs!String = "Trial"
       rs.Update
    
       Debug.Print "RecordCount = " & rs.RecordCount
       rs.MoveFirst
       Debug.Print "String is " & rs("String")
       Debug.Print "Int is " & rs("Int")
       rs.Close
    
    End Function
    					
  3. 測試這個函式、 即時運算視窗中輸入下列命令,然後按下 ENTER:
    ? TestSQLData()
    請注意執行階段錯誤 3167 發生。

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