ACCESS的压缩~~

rcaicc 2004-11-22 11:52:00
我想在备份之前先对access进行压缩,就像access自带的那个压缩工具那样。十几M的一次压成几百K
...全文
80 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rcaicc 2004-11-23
  • 打赏
  • 举报
回复
呵呵,都是三个星星的回答~~太有面子了。。
aiirii 2004-11-23
  • 打赏
  • 举报
回复
我以前的代码:

library Compact2K;


uses
SysUtils,
Classes,
Windows,
JRO_TLB in 'D:\Program Files\Borland\Delphi7\Imports\JRO_TLB.pas';

{$R *.res}

function CompactMDB(pPath : Pchar):Boolean;stdcall;
const
Provider = 'Provider=Microsoft.Jet.OLEDB.4.0;';
var
JetEng: JetEngine;
Src, Dest: WideString;
sPath, sFN: string;
i: Integer;
begin
Result := False;
JetEng := CoJetEngine.Create;
//sPath := DataModule1.ADOConnection1.ConnectionString;
sPath := StrPas(pPath);
I := Pos('Data Source=', sPath);
Delete(sPath, 1, I + 11);
I := Pos(';Mode=Share Deny None', Spath);
Delete(sPath, I, 1000);

sFN := ExtractFileName(sPath);
sPath := ExtractFilePath(sPath);
Src := Provider + 'Data Source =' + sPath + sFN;
Dest := Provider + 'Data Source =' + sPath + 'Cpt' + sFN;
try
if FileExists(sPath + 'Cpt' + sFN) then
DeleteFile(Pchar(sPath + 'Cpt' + sFN));
JetEng.CompactDatabase(Src, Dest);

CopyFile(PChar(sPath + sFN), PChar(sPath + ChangeFileExt(sFn, '.bak')),
False);
DeleteFile(Pchar(sPath + sFn));
CopyFile(PChar(sPath + 'Cpt' + sFN), PChar(sPath + sFn), False);
Result := True;
finally
JetEng := nil;
end;
end;

exports
CompactMDB Index 1;
begin
end.
aiirii 2004-11-23
  • 打赏
  • 举报
回复
菜单 project - import type library

选择
Microsoft Jet and Repliction Objects 2.x Library

导入,就有TJetEngine
ly_liuyang 2004-11-23
  • 打赏
  • 举报
回复
这个一定OK的
uses Sysutils, ComObj, Dialogs, Variants;

function DaoActive(var DaoObject: OleVariant): Boolean;
begin
Result:=False;
try
DaoObject:=GetActiveOleObject('DAO.DBEngine.36');
Result:=True;
except
try
DaoObject:=CreateOleObject('DAO.DBEngine.36');
Result:=True;
except
DaoObject:=Null;
end;
end;
end;

//Compact Access MDB file
function CompactMDB(const FileName: string): Boolean;
var
db:OleVariant;
TempFile:string;
begin
Result:=False;
try
if not DaoActive(db) then
Exit;
try
TempFile:=ExtractFilePath(FileName)+'~msaTemp.mdb';
db.CompactDatabase(FileName, TempFile);
DeleteFile(FileName);
RenameFile(TempFile, FileName);
Result:=True;
except
on E:EOleException do
ShowMessage(E.Message);
end
finally
db:=Unassigned;
end;
end;

// Repair Access MDB file
function RepairMDB(const FileName: string): Boolean;
var
db:OleVariant;
begin
Result:=False;
try
if not DaoActive(db) then
Exit;
try
db.RepairDatabase(FileName);
Result:=True;
except
on E:EOleException do
ShowMessage(E.Message);
end
finally
db:=Unassigned;
end;
end;

http://lysoft.7u7.net
ly_liuyang 2004-11-23
  • 打赏
  • 举报
回复
上面的正解
但是现在基本没35版本的DAO啦

改为36就好很多了

http://lysoft.7u7.net
rcaicc 2004-11-22
  • 打赏
  • 举报
回复
var
jt: TJetEngine;

这个是什么了?
rcaicc 2004-11-22
  • 打赏
  • 举报
回复
//压缩Access表

procedure CompactDb(DbPath, DbName, Password: string);
var
jt: TJetEngine;
begin
jt := TjetEngine.Create(nil);
try
jt.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + DbPath + DbName + ';Jet OLEDB:DataBase PassWord=' + Password,
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + DbPath + 'Dest.mdb;Jet OLEDB:DataBase PassWord=' + password);
DeleteFile(DbPath + DbName);
RenameFile(DbPath + 'Dest.mdb', DbPath + DbName);
finally
jt.Free;
end;
end;


//修复Access表

procedure RepairDb(DbName: string);
var
Dao: OLEVariant;
begin
Dao := CreateOleObject('DAO.DBEngine.35');
Dao.RepairDatabase(DbName);
end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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