程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> PRB:ASP 返回“Operation Must Use an Updateable Query”(操作必須使用可更新的查詢)錯誤

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

編輯:ASP技巧

症狀
當您將 ActiveX 數據對象 (ADO) 與 Active Server Pages (ASP) 一起使用時,可能會遇到以下常見錯誤:
Microsoft OLE DB PRovider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access 97 Driver] Operation must use an updateable query.

原因
本文闡述導致此錯誤的四種主要原因及相應的替代方法。盡管本文討論的是 Microsoft Access 數據庫,但此處提供的信息也適用於其他類型的數據庫。

解決方案
當您的腳本試圖執行更新或執行會更改數據庫中的信息的其他某種操作時,通常會遇到此錯誤。出現此錯誤的原因是 ADO 由於以下某種原因而無法寫入數據庫:

1. 最常見的原因是 Internet 來賓帳戶(IUSR_MacHINE,默認情況下該帳戶屬於“Everyone”組)對數據庫文件 (.mdb) 沒有寫權限。要解決此問題,請使用 Explorer 中的“安全”選項卡來調整此文件的屬性,以便 Internet 來賓帳戶具有正確的權限。

注意:在將 Microsoft Access 數據庫與 ADO 一起使用時,還必須授予 Internet 來賓帳戶對包含 .mdb 文件的目錄的寫權限。這是因為 Jet 會創建一個用於處理數據庫鎖定的 .ldb 文件。由於 Jet 可能會在“Temp”目錄中創建臨時文件,因此您可能還需要授予對該文件夾的讀/寫權限。
2. 出現此錯誤的第二個原因是數據庫不是使用具有寫權限的正確模式打開的。如果您對 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 管理器中,DSN 的“選項”頁中的“只讀”設置可能被選中。
4. 最後一個問題和替代方法適用於所有 SQL 數據源。違反數據庫的引用完整性的 SQL 語句可以導致出現此錯誤。下面是一些最常見的失敗的查詢:
• 其中最簡單的一組查詢是以下您無法更改的查詢:UniqueValue 屬性設置為 Yes 的交叉表查詢、SQL 傳遞查詢、聯合查詢或更新(即生成表)操作查詢。

 
• 另一種非常常見的原因是聯接包含的鏈接 ODBC 表的索引不是唯一的。在這種情況下,SQL 無法保證表中的記錄是唯一,該表中字段的值將隨查詢發生更改。

 
• 有一種原因確實有可靠的替代方法。如果您嘗試更新“一對多”查詢的“一”方的聯接字段,操作將會失敗,除非您啟用級聯更新。因為這樣您就可以將引用完整性委托給 JET 引擎。
 
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved