使用 ADO 做資料庫連接,在 MainForm 上放置兩個 TADOConnection 各自連接 MS SQL 2000 與 MS Access 2000 兩個資料庫。

原本相安無事,但隨著程式碼的累積,忽然間,連接 Access 的 TADOConnection 居然一直造成錯誤。

出現的錯誤對話框顯示著 OLE error 80030002 訊息。

在網路上找到此篇
INFO: Translating Automation Errors for VB/VBA (Long)

其中有列出

-2147287038 (80030002) %1 could not be found.

因為要開啟的檔案不存在所以找不到,所以是參數的問題。

只好重新追蹤看看,花了將近ㄧ個下午的時間終於找到原因。居然是因為使用了 FileListBox1 元件的問題。就是因為下列幾行指令的影響

procedure TfmMain.FormCreate(Sender: TObject);
(省略)
gs_AppPath := AddSlash(ExtractFilePath(Application.ExeName));
gs_DownLoadPath := AddSlash(gs_AppPath + ‘download’);
FileListBox1.Directory := gs_DownLoadPath; // 因為加了此行造成錯誤
(省略)
end;

執行 FileListBox1.Directory := gs_DownLoadPath; 後會導致程式執行時的工作目錄也改變成 gs_DownLoadPath 的內容。所以之後的程式碼若是有使用相對路徑的方式就有可能會導致路徑錯誤。

也剛好讀取 Access 的 TADOConnection 的 ConnectionString 屬性就是使用相對路徑的方式,來連接應用程式相同目錄下的 DB.UDL 資料連接設定檔。因為是在工作目錄的變動後才連線所以造成錯誤。