求用BCB进行Access数据库压缩的实例

竹背篼 2004-06-24 09:01:04
如题
...全文
181 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
duchuan 2004-06-28
  • 打赏
  • 举报
回复
建议采用我上面的程序,其中可以删除
Adoobj.Clear();

if(!FileExists(SourceFile)) //检查源库是否存在
return;
if(FileExists(TargetFile)) // 不允许目的库存在
DeleteFile(TargetFile);
加上:
if(OpenDialog1->Execute())
{
FName=OpenDialog1->FileName;
方便对话框选择源文件和目标文件。如果要设置覆盖的接受或拒绝,在OpenDialog1的OnCanClose事件中设置。
wlg68 2004-06-28
  • 打赏
  • 举报
回复
void TFrmMain::CompactDatabase(String SourceFile,String SourcePwd, String TargetFile,String TargerPwd)
{
if(!FileExists(SourceFile)) //检查源库是否存在
return;
if(FileExists(TargetFile)) // 不允许目的库存在
DeleteFile(TargetFile);
String ProviderSrc = "Provider=Microsoft.Jet.OLEDB.4.0" ";Data Source=" + SourceFile +
";Jet OLEDB:Database Password=" + SourcePwd;
String ProviderDes = "Provider=Microsoft.Jet.OLEDB.4.0" ";Data Source=" + TargetFile +
";Jet OLEDB:Database Password=" + TargerPwd;
try
{
Variant Adoobj=Variant::CreateObject("JRO.JetEngine");
Adoobj.OleProcedure("CompactDatabase",WideString(ProviderSrc),WideString(ProviderDes));
Adoobj.Clear();
}
catch(Exception &e)
{
return;
}

CopyFile((TargetFile).c_str(), (SourceFile).c_str(),false);
DeleteFile(TargetFile);
}
我感觉上面的还是可行的啊,我就有过上面的编程经历 啊!
heguxun 2004-06-25
  • 打赏
  • 举报
回复
void TFrmMain::CompactDatabase(String SourceFile,String SourcePwd, String TargetFile,String TargerPwd)
{
if(!FileExists(SourceFile)) //检查源库是否存在
return;
if(FileExists(TargetFile)) // 不允许目的库存在
DeleteFile(TargetFile);
String ProviderSrc = "Provider=Microsoft.Jet.OLEDB.4.0" ";Data Source=" + SourceFile +
";Jet OLEDB:Database Password=" + SourcePwd;
String ProviderDes = "Provider=Microsoft.Jet.OLEDB.4.0" ";Data Source=" + TargetFile +
";Jet OLEDB:Database Password=" + TargerPwd;
try
{
Variant Adoobj=Variant::CreateObject("JRO.JetEngine");
Adoobj.OleProcedure("CompactDatabase",WideString(ProviderSrc),WideString(ProviderDes));
Adoobj.Clear();
}
catch(Exception &e)
{
return;
}

CopyFile((TargetFile).c_str(), (SourceFile).c_str(),false);
DeleteFile(TargetFile);
}
竹背篼 2004-06-24
  • 打赏
  • 举报
回复
不行啊
void Variant::OleProcedure(const String& name, P1 p1, P2 p2)
{
TAutoArgs<2> args;
args[1] = p1; args[2] = p2;
OleProcedure(name, static_cast<TAutoArgsBase*>(&args));//到这里出错了
}
叶子哟 2004-06-24
  • 打赏
  • 举报
回复
抄的
// 用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( ); // 释放 ADO对象
}

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);
if (FileExists(f2))
DeleteFile(f2);
CompactDatabase(dir+f1,psw1,dir+f2,psw2);
ShowMessage("Finished");
}

竹背篼 2004-06-24
  • 打赏
  • 举报
回复
AnsiString sProvider,SPath,DPath,Path,temp;
WideString TempMDBFile,ConnectStr,CurMDBFile;
sProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
TempMDBFile = ExtractFilePath(Application->ExeName)+"Temp.mdb";
FilePath = sProvider + FilePath +";Jet OLEDB:Database Password=test";
temp = sProvider + TempMDBFile+";Jet OLEDB:Database Password=test";
TempMDBFile = temp ;
CurMDBFile = FilePath;
JetEngine1->CompactDatabase(CurMDBFile,TempMDBFile);

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