如何用Delphi压缩Access数据库?在我的程序里我把Access库中的表删掉之后它的大小还是不变,在Access中我知道怎么压缩,可是我现在要用程序来压缩它,请问各位大虾如何做,谢谢!!
解决方案 »
- DELPHI中如何内嵌WORD
- Delphi字符串匹配,高手帮帮忙啊,我是初学者。。。非常感谢
- [求助]使用VCLSkin控件的时候,如何去掉他自带的Caption???
- 爱的眼睛:求助函数的问题,大伙帮看!不够分再加加加!几贴一起给分!火大!
- 请教如何使字符类型的字段在TDBChart里的坐标中显示出来?
- Delphi 8 注册码!(...晕~~~~(估计作者是个Java Fans))
- delphi2010包,每次编译后引用该包的其他包和程序都要重编译么?
- 一个入门的问题
- 我用delphi6开发电商后台,可有这方面的讨论??
- 谁有早期的TeeChart5.ocx,文件大小为2,576,384,发行日期在2001-06-17号以前的,我这里有个crack软件,但是新下载的不行,所以重金寻求!!!
- 快来加入,属于菜鸟的群,3729117,Delphi菜鸟乐园!
- 再次提问数据库恢复的问题? 急!!!!!!!!!!!!!!!!!!!!!!
请看:
try
dtmd.ADOConnection1.Connected:=false;
CompactAndRepair(DTMD.MyappPath+'\DATA\'+dtmd.CurDb,DTMD.MyappPath+'\DATA\GasIS~1.mdb');
deletefile(DTMD.MyappPath+'\DATA\'+dtmd.CurDb);
renamefile(DTMD.MyappPath+'\DATA\GasIS~1.mdb',DTMD.MyappPath+'\DATA\'+dtmd.CurDb);
dtmd.ADOConnection1.Connected:=true;
messagedlg('压缩整理成功!',mtinformation,[mbok],0);
except
showmessage('数据库正在被其他应用程序打开,请稍后再试!');
end;
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 CompactMDB(const DBName: string);
var
sTmp: string;
DaoObj: OleVariant;
begin
sTmp := Copy(DBName, 1, LastDelimiter('\', DBName)) + 'Temp.mdb';
try
try
DaoObj := CreateOleObject('DAO.DBEngine.36');
DaoObj.CompactDatabase(DBName, sTmp);
DeleteFile(DBName);
RenameFile(sTmp, DBName);
except
end;
finally
DaoObj := Unassigned;
end;
end;
位于c:\program files\borland\delphi7\imports
var
s1,s2,s3:WideString;
v1,v2:Variant;
O:_DBEngine;
begin
s1:=dbname;
s2:='tempdb$$.$$$';
if pw='' then
s3:=''
else
s3:=';pwd='+pw;
v1:=Variant('');
v2:=Variant(0); O:=CoDBEngine.Create();
O.CompactDataBase(s1,s2,v1,v2,Variant(s3));
if (DeleteFile(dbname)) then
RenameFile('tempdb$$.$$$',dbname);
end;
以下代码在WIN2K,D6,MDAC2.6下测试通过,
编译好的程序在WIN98第二版无ACCESS环境下运行成功.
//在之前uses ComObj,ActiveX
//声明连接字符串
Const
SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
+'Jet OLEDB:Database Password=%s;';//=============================================================================
// Procedure: GetTempPathFileName
// Author : ysai
// Date : 2003-01-27
// Arguments: (None)
// Result : string
//=============================================================================
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;//=============================================================================
// Procedure: CreateAccessFile
// Author : ysai
// Date : 2003-01-27
// Arguments: FileName:String;PassWord:string=''
// Result : boolean
//=============================================================================
function CreateAccessFile(FileName:String;PassWord:string=''):boolean;
//建立Access文件,如果文件存在则失败
var
STempFileName:string;
vCatalog:OleVariant;
begin
STempFileName:=GetTempPathFileName;
try
vCatalog:=CreateOleObject('ADOX.Catalog');
vCatalog.Create(format(SConnectionString,[STempFileName,PassWord]));
result:=CopyFile(PChar(STempFileName),PChar(FileName),True);
DeleteFile(STempFileName);
except
result:=false;
end;
end;//=============================================================================
// Procedure: CompactDatabase
// Author : ysai
// Date : 2003-01-27
// Arguments: AFileName,APassWord:string
// Result : boolean
//=============================================================================
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: ChangeDatabasePassword
// Author : ysai
// Date : 2003-01-27
// Arguments: AFileName,AOldPassWord,ANewPassWord:string
// Result : boolean
//=============================================================================
function ChangeDatabasePassword(AFileName,AOldPassWord,ANewPassWord:string):boolean;
//压缩数据库并修改ACCESS数据库密码
var
STempFileName:string;
vJE:OleVariant;
begin
STempFileName:=GetTempPathFileName;
try
vJE:=CreateOleObject('JRO.JetEngine');
vJE.CompactDatabase(format(SConnectionString,[AFileName,AOldPassWord]),
format(SConnectionString,[STempFileName,ANewPassWord]));
result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
DeleteFile(STempFileName);
except
result:=false;
end;
end;