top
Loading...
討論錯誤——操作必須是可更新的查詢
這里是微軟官方站點對此的解釋,通常來說,這個是一個權限問題。

http://support.microsoft.com/support/kb/articles/Q175/1/68.ASP

特征:
下面是使用ADO和ASP遇到這個情況的一種錯誤代碼。

Microsoft OLE DB Provider for ODBC Drivers error ' 80004005'
[Microsoft][ODBC Microsoft Access 97 Driver] 操作必須是一個可更新的查詢

原因:
本篇文章描述了三個該錯誤發生的主要原因以及錯誤產生區域。盡管這兒引用的是ACCESS數據庫,但是對其他類型的數據庫也同樣適用。

解決辦法

這個錯誤通常是在你對數據庫內容做更新或者在試圖改變數據庫內容的時候產生的,這個錯誤的發生是因為您的ADO操作由于以下的某個原因而導致寫入失敗:

1、最普遍的原因是您的INTERNET來賓帳號(Iuser_machine)沒有寫入數據庫(ACCESS)的權限,您可以在瀏覽器安全設置里給該帳號設置正確的權限。注意:當使用ACCESS和ADO的時候,也必須給該帳號以寫目錄的權限,也就是存放該MDB文件的地方,這個是因為數據庫引擎會建立一個.LDB文件來出路數據庫的鎖定操作。你同時也應該給INTERNET臨時文件夾設置讀寫權限,因為數據庫引擎有可能會在該目錄里面建立相關臨時文件。

2、第二個原因是數據庫的打開方式不對,比如打開方式是不可寫的,也會導致該錯誤,當您使用CONNECTION對象的時候,您可以使用如下代碼:
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
注意,默認的模式是0,一般說來,該模式是允許更新操作的

3、另外一個原因是你有可能在ODBC管理器里把相應的DNS設置里讓READ ONLY選項給選中了

4、最后一個原因(FOR SQL),您的操作可能違反了數據庫參照完整性,下面是一些普遍的導致該錯誤的操作:
比如您在試圖改變一些不能改變的部件:比如交叉表、SQL PASS-THROUGH,連接,或者UPDATE操作一些已經設置為唯一的選項,比如一個自動編號的ID等等。
還有一個普遍的原因是你的JOIN操作包含了沒有唯一索引的關聯表,在這種情況下,SQL無法保證您要試圖更新的表里的數據是唯一的。

任何一種原因都可能發生在很多情況下面,當您試圖去更新一和一對多的聯合,也會發生這個錯誤,除非允許層疊更新,請注意實施數據參照完整性

希望能對你有所幫助。

北斗有巢氏 有巢氏北斗