DW做ASP程序時(shí)關(guān)于數(shù)據(jù)庫的幾個(gè)常見問題

2010-08-28 10:49:09來源:西部e網(wǎng)作者:

     網(wǎng)頁三劍客以其簡(jiǎn)單易學(xué)迅速被廣大愛好者所青睞,尤其是DW已成為初學(xué)者制作網(wǎng)站的首選工具。但我們?cè)谟肈W制作ASP+access程序時(shí),經(jīng)常會(huì)出現(xiàn)這樣或那樣的錯(cuò)誤,尤其是數(shù)據(jù)庫方面顯得特別突出。本文就此方面出現(xiàn)的一些常見的問題談?wù)勂湓蚣敖鉀Q辦法。

  一、上傳網(wǎng)頁時(shí)出現(xiàn)如下錯(cuò)誤:Microsoft OLE DB Provider for ODBC Drivers (0x80004005)

  [Microsoft][ODBC 驅(qū)動(dòng)程序管理器] 未發(fā)現(xiàn)數(shù)據(jù)源名稱并且未指定默認(rèn)驅(qū)動(dòng)程序

  此類錯(cuò)誤出現(xiàn)的情況大多是在用DW建立站點(diǎn)時(shí)運(yùn)行到下面的步驟時(shí)我們選擇了第一項(xiàng)或第二項(xiàng),如圖一:

  
圖一

  1、當(dāng)選擇了第一項(xiàng)時(shí),我們開發(fā)的ASP程序是在本地編輯和測(cè)試。在應(yīng)用數(shù)據(jù)庫時(shí)建立數(shù)據(jù)庫連接大多采用的是DSN或自定義連接字符串

  用DSN時(shí)如圖二所示:

  點(diǎn)擊放大此圖片
圖二

  DSN是用ODBC數(shù)據(jù)源管理器建立。我們知道DSN有用戶DSN、系統(tǒng)DSN、文件DSN三種,其中用戶DSN與系統(tǒng)DSN只能用于當(dāng)前機(jī)器,不能為別的機(jī)器所用。而在用DW建立ASP程序時(shí)在上圖的第二項(xiàng)只能顯示系統(tǒng)DSN,因此當(dāng)我們將ASP程序上傳或到別的機(jī)器運(yùn)行時(shí)便會(huì)出現(xiàn)上述問題。

  用自定義連接字符串時(shí)如圖三所示:

  點(diǎn)擊放大此圖片
