如何压缩ACCESS数据库 ( 积分: 0 )

  • 主题发起人 主题发起人 doloop
  • 开始时间 开始时间
D

doloop

Unregistered / Unconfirmed
GUEST, unregistred user!
检索了很久,都没有找到一个完整可行的方法
希望大家能提供帮助
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,JRO_TLB;

type
TForm1 = class(TForm)
Button1: TButton;
Function CompactAndRepair(sOldMDB : String; sNewMDB : String) : Boolean;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

Function TForm1.CompactAndRepair(sOldMDB : String; sNewMDB : String) : Boolean;
const
sProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;';
var
oJetEng : JetEngine;
begin
sOldMDB := sProvider + 'Data Source=' + sOldMDB;
sNewMDB := sProvider + 'Data Source=' + sNewMDB;

try
oJetEng := CoJetEngine.Create;
oJetEng.CompactDatabase(sOldMDB, sNewMDB);
oJetEng := Nil;
Result := True;
except
oJetEng := Nil;
Result := False;
end;

end;


procedure TForm1.Button1Click(Sender: TObject);
begin
if CompactAndRepair('e:/students.mdb', 'e:/students_new.mdb') then
ShowMessage('Success')
else
ShowMessage('Failed');

end;



end.
 
procedure TMain_frm.N67Click(Sender: TObject);
Function CompactAndRepair(sOldMDB : String; sNewMDB : String) : Boolean;
const
sProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;';
var
oJetEng : JetEngine;
begin
sOldMDB := sProvider + 'Data Source=' + sOldMDB+ ';Jet OLEDB:Database Password=***;
sNewMDB := sProvider + 'Data Source=' + sNewMDB+ ';Jet OLEDB:Database Password=***';
try
oJetEng := CoJetEngine.Create;
oJetEng.CompactDatabase(sOldMDB, sNewMDB);
oJetEng := Nil;
Result := True;
except
oJetEng := Nil;
Result := False;
end;
end;
begin
CompactAndRepair(SysPath+'**.mdb', SysPath+'0.mdb');
DeleteFile( SysPath+**.mdb' );
RenameFile( SysPath+'0.mdb', **.mdb');

MessageBox(Handle, '数据库压缩完成', '提示信息', MB_OK+MB_ICONASTERISK);
end;
 
function CompactDatabase(AFileName,APassWord:string):boolean;
//压缩与修复数据库,覆盖源文件
const
SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
+'Jet OLEDB:Database Password=%s;';
var
SPath,SFile:Array [0..254] Of Char;
STempFileName:String;
JE:OleVariant;
begin
GetTempPath(40,SPath);//取得Windows的Temp路径
GetTempFileName(SPath,'~CP',0,SFile);//取得Temp文件名,Windows将自动建立0字节文件
STempFileName:=SFile;//PChar->String
DeleteFile(STempFileName);//删除Windows建立的0字节文件
try
JE:=CreateOleObject('JRO.JetEngine');//建立OLE对象,函数结束OLE对象超过作用域自动释放
OleCheck(JE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
format(SConnectionString,[STempFileName,APassWord])));//压缩数据库
//复制并覆盖源数据库文件,如果复制失败则函数返回假,压缩成功但没有到函数的功能
result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
DeleteFile(STempFileName);//删除临时文件
except
result:=false;//压缩失败
end;
end;
 
谢谢三位大虾们

怎么加分的
我怎么加不了。。。。。。。。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
663
import
I
后退
顶部