您目前已離線,請等候您的網際網路重新連線

PRB:ASP 傳回 Operation Must Use an Updateable Query (操作必須使用可更新的查詢) 錯誤

徵狀
當您將 ActiveX Data Objects (ADO) 與 Active Server Page (ASP) 搭配使用時,可能會發生下列常見的錯誤:
Microsoft OLE DB Provider for ODBC Drivers error '80004005' (Microsoft OLE DB Provider for ODBC 驅動程式錯誤 '80004005')
[Microsoft][ODBC Microsoft Access 97 Driver] Operation must use an updateable query. ([Microsoft][ODBC Microsoft Access 97 驅動程式] 操作必須使用可更新的查詢)。
發生的原因
本文將告訴您,造成這個錯誤的四個主要原因,以及因應的解決方案。雖然本文是在說明 Microsoft Access 資料庫,但這裡提供的資訊也適用於其他類型的資料庫。
解決方案
當您的指令碼試圖執行 UPDATE 或會更改資料庫資訊的其他動作時,通常就會出現這個錯誤。之所以發生這個錯誤,是因為 ADO 基於下列原因而無法寫入資料庫所造成的:

  1. 最常見的原因是,預設屬於 Everyone 群組的 Internet Guest 帳戶 (IUSR_MACHINE) 並未具有資料庫檔案 (.mdb) 的寫入權限。如果要修正這個問題,請使用「檔案總管」中的 [安全性] 索引標籤,來調整這個檔案的屬性,如此 Internet Guest 帳戶就會具有正確的使用權限。

    注意:當您將 Microsoft Access 資料庫與 ADO 搭配使用時,就必須授予 Internet Guest 帳戶目錄 (包括 .mdb 檔案) 的寫入權限。之所以如此,是因為 Jet 會建立 .ldb 檔案來處理資料庫鎖定。此外,您可能也需要授予 Temp 資料夾的讀取/寫入權限,因為 Jet 可能會在這個目錄中建立暫存檔案。
  2. 造成這個錯誤的第二個原因是,並未使用正確的 MODE 來開啟資料夾,以進行寫入。如果您在 Connection 物件上執行 Open,就可以使用 Mode 屬性來指出連線的使用權限 (如下所示):
          SQL = "UPDATE Products Set UnitPrice = 2;"      Set Conn = Server.CreateObject("ADODB.Connection")      Conn.Mode = 3      '3 = adModeReadWrite      Conn.Open "myDSN"      Conn.Execute(SQL)      Conn.Close						
    注意:依預設,MODE 是設定為 0 (adModeUnknown),此設定通常允許更新程式。
  3. 造成這個錯誤的另一個原因是,ODBC Manager 中此 DSN 的「選項」頁面,可能已經選取「唯讀」設定。
  4. 最後一個問題及解決方案與任何 SQL 資料來源有關。錯誤可能是由違反資料庫參考完整性的 SQL 陳述式所造成的。 這裡列出幾個會失敗的最常見查詢:
    • 可以處理的最簡單群組就是您無法變更的那些群組:交叉資料表、SQL 傳遞 (Pass-Through)、聯集或更新 (或產生資料表) 動作會查詢 UniqueValue 屬性是否已經設定為「是」。

    • 另一個非常常見的原因,就是在聯結包含不具有唯一索引的連結 ODBC 資料表時,也會發生這個錯誤。 在這種情形下,如果資料表中具有數值會隨著查詢變更的欄位,SQL 無法保證資料表中的記錄是唯一的。

    • 一個原因確實具有健全的解決方案。如果您嘗試更新 "one-to-many" 查詢中 "one" 邊的聯結欄位,將會失敗,除非開啟串聯更新。如此,您可以委派參考完整性至 JET 引擎。
狀況說明
這是原本設計的作法。
內容

文章識別碼:175168 - 最後檢閱時間:11/30/2004 11:14:00 - 修訂: 4.0

Microsoft Active Server Pages 4.0, Microsoft Internet Information Server 4.0, Microsoft Internet Information Services 5.0, Microsoft ActiveX Data Objects 2.0, Microsoft ActiveX Data Objects 2.1, Microsoft ActiveX Data Objects 2.1 Service Pack 2, Microsoft ActiveX Data Objects 2.5, Microsoft ActiveX Data Objects 2.7, Microsoft Data Access Components 2.5, Microsoft Data Access Components 2.6, Microsoft Data Access Components 2.7

  • kberrmsg kbdatabase kbprb KB175168
意見反應