2,498
社区成员
发帖
与我相关
我的任务
分享
Const
SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
+'Jet OLEDB:Database Password=%s;';
function GetTempPathFileName():string;
//取得临时文件名
var
SPath,Sfile:array [0..254] of char;
begin
GetTempPath(254,SPath);
GetTempFileName(SPath,'~SM',0,SFile);
result:=SFile;
DeleteFile(PChar(result));
end;
function CompactDatabase(AFileName,APassWord:string):boolean;
//压缩与修复数据库,覆盖源文件
var
STempFileName:string;
vJE:OleVariant;
begin
STempFileName:=GetTempPathFileName;
try
vJE:=CreateOleObject('JRO.JetEngine');
vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
format(SConnectionString,[STempFileName,APassWord]));
result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
DeleteFile(STempFileName);
except
result:=false;
end;
end;
//调用函数
procedure Tfrmcompact.SpeedButton2Click(Sender: TObject);
begin
if edit1.text='' then
begin
MessageBox(handle,'请选择要压缩的数据库文件!','提示',MB_OK + MB_ICONINFORMATION);
end
else begin
compactdatabase(edit1.text,'');
MessageBox(handle,'数据库压缩成功!','成功',MB_OK or MB_ICONINFORMATION);
edit1.Text:='';
end;
end;
//数据库备份
procedure Tfrmbackup.SpeedButton1Click(Sender: TObject);
begin
if edit1.text='' then
begin
MessageBox(handle,'请选择现有的数据库!','提示',MB_OK + MB_ICONINFORMATION);
end
else begin
if edit2.text='' then
begin
MessageBox(handle,'请选择备份数据库的路径!','提示',MB_OK + MB_ICONINFORMATION);
end
else begin
copyfile(pchar(edit1.text),pchar(edit2.text),false);
MessageBox(handle,'数据库备份成功!','成功',MB_OK or MB_ICONINFORMATION);
edit1.Text:='';
edit2.Text:='';
end;
end;
end;
通過JRO壓縮資料庫
procedure TForm1.btnCompactDBClick(Sender:TObject);
var
JetEngine:IJetEngine;
strTagCon:string;//目標資料庫連接字串
strSourceCon:string;//源資料庫連接字串
begin
JetEngine:=CoJetEngine.Create;
strSourceCon:=
'Provider=Microsoft.Jet.OleDB.4.0;'
+'Data Source=d:ComTestmyDb.mdb;'
+'Jet OLEDB:Engine Type=5;'
+'Locale Identifier=0x0804;'
+'Jet OLEDB:Database Password=mypwd';
strTagCon:=
'Provider=Microsoft.Jet.OleDB.4.0;'
+'Data Source=d:ComTestmyDb1.mdb;'
+'Jet OLEDB:Engine Type=5;'
+'Locale Identifier=0x0804;'
+'Jet OLEDB:Database Password=mypwd';
//可以以此改變資料庫密碼
JetEngine.Compact Database(str Source Con,str TagCon);
end;
在设置的时候,你所用的TTable或者其他的控件的active属性不要设置为true,要不然在这个时候“文件已经在使用了”,用代码写 Table1.active:=true;
这样在运行时候才打开表,就不会出问题了...
你肯定是在设置的时候就将要连接的表打开了,例如:在dbgrid中显示表的内容等...