癥狀
當(dāng)您將 ActiveX 數(shù)據(jù)對(duì)象 (ADO) 與 Active Server Pages (asp) 一起使用時(shí),可能會(huì)遇到以下常見錯(cuò)誤:
Microsoft OLE DB PRovider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft access 97 Driver] Operation must use an updateable query.
原因
本文闡述導(dǎo)致此錯(cuò)誤的四種主要原因及相應(yīng)的替代方法。盡管本文討論的是 Microsoft Access 數(shù)據(jù)庫(kù),但此處提供的信息也適用于其他類型的數(shù)據(jù)庫(kù)。
解決方案
當(dāng)您的腳本試圖執(zhí)行更新或執(zhí)行會(huì)更改數(shù)據(jù)庫(kù)中的信息的其他某種操作時(shí),通常會(huì)遇到此錯(cuò)誤。出現(xiàn)此錯(cuò)誤的原因是 ADO 由于以下某種原因而無(wú)法寫入數(shù)據(jù)庫(kù):
1. 最常見的原因是 Internet 來(lái)賓帳戶(IUSR_MACHINE,默認(rèn)情況下該帳戶屬于“Everyone”組)對(duì)數(shù)據(jù)庫(kù)文件 (.mdb) 沒有寫權(quán)限。要解決此問題,請(qǐng)使用 Explorer 中的“安全”選項(xiàng)卡來(lái)調(diào)整此文件的屬性,以便 Internet 來(lái)賓帳戶具有正確的權(quán)限。
注意:在將 Microsoft Access 數(shù)據(jù)庫(kù)與 ADO 一起使用時(shí),還必須授予 Internet 來(lái)賓帳戶對(duì)包含 .mdb 文件的目錄的寫權(quán)限。這是因?yàn)?Jet 會(huì)創(chuàng)建一個(gè)用于處理數(shù)據(jù)庫(kù)鎖定的 .ldb 文件。由于 Jet 可能會(huì)在“Temp”目錄中創(chuàng)建臨時(shí)文件,因此您可能還需要授予對(duì)該文件夾的讀/寫權(quán)限。
2. 出現(xiàn)此錯(cuò)誤的第二個(gè)原因是數(shù)據(jù)庫(kù)不是使用具有寫權(quán)限的正確模式打開的。如果您對(duì) Connection 對(duì)象執(zhí)行 Open 操作,則應(yīng)使用 Mode 屬性指示對(duì)該連接所擁有的權(quán)限,如下所示:
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
注意:默認(rèn)情況下,MODE 設(shè)置為 0(adModeUnknown),該值通常允許更新。
3. 出現(xiàn)此錯(cuò)誤的另一個(gè)原因是:在 ODBC 管理器中,DSN 的“選項(xiàng)”頁(yè)中的“只讀”設(shè)置可能被選中。
4. 最后一個(gè)問題和替代方法適用于所有 SQL 數(shù)據(jù)源。違反數(shù)據(jù)庫(kù)的引用完整性的 SQL 語(yǔ)句可以導(dǎo)致出現(xiàn)此錯(cuò)誤。下面是一些最常見的失敗的查詢:
• 其中最簡(jiǎn)單的一組查詢是以下您無(wú)法更改的查詢:UniqueValue 屬性設(shè)置為 Yes 的交叉表查詢、SQL 傳遞查詢、聯(lián)合查詢或更新(即生成表)操作查詢。
• 另一種非常常見的原因是聯(lián)接包含的鏈接 ODBC 表的索引不是唯一的。在這種情況下,SQL 無(wú)法保證表中的記錄是唯一,該表中字段的值將隨查詢發(fā)生更改。
• 有一種原因確實(shí)有可靠的替代方法。如果您嘗試更新“一對(duì)多”查詢的“一”方的聯(lián)接字段,操作將會(huì)失敗,除非您啟用級(jí)聯(lián)更新。因?yàn)檫@樣您就可以將引用完整性委托給 JET 引擎。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注