癥狀
當您將 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 引擎。 |
|