关于access数据库压缩!用delphi代码怎么实现啊??急
解决方案 »
- stringgrid GridLineWidth行列分开
- delphi能不能实现将功能菜单放进数据库?
- Idhttp 要POST超长参数时要怎么做?
- 关于物理删除DBF数据库表的。很想向你请教
- 提一个很有难度的问题,高高手请进: 如何截获一个IE窗口发送的包并分析它? (尚未结贴)
- InterBase的数据库如何才能转为其它格式的数据库??
- 求助:在一副图像上查找矩形
- 关于条形码问题,有分。
- 请问哪里有 delphi6 的 web services 制作教程?
- 一个比较现实的问题。
- 请问有BusinessSkinForm中各控件的使用手册吗?
- 有没有人用delphi.net??怎样在.net中调用VC写的dll?举个最简单的例子,救一下
dbengine: variant;
begin
dbengine := createoleobject('JRO.JetEngine');
dbengine.CompactDataBase('Data Source=c:\1.mdb', 'Data Source=c:\2.mdb;Jet OLEDB:Engine Type=5');
end;
var
CompressLevel: TCompressionLevel;
SourceFileStream: TFileStream;
CompressStream: TCompressionStream;
MemStream,DestMemStream: TMemoryStream;
Buffer: PChar;
Count,MemSize: Longint;
begin
CompressLevel:= clDefault;
try
SourceFileStream := TFileStream.Create(sSourceFile, fmOpenRead); //打开源文件
Count := SourceFileStream.size; //读出源文件大小
GetMem(Buffer, Count); MemStream := TMemoryStream.Create;
DestMemStream := TMemoryStream.Create;
CompressStream := TCompressionStream.Create(CompressLevel, DestMemStream);
try
SourceFileStream.ReadBuffer(Buffer^, Count); //将源文件内容读到Buffer中
MemStream.WriteBuffer(Buffer^, Count); //将Buffer内容读到MemStream中
MemSize := MemStream.Size; //记录原始文件尺寸
MemStream.SaveToStream(CompressStream); //将MemStream内容压缩保存在DestMemStream中
CompressStream.Free;
MemStream.Clear; //清空MemStream内容
MemStream.WriteBuffer(MemSize, SizeOf(MemSize)); //写入原始文件尺寸
MemStream.CopyFrom(DestMemStream, 0); //将压缩过的文件流DestMemStream内容拷贝到MemStream中
MemStream.SaveToFile(sZipFile); //将MemStream内容写到文件
showmessage('successful!')
//result := true;
finally
FreeMem(Buffer);
MemStream.Free;
DestMemStream.Free;
SourceFileStream.Free;
end;
except
showmessage('failed!')
//result := false;
end;
end;procedure Tinfile.UnCompressFile(sZipFile, sUnZipFile: String);
var
ZipStream: TFileStream;
MemStream: TMemoryStream;
DecompressStream: TDecompressionStream;
Buffer: PChar;
Count: Longint;
begin
try
ZipStream := TFileStream.Create(sZipFile, fmOpenRead); //打开压缩文件
ZipStream.ReadBuffer(Count, SizeOf(Count)); //将压缩文件的原始尺寸读到Count中
GetMem(Buffer, Count); //根据文件的原始尺寸大小给Buffer分配空间 MemStream := TMemoryStream.Create;
DecompressStream := TDecompressionStream.Create(ZipStream);
try
DecompressStream.ReadBuffer(Buffer^, Count); //将文件解压缩到Buffer中
MemStream.WriteBuffer(Buffer^, Count); //将Buffer内容写到MemStream中
MemStream.SaveToFile(sUnZipFile); //将MemStream写到文件
// result := true;
// showmessage('successful');
finally
FreeMem(Buffer);
DecompressStream.Free;
MemStream.Free;
ZipStream.Free;
end;
except
//result := false;
showmessage('failed');
end;
end;
//压缩与修复数据库,覆盖源文件
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;