求压缩Access数据库的算法(ADO)? 求压缩Access数据库的算法(ADO)? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Const SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;' +'Jet OLEDB:Database Password=%s;';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; function TForm1.CompactDatabase(AFileName: string): boolean;const SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Password=XXXXXX;' + 'User ID=XXXXXX;' + 'Data Source=%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, [AFileName1]), format(SConnectionString, [STempFileName, AFileName1]))); //压缩数据库 //复制并覆盖源数据库文件,如果复制失败则函数返回假,压缩成功但没有达到函数的功能 result := CopyFile(PChar(STempFileName), PChar(AFileName), false); DeleteFile(STempFileName); //删除临时文件 except result := false; //压缩失败 end;end; AFileName是指要压缩的数据库名称吗? 如果没有密码是不是留空呢?譬如function CompactDatabase(test.mdb,'');是这样调用吗? 以下代码,测试通过:--------------------------------------unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,ComObj;type TForm1 = class(TForm) Button1: TButton; OpenDialog1: TOpenDialog; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}//压缩Access数据库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;function DaoCompactDB(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;procedure TForm1.Button1Click(Sender: TObject);begin if DaoCompactDB('e:\abc\jxcdb.mdb') then ShowMessage('OK'); end;end;end. 又准备改良程序了,有定时和线程安全的问题,大家帮忙看看。。 DBGridEh显示的数据导出到EXCEL? quickrep 一条记录也不显示??求高手指点 使用Twebbrowser无法提取ASP.NET的ASP.NET_SessionId值.. 高手帮忙!!! 再一个关于窗体的简单问题 怎样能实现这种功能,点某键弹出一个页面,可以在页面中输入信息以便让主程序使用!谢 大伙快帮帮小弟啦!!! 特急特急求救,如何进行交叉表的查询? 操作文本文件的问题 给steveli放分。steveli进!500分之1。 判断文件存在与否的优化问题?
SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
+'Jet OLEDB:Database Password=%s;';
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;
const
SConnectionString =
'Provider=Microsoft.Jet.OLEDB.4.0;Password=XXXXXX;' +
'User ID=XXXXXX;' +
'Data Source=%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, [AFileName1]), format(SConnectionString, [STempFileName, AFileName1]))); //压缩数据库
//复制并覆盖源数据库文件,如果复制失败则函数返回假,压缩成功但没有达到函数的功能
result := CopyFile(PChar(STempFileName), PChar(AFileName), false);
DeleteFile(STempFileName); //删除临时文件
except
result := false; //压缩失败
end;
end;
譬如function CompactDatabase(test.mdb,'');
是这样调用吗?
--------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ComObj;
type
TForm1 = class(TForm)
Button1: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
implementation
{$R *.dfm}
//压缩Access数据库
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;function DaoCompactDB(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;procedure TForm1.Button1Click(Sender: TObject);
begin
if DaoCompactDB('e:\abc\jxcdb.mdb') then ShowMessage('OK');
end;
end;
end.