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

文章翻譯 文章翻譯
文章編號: 175168 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

徵狀

當您將 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 - 上次校閱: 2004年11月30日 - 版次: 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
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com