圖三

  連接字符串包含 Web 應(yīng)用程序連接到數(shù)據(jù)庫所需的全部信息。

  Driver 指定在沒有為數(shù)據(jù)庫指定 OLE DB 提供程序時(shí)所使用的 ODBC 驅(qū)動(dòng)程序。

  DBQ 是指向基于文件的數(shù)據(jù)庫(如在 Microsoft Access 中創(chuàng)建的數(shù)據(jù)庫)的路徑。該路徑是在測(cè)試數(shù)據(jù)庫文件的服務(wù)器上的路徑。

  下面是一個(gè)連接字符串示例,它將創(chuàng)建與名為book.mdb 的 Access 數(shù)據(jù)庫的 ODBC 連接:Driver={Microsoft Access Driver (*.mdb)};DBQ=d:\book\trees.mdb。Dreamweaver 在服務(wù)器端腳本中插入該字符串,以便應(yīng)用程序服務(wù)器隨后進(jìn)行處理。當(dāng)我們將ASP程序上傳或到別的機(jī)器運(yùn)行時(shí)如果測(cè)試的路徑與連接字符串的數(shù)據(jù)庫路徑不一致時(shí),便會(huì)發(fā)生上述問題。

  2 當(dāng)選擇了第二項(xiàng)時(shí),我們開發(fā)的ASP程序是在本地編輯,然后上傳到遠(yuǎn)程服務(wù)器測(cè)試。建立數(shù)據(jù)庫連接也采用的是DSN或自定義連接字符串,不同的是都采用的測(cè)試服務(wù)器上的DSN或連接字符串。當(dāng)采用測(cè)試服務(wù)器上的DSN時(shí)同樣也只能用系統(tǒng)DSN于是當(dāng)?shù)絼e和機(jī)器運(yùn)行ASP程序時(shí),也就產(chǎn)生了同樣的問題。當(dāng)采用自定義字符串時(shí)如果測(cè)試的路徑與連接字符串的數(shù)據(jù)庫路徑不一致時(shí),也會(huì)發(fā)生同樣的問題。

  從以上分析可知,要使自己用DW開發(fā)的ASP程序具有可移植性最好采用自定義字符串(也可采用文件DSN但對(duì)于初學(xué)者用自定義字符串容易些)。其具體情況如下:

  對(duì)于建立站點(diǎn)時(shí)選擇在本地編輯與測(cè)試,可采用此自定義連接字符串: Driver={Microsoft Access Driver (*.mdb)};DBQ=d:\book\trees.mdb(d:\book表示數(shù)據(jù)庫文件的實(shí)際路徑);D而對(duì)于在本地編輯然后上傳到遠(yuǎn)程服務(wù)器測(cè)試,若要將非 DSN 連接字符串寫入位于遠(yuǎn)程服務(wù)器,必須知道該文件的實(shí)際路徑.如果不知道文件在遠(yuǎn)程服務(wù)器上的實(shí)際路徑,則可以通過在連接字符串中使用 MapPath 方法來獲取該路徑。其自定義連接字符串為: 如果使用 VBScript 作為腳本撰寫語言,連接字符串可表示如下:Driver={Microsoft Access Driver (*.mdb)};DBQ=” & Server.MapPath("/book/book.mdb");如果使用 JavaScript,表達(dá)式將基本相同,只是要使用加號(hào) (+) 而不是 & 號(hào)來串聯(lián)兩個(gè) 字符串,連接字符串可表示如下:Driver={Microsoft Access Driver (*.mdb)};DBQ=” +Server.MapPath("/book/book.mdb")這樣我們便可以順利地移植ASP程序了(注意一定要將數(shù)據(jù)庫文件上載到遠(yuǎn)程服務(wù)器。記下它的虛擬路徑,例如”/book/book.mdb”,否則將會(huì)出錯(cuò))。 其時(shí)很多時(shí)候當(dāng)我們發(fā)現(xiàn)類似的錯(cuò)誤提示都應(yīng)該考慮到是否因?yàn)閿?shù)據(jù)庫連接產(chǎn)生了問題,如果是便可使用上述方法解決.

  二、ADODB.Field (0x800A0BCD)BOF 或 EOF 中有一個(gè)是“真”,或者當(dāng)前的記錄已被刪除,所需的操作要求一個(gè)當(dāng)前的記錄。

  這種錯(cuò)誤常產(chǎn)生于網(wǎng)頁之間傳遞數(shù)據(jù).我們知道ASP應(yīng)用程序時(shí)一般至少擁有二個(gè)或二個(gè)以上的Web頁面,這時(shí)就得考慮在多個(gè)Web頁面間傳遞數(shù)據(jù)的處理工作。網(wǎng)頁間數(shù)據(jù)傳遞的常用方法有:URL方式、FORM方式、COOKIE、APPLICATION、SESSION。其中URL方式和form方式實(shí)現(xiàn)方法簡(jiǎn)單,可實(shí)現(xiàn)網(wǎng)頁間的簡(jiǎn)單數(shù)據(jù)傳遞(也是我們初學(xué)者能快速掌握的)而且必須是連續(xù)訪問兩頁面間數(shù)據(jù)傳遞。如在制作網(wǎng)站搜索引擎時(shí),便要用到FORM方式傳遞參數(shù)。又如我們每每看一些網(wǎng)站在用戶注冊(cè)后,便可在下一個(gè)頁面看出到用戶的詳細(xì)信息。但我們用DW制作類似的頁面時(shí)則總出現(xiàn)這樣的錯(cuò)誤。這樣的錯(cuò)誤一般屬于記錄集(recordset)的問題.這類問題發(fā)生的原因,一般是執(zhí)行了查詢條件,但送回的結(jié)果卻是空的,即沒有符合查詢條件的記錄或是執(zhí)行了循環(huán),執(zhí)行到第一個(gè)或是最后一個(gè)記錄集的時(shí)候,沒有及時(shí)終止循環(huán),所以產(chǎn)生了錯(cuò)誤。解決此問題就要用到網(wǎng)頁間的數(shù)據(jù)傳遞,可用FORM參數(shù)、URL參數(shù)或階段變量(如SESSION)來決定查詢條件。

  三、在DW中,因打開數(shù)據(jù)庫造成的常見錯(cuò)誤

  1 在運(yùn)行程序時(shí),因打開數(shù)據(jù)庫造成的錯(cuò)誤

  Microsoft OLE DB Provider for ODBC Drivers 錯(cuò)誤 '80004005'

  [Microsoft][ODBC Microsoft Access Driver]常見錯(cuò)誤 不能打開注冊(cè)表關(guān)鍵字 'Temporary (volatile) Jet DSN for process 0xaa0 Thread 0x628 DBC 0x2e80064 Jet'。

  2 在上傳文件時(shí),因打開數(shù)據(jù)庫造成的錯(cuò)誤,如圖四所示:

  
圖四

  四、不能更新。數(shù)據(jù)庫或?qū)ο鬄橹蛔x/操作必須使用一個(gè)可更新的查詢 (80004005)

  Microsoft OLE DB Provider for ODBC Drivers 錯(cuò)誤 '80004005'

  [Microsoft][ODBC Microsoft Access Driver] 操作必須使用一個(gè)可更新的查詢。

  Microsoft OLE DB Provider for ODBC Drivers 錯(cuò)誤 '80004005' [Microsoft][ODBC Microsoft Access Driver] 不能更新。數(shù)據(jù)庫或?qū)ο鬄橹蛔x。

  1、最普遍的原因是匿名用戶帳號(hào)(IUSR_MACHINE)對(duì)該數(shù)據(jù)庫文件沒有寫權(quán)限。要解決這個(gè)問題,在管理器中調(diào)整數(shù)據(jù)庫文件的屬性,讓匿名用戶有正確的權(quán)限。當(dāng)使用ACCESS數(shù)據(jù)庫時(shí),不僅要給文件寫的權(quán)限,還要給該目錄寫的權(quán)限.在IIS里面,有一個(gè)設(shè)置,就是Web匿名訪問用戶,也就是大家熟悉的 IUSR_。給你的Access數(shù)據(jù)庫文件增加 IUSR_ 的改寫權(quán)限。

  1) 這就是我們要用程序去操作的Access數(shù)據(jù)庫文件

  2) 右鍵 --> 屬性:此文件的“安全”屬性

  3) 增加用戶 IUSR_

  4) 設(shè)置 IUSR_ 對(duì)Access數(shù)據(jù)庫文件的訪問權(quán)限

  這是設(shè)置好了的權(quán)限注意只給了 IUSR_ 的讀、寫權(quán)限哦。不要給 Everyone 權(quán)限,而且還要給執(zhí)行(Execute) 權(quán)限,這樣容易被人家上傳了ASP木馬,然后執(zhí)行,你的系統(tǒng)最高級(jí)的權(quán)限就被入侵者獲取了。

  2、原因是數(shù)據(jù)庫沒有使用正確的模式打開。應(yīng)該使用下面的方法打開。

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、還有可能是在ODBC管理器中將該DSN的只讀選項(xiàng)選中。

  4、你是在同時(shí)更新兩個(gè)表中的字段,也會(huì)出現(xiàn)這個(gè)錯(cuò)誤信息,解決辦法是分開來更新這兩個(gè)表中各自字段。

  5、當(dāng)你使用了一個(gè)從低版本中(如ACCESS2.0,ACCESS7.0)載入到高版本(ACCESS 2000)中的查詢時(shí),在執(zhí)行這個(gè)查詢是會(huì)出現(xiàn)該錯(cuò)誤。

  五、Microsoft JET Database Engine 錯(cuò)誤 '80040e09'

  不能更新。數(shù)據(jù)庫或?qū)ο鬄橹蛔x。

  A: 未打開數(shù)據(jù)庫目錄的讀寫權(quán)限。 解決方法:

  ( 1 )檢查是否在 IIS 中對(duì)整個(gè)網(wǎng)站打開了 “ 寫入 ” 權(quán)限,而不僅僅是數(shù)據(jù)庫文件。

  ( 2 )檢查是否在 WIN2000 的資源管理器中,將網(wǎng)站所在目錄對(duì) EveryOne 用戶打開所有權(quán)限。具體方法是:打開 “ 我的電腦 ”---- 找到網(wǎng)站所在文件夾 ---- 在其上點(diǎn)右鍵 ---- 選 “ 屬性 ”----- 切換到 “ 安全性 ” 選項(xiàng)卡,在這里給 EveryOne 用戶所有權(quán)限。

  注意: 如果你的系統(tǒng)是 XP ,請(qǐng)先點(diǎn) “ 工具 ”----“ 文件夾選項(xiàng) ”----“ 查看 ”----- 去掉 “ 使用簡(jiǎn)單文件共享 ” 前的勾,確定后,文件夾 “ 屬性 ” 對(duì)話框中才會(huì)有 “ 安全性 ” 這一個(gè)選項(xiàng)卡。

  六、系統(tǒng)不能打開注冊(cè)表關(guān)鍵字(8007000e)

  Microsoft OLE DB Provider for ODBC Drivers 錯(cuò)誤 '8007000e'

  [Microsoft][ODBC Microsoft Access Driver]常見錯(cuò)誤 不能打開注冊(cè)表關(guān)鍵字 'Temporary (volatile) Jet DSN for process 0x11b4 Thread 0x1a4c DBC 0x9d34354 Jet'。

  產(chǎn)生錯(cuò)誤可能原因:

  1.打開數(shù)據(jù)庫時(shí)寫法不對(duì),標(biāo)準(zhǔn)的ACCESS數(shù)據(jù)庫調(diào)用寫法:(如果無法記清如何寫,可利用DW的幫助)

  "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("db.MDB")

  2. 正在上傳數(shù)據(jù)庫文件。

  總之在用DW制作ASP網(wǎng)站時(shí)使用數(shù)據(jù)庫比較容易出現(xiàn)錯(cuò)誤,錯(cuò)誤出現(xiàn)時(shí)一定要看清錯(cuò)誤的類型,多加思考多請(qǐng)教一定會(huì)得到解決。

關(guān)鍵詞:DWASP

贊助商鏈接: