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

壓縮Access資料庫有一點點問題麻煩大大一下

答題得分者是:AndrewK
l90425
初階會員


發表:95
回覆:152
積分:49
註冊:2008-04-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-07-26 00:12:57 IP:59.125.xxx.xxx 未訂閱
小弟對下面的方法有一些問題,那就是
TCOM_DBEngine Engine = new CoDBEngine->Create();是要增加什麼物件才能用
我只有增加以下物件而已
#include
#include
[code cpp]
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};

[/code]
能否請大大提供我一些解答的範例
如果提供範例,也請大大能否透露大大你用了那些物件(因為小弟是新手)
謝謝大大,因為做小弟做了很久還是無法做出來,如果大大你能提供解答我一定會非常的感謝大大你。
謝謝!

壓縮Access資料庫的方法
先包含檔
#include
[code cpp]
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;
}
[/code]

[code cpp]
// 用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");
}
[/code]

--------------------------------------------------------------------------------
以下範例展示了壓縮 c:\data\northwind.mdb 資料庫,壓縮後的資料庫
會建立於 c:\data\newnorth.mdb。在使用下列範例前,你必須 import
JRO type library:開啟一個新的專案,點選 Project | Import Type
Library, 選擇 Micro$oft Jet and Replication Objects 2.1 Library
(Version 2.1),然後按 Create 便可以產生 JRO_TLB.pas。
[code delphi]
Uses
JRO_TLB;
const
Provider = 'Provider=Microsoft.Jet.OLEDB.4.0;';
SrcMDB = 'c:\data\northwind.mdb';
DstMDB = 'd:\data\newnorth.mdb';
procedure TForm1.Button1Click(Sender: TObject);
var
JetEng : JetEngine;
Src : WideString;
Dest : WideString;
begin
JetEng := CoJetEngine.Create;
Src := Provider 'Data Source=' SrcMDB;
Dest := Provider 'Data Source=' DstMDB;
try
If FileExists(DstMDB) Then
DeleteFile(DstMDB);
JetEng.CompactDatabase(Src, Dest);
finally
JetEng := Nil;
end;
end;
[/code]
及參考了大大所提供的做好樣本http://delphi.ktop.com.tw/board.php?cid=17&fid=115&tid=17920
-謝謝大大的熱心回覆
------
-謝謝大大熱心的回覆!謝謝!
編輯記錄
l90425 重新編輯於 2008-07-26 00:14:51, 註解 無‧
l90425 重新編輯於 2008-07-26 09:00:33, 註解 無‧
taishyang 重新編輯於 2008-07-28 18:52:27, 註解 無‧
l90425 重新編輯於 2008-07-31 01:29:59, 註解 無‧
AndrewK
高階會員


發表:6
回覆:151
積分:161
註冊:2006-10-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-07-26 10:45:15 IP:203.67.xxx.xxx 訂閱
我只有用過 ADO 壓縮 Access 資料庫
而您提到的問題
TCOM_DBEngine Engine = new CoDBEngine->Create();
是用什麼物件
不是就 TCOM_DBEngine 物件嗎????
如果是要問CoDBEngine->Create();
Create方法要傳入什麼東東
他的Creaet方法是可以不傳入東西的

沒測試過,急著出門,給你的一些建議啦 ^ ^

------
Just Do It
-------------------------
其實男生不是真的喜歡你不減肥,而是喜歡你愛吃還不肥;也不是真的喜歡你不化妝,而是喜歡你素顏也好看;也不是真的喜歡你瘦,而是喜歡你瘦卻有胸;也不是真喜歡你獨立,而是他忙的時候別煩他。女孩子,太認真你就輸了。
編輯記錄
AndrewK 重新編輯於 2008-07-31 02:06:20, 註解 無‧
AndrewK
高階會員


發表:6
回覆:151
積分:161
註冊:2006-10-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-07-27 00:26:49 IP:203.67.xxx.xxx 訂閱
以下連結是你所貼的連結
http://delphi.ktop.com.tw/board.php?cid=17&fid=115&tid=17920


你將裡面 Button1 的 Button1Click 函式,寫成傳入DB Path 的函式
在將 JRO_TLB.pas (連結裡所下載的檔案有)
加入 Delphi 的 Search Path 如此即可
------
Just Do It
-------------------------
其實男生不是真的喜歡你不減肥,而是喜歡你愛吃還不肥;也不是真的喜歡你不化妝,而是喜歡你素顏也好看;也不是真的喜歡你瘦,而是喜歡你瘦卻有胸;也不是真喜歡你獨立,而是他忙的時候別煩他。女孩子,太認真你就輸了。
l90425
初階會員


發表:95
回覆:152
積分:49
註冊:2008-04-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-07-30 17:08:10 IP:59.125.xxx.xxx 未訂閱
可不可以請大大再詳加以說明因為我還是聽不太懂謝謝大大的熱心回覆
===================引 用 AndrewK 文 章===================
以下連結是你所貼的連結
http://delphi.ktop.com.tw/board.php?cid=17&fid=115&tid=17920


你將裡面 Button1 的 Button1Click 函式,寫成傳入DB Path 的函式
在將 JRO_TLB.pas (連結裡所下載的檔案有)
加入 Delphi 的 Search Path 如此即可
------
-謝謝大大熱心的回覆!謝謝!
l90425
初階會員


發表:95
回覆:152
積分:49
註冊:2008-04-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-07-31 01:28:34 IP:59.125.xxx.xxx 未訂閱
我做出來的壓縮程式
但是有一個問題那就是當程式跑到這一行delete Engine;的時候會出現問題請問是為什麼
請大大給一點提示

謝謝!
[code cpp]
#include
#pragma link "DAO_2K"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TCOM_DBEngine Engine=new CoDBEngine->Create();
WideString SourceDatabase="D:\\Before_compact.mdb";
WideString DestDatabase="D:\\After_compact.mdb";

if(FileExists(DestDatabase))
DeleteFile(DestDatabase);
if(!FileExists(DestDatabase))
{
Engine->CompactDatabase(SourceDatabase.c_bstr(),DestDatabase.c_bstr());

if(FileExists(DestDatabase))
{
DeleteFile(SourceDatabase);
RenameFile(DestDatabase,SourceDatabase);
}
}
delete Engine;
}

[/code]
-謝謝大大熱心的回覆
------
-謝謝大大熱心的回覆!謝謝!
編輯記錄
l90425 重新編輯於 2008-07-31 01:29:07, 註解 無‧
AndrewK
高階會員


發表:6
回覆:151
積分:161
註冊:2006-10-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-07-31 21:25:58 IP:60.250.xxx.xxx 訂閱
I don't have C++ Compiler software
you can try to modify

[code cpp]
WideString SourceDatabase="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Before_compact.mdb";
WideString DestDatabase="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\After_compact.mdb";
[/code]

if problem usual
you can try modifing
[code cpp]
delete Engine;
[/code]

changes to


[code cpp]
Engine=nil
[/code]

But I'm not sure that the code that is "Engine=nil " can have no error in IDE
because I don't have any environment to test ^ ^
good luck
------
Just Do It
-------------------------
其實男生不是真的喜歡你不減肥,而是喜歡你愛吃還不肥;也不是真的喜歡你不化妝,而是喜歡你素顏也好看;也不是真的喜歡你瘦,而是喜歡你瘦卻有胸;也不是真喜歡你獨立,而是他忙的時候別煩他。女孩子,太認真你就輸了。
l90425
初階會員


發表:95
回覆:152
積分:49
註冊:2008-04-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-07-31 23:25:38 IP:59.125.xxx.xxx 未訂閱
   Engine=nil 用了這個還是不行也
還有Engine=NILL,Engine=NULL也都不行
還有什麼方法嗎
謝謝!謝謝!謝謝!

===================引 用 AndrewK 文 章===================
I don't have C Compiler software
you can try to modify

[code cpp]
WideString SourceDatabase="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Before_compact.mdb";
WideString DestDatabase="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\After_compact.mdb";
[/code]

if problem usual
you can try modifing
[code cpp]
delete Engine;
[/code]

changes to


[code cpp]
Engine=nil
[/code]

But I'm not sure that the code that is "Engine=nil " can have no error in IDE
because I don't have any environment to test ^ ^
good luck
------
-謝謝大大熱心的回覆!謝謝!
系統時間:2017-10-20 11:39:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!