線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1974
推到 Plurk!
推到 Facebook!

壓縮Access資料庫的方法

 
axsoft
版主


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-11 14:35:56 IP:61.218.xxx.xxx 未訂閱
壓縮Access資料庫的方法    方法一:    //先包含檔  #include  void __fastcall TfrmMain::btnCompactClick(TObject *Sender) { //實現方法 WideString wsOldDB,wsNewDB; TCOM_DBEngine Engine = new CoDBEngine->Create(); //獲取檔資料庫的路徑 wsOldDB = "D:\\Before_compact.mdb"; wsNewDB "D:\\After_compact.mdb"; Engine->CompactDatabase(p1.c_bstr(),p2.c_bstr()); delete Engine; } 方法2 // 用ADO壓縮Access2000庫 #include "utilcls.h" void CompactDatabase(String f1,String psw1, String f2,String psw2) { String Provider1="Provider=Microsoft.Jet.OLEDB.4.0" ";Data Source=" f1 ";Jet OLEDB:Database Password=" psw1; String Provider2="Provider=Microsoft.Jet.OLEDB.4.0" ";Data Source=" f2 ";Jet OLEDB:Database Password=" psw2; Variant Adoobj=Variant::CreateObject("JRO.JetEngine"); Adoobj.OleProcedure("CompactDatabase",Provider1,Provider2); Adoobj.Clear(); } void __fastcall TForm1::Button1Click(TObject *Sender) { String f1="yhecdagl1.mdb"; // 源庫1 String psw1="yhecdagl"; // 密碼1 String f2="yhecdagl2.mdb"; // 新目的庫2 String psw2="yhecdagl2"; // 新密碼2 String dir=ExtractFilePath(Application->ExeName); f1=dir f1; f2=dir f2; if (FileExists(f2)) // 不允許目的庫存在 DeleteFile(f2); CompactDatabase(f1,psw1,f2,psw2); ShowMessage("Finished"); } 聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]---
hornacek
一般會員


發表:29
回覆:76
積分:21
註冊:2004-02-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-09 13:43:36 IP:210.243.xxx.xxx 未訂閱
用方法二遇到如下問題: Adoobj.OleProcedure"CompactDatabase",Provider1.c_str(),Provider2.c_str()); Member function must be called or its address taken 請問一下,要如何解決?感激不盡! ^^
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-19 11:35:20 IP:61.221.xxx.xxx 未訂閱
引言: 用方法二遇到如下問題: Adoobj.OleProcedure("CompactDatabase",Provider1.c_str(),Provider2.c_str()); Member function must be called or its address taken 請問一下,要如何解決?感激不盡! ^^
hornacek, 您好 請注意紅色部分,應該可以解決您的問題。 ================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之
hornacek
一般會員


發表:29
回覆:76
積分:21
註冊:2004-02-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-10 22:09:38 IP:220.139.xxx.xxx 未訂閱
謝謝你的回答,現在成功了! 不過我想要寫在有開啟此資料庫的程式中,但都會發生例外, 除非我打開程式時沒有連結資料庫,才能壓縮資料庫, 即時我在程式執行時,中斷對資料庫的連線,也無法壓縮資料庫, 不知道要如何才能在程式中,關閉資料庫~~~感激~~~ ^^~~~
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-10 23:36:03 IP:203.204.xxx.xxx 未訂閱
hornacek, 您好 請確認是否忽略了以下二點, 1. 在執行壓縮程式之前,是否所有的ADOConnection或其他可能連結到該Access的元件都斷線?(例如:ADOConnection->Connected = false;) 2. 您是否另外有開啟該Access檔案?(例如:另外單獨利用軟體開啟該Access檔案)    ================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之
hornacek
一般會員


發表:29
回覆:76
積分:21
註冊:2004-02-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-12 09:11:36 IP:61.57.xxx.xxx 未訂閱
引言: hornacek, 您好 請確認是否忽略了以下二點, 1. 在執行壓縮程式之前,是否所有的ADOConnection或其他可能連結到該Access的元件都斷線?(例如:ADOConnection->Connected = false;) 2. 您是否另外有開啟該Access檔案?(例如:另外單獨利用軟體開啟該Access檔案)
我的程式包含 ADOConnection1, ADOTable1, DataSource1, DBGrid1, 還有 Button1 是用來壓縮的按鈕,我在Button1Click中,在呼叫CompactDatabase前加上ADOconnection1->Connected = false;,不過似乎還是會跳出例外 「class EOleSysError with message '發生例外狀況。'」,沒有其它程式在開啟這個資料庫,不知道我是哪裡弄錯了?請高手指點一下吧!感激... ><~~~ 問題解決了!,原因是出在BCB正開啟這個資料庫,若我將BCB關閉,在執行我compile後的執行檔就OK了!感謝tech_state大大的熱心指導!Thanks! 發表人 - hornacek 於 2004/03/12 09:19:44
系統時間:2024-04-30 0:19:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!