DW制作ASP程序時數據庫的幾個問題

作者:佚名 來源:天極 時間:2006-09-29 標簽: 數據庫
網頁三劍客以其簡單易學迅速被廣大愛好者所青睞,尤其是DW已成為初學者制作網站的首選工具。但我們在用DW制作ASP+acces程序時,經常會出現這樣或那樣的錯誤,尤其是數據庫方面顯得特別突出。本文就此方面出現的一些常見的問題談談其原因及解決辦法。

  一、上傳網頁時出現如下錯誤:Microsoft OLE DB Provider for ODBC Drivers (0x80004005)

  [Microsoft][ODBC 驅動程序管理器] 未發現數據源名稱并且未指定默認驅動程序

  此類錯誤出現的情況大多是在用DW建立站點時運行到下面的步驟時我們選擇了第一項或第二項,如圖一:

  
圖一

  1、當選擇了第一項時,我們開發的ASP程序是在本地編輯和測試。在應用數據庫時建立數據庫連接大多采用的是DSN或自定義連接字符串

  用DSN時如圖二所示:

  
圖二

  DSN是用ODBC數據源管理器建立。我們知道DSN有用戶DSN、系統DSN、文件DSN三種,其中用戶DSN與系統DSN只能用于當前機器,不能為別的機器所用。而在用DW建立ASP程序時在上圖的第二項只能顯示系統DSN,因此當我們將ASP程序上傳或到別的機器運行時便會出現上述問題。

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

  
圖三

  連接字符串包含 Web 應用程序連接到數據庫所需的全部信息。

  Driver 指定在沒有為數據庫指定 OLE DB 提供程序時所使用的 ODBC 驅動程序。

  DBQ 是指向基于文件的數據庫(如在 Microsoft Access 中創建的數據庫)的路徑。該路徑是在測試數據庫文件的服務器上的路徑。

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

  2 當選擇了第二項時,我們開發的ASP程序是在本地編輯,然后上傳到遠程服務器測試。建立數據庫連接也采用的是DSN或自定義連接字符串,不同的是都采用的測試服務器上的DSN或連接字符串。當采用測試服務器上的DSN時同樣也只能用系統DSN于是當到別和機器運行ASP程序時,也就產生了同樣的問題。當采用自定義字符串時如果測試的路徑與連接字符串的數據庫路徑不一致時,也會發生同樣的問題。

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

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

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

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

  三、在DW中,因打開數據庫造成的常見錯誤

  1 在運行程序時,因打開數據庫造成的錯誤

  Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80004005'

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

  2 在上傳文件時,因打開數據庫造成的錯誤,如圖四所示:

  
圖四

  四、不能更新。數據庫或對象為只讀/操作必須使用一個可更新的查詢 (80004005)

  Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80004005'

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

  Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80004005' [Microsoft][ODBC Microsoft Access Driver] 不能更新。數據庫或對象為只讀。

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

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

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

  3) 增加用戶 IUSR_

  4) 設置 IUSR_ 對Access數據庫文件的訪問權限

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

  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、你是在同時更新兩個表中的字段,也會出現這個錯誤信息,解決辦法是分開來更新這兩個表中各自字段。

  5、當你使用了一個從低版本中(如ACCESS2.0,ACCESS7.0)載入到高版本(ACCESS 2000)中的查詢時,在執行這個查詢是會出現該錯誤。

  五、Microsoft JET Database Engine 錯誤 '80040e09'

  不能更新。數據庫或對象為只讀。

  A: 未打開數據庫目錄的讀寫權限。 解決方法:

  ( 1 )檢查是否在 IIS 中對整個網站打開了 “ 寫入 ” 權限,而不僅僅是數據庫文件。

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

  注意: 如果你的系統是 XP ,請先點 “ 工具 ”----“ 文件夾選項 ”----“ 查看 ”----- 去掉 “ 使用簡單文件共享 ” 前的勾,確定后,文件夾 “ 屬性 ” 對話框中才會有 “ 安全性 ” 這一個選項卡。

  六、系統不能打開注冊表關鍵字(8007000e)

  Microsoft OLE DB Provider for ODBC Drivers 錯誤 '8007000e'

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

  產生錯誤可能原因:

  1.打開數據庫時寫法不對,標準的ACCESS數據庫調用寫法:(如果無法記清如何寫,可利用DW的幫助)

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

  2. 正在上傳數據庫文件。

  總之在用DW制作ASP網站時使用數據庫比較容易出現錯誤,錯誤出現時一定要看清錯誤的類型,多加思考多請教一定會得到解決。

推薦設計

最新文章