全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2405
推到 Plurk!
推到 Facebook!

[推薦] BDE v5.1的一個 BUG

 
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-07-30 13:03:20 IP:61.218.xxx.xxx 未訂閱
BDE v5.1的一個 BUG    作者: 猛禽    資料來源: http://www.dbgnu.com/bcb/doc/view.asp?page=122      最近在用 BDE 5.01 驅動 ODBC 時發現了一個 BDE 的 BUG ,它可能也存在于 BDE 以前的版本中。    這個 BUG 表現為:在裝有 MS-Office 的系統中, 運行 BDE Administrator 或 SQL Explorer 可以看到幾個如:Excel Files , MS Access 97 Database (以 Office 97 中文版為例)等的別名,它們是 BDE 自動獲取的 ODBC 的 DSN ( Data Source Name 數據源名,相當于別名), 這只要打開“控制面板”中的 ODBC Data Source Administrator 就可以看到它們都在 User DSN 頁中(也有的在 System DSN 中,不過不知為什麼 File DSN 中的 ODBC 別名不能進入 BDE ,我記得在以前的版本中好像可以的)。 在 SQL Explorer 中這幾個別名是打不開的,因為這幾 ODBC DSN 還沒有指定相應 的數據庫文件,理論上說只要給它們指定一個數據庫文件就可以訪問這些數據庫了, 但事實如何呢?    有兩種方法指定數據庫文件:一種是用 ODBC Data Source Administrator 給相應的 DSN 指定一個數據庫文件, BDE 不用 作任何修改就可以像用一般 BDE 別名一樣使用這個 ODBC DSN 了,這種方法是可行的, 但這樣的話就失去了靈活性(因為沒有簡便的程序操作的方法,或者是有而我不知道); 另一種方法是不改變 ODBC DSN ,而在對應的 BDE 別名中指定數據庫文件, 就是修改別名的 DATABASE NAME 參數,這種方法應該也是正確的,而且 BDE 別名的 參數可以很方便地在 TDatabase 控件中修改,但實際上這種方法會出錯!    系統報告 Microsoft ODBC 出錯,信息為: "Invalid connection string attribute DATABASE",即:“無效的連接串屬性: DATABASE ”。從出錯信息上看,問題出在了 BDE 傳遞給 ODBC 的參數上。 我猜測 BDE 驅動 ODBC 的方法應該是將 BDE 別名的參數相應轉換為 ODBC DSN 的參數然后建立 ODBC 連接。如此說來就是 BDE 在參數轉換時出現了錯誤的參數名:“ DATABASE ”,而這個參數一定就是那個要傳給 ODBC 的數據庫文件名了,即 BDE 別名中的"DATABASE NAME"參數,那正確的參數名應該是什麼? 據我寫 ASP (其中用 ADO 操縱數據庫時也是用 ODBC )的經驗, ODBC 的別名中的數據庫文件名參數應該是叫:“ DBQ ”。于是我用 Ultra Editor 的十六方式打開 BDE 的 ODBC 驅動程序文件: idodbc32.dll (從文件名上猜應該就是它),在其中查找字符串:"DATABASE=", 果然讓我找到了一處,並且只有這一處。備份 idodbc32.dll 后, 將此處的"DATABASE="改為"DBQ=", 注意: 因為長度不同,必須加上 0 (十六進制碼,不是 ASCII 碼)或用空格填滿(兩種方法都可以,我試過了), 存盤退出再試著打開那個別名,成功!    看來果然是 BDE 的錯,不過人非聖賢,孰能無過呢? 大家可以照我上面的方法修改 idodbc32.dll 文件,不過要提醒一點, 最好先備份,以防萬一。如果覺得麻煩,我寫了一個補丁程序:BDEPatch。 可以在這里下載 主要作品 。解開后運行 即可補上這個 BUG ,並產生備份文件: idodbc32.bug 。    補充說明: 此問題在下列版本中存在: 1 Delphi 5 企業版,未加補丁,版本號:5.0.5.62 ,相應 idodbc32.dll 的版本號為:5.1.0.4 ; 2 Delphi 5 企業版,加補丁1,版本號:5.0.6.18 ,此補丁未對 BDE 作修改,與未加補丁一樣; 3 C++ Builder 5 企業版,版本號:5.0.12.34 ,相應 idodbc32.dll 的版本號為:5.1.1.1 不信你可以自已試一下         時間就是金錢---[ 發問前請先找找舊文章]
系統時間:2017-12-14 14:22:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!