急救:无法在Delphi应用程序中压缩Access2000数据库(200分)

  • 主题发起人 主题发起人 mybps
  • 开始时间 开始时间
M

mybps

Unregistered / Unconfirmed
GUEST, unregistred user!
各位富翁,小生用Delphi5开发一个无人值守的数据和图像采集程序,用的是Access2000数据库,数据库中
使用了Binary字段存储图像,所以文件增长很快;小生采用定时转储和清除的方法,但发现将
Access2000数据库中的记录删除后,文件大小却不见小;小生在Microsoft Access2000中发现
有一个"修复和压缩数据库"的菜单可以将文件缩小(清除碎片),但小生在应用程序却无法实现
请各位大侠指教.小生在此万分感激.
 
在别处看到的,你试一试,不行还有别的。
function CompactMdb(const sDBName:string):Boolean;
const sProvider = Provider='Microsoft.Jet.OLEDB.4.0;';

var oJetEng: JetEngine;
sOldMdb, sNewMdb,sTempfile: string;
begin
  ReSult:=True;
  sTempFile:=ExtractFilePath(sDBname)+Temp.mdb;
 sOldMdb := sProvider + Data Source=' + sDBName+';'
 + Jet OLEDB:Database Password=HeQing;'
 +Jet OLEDB:Engine Type=4;//access97
;//Jet OLEDB:Engine Type=5//acces2000
 sNewMdb := sProvider + Data Source=' + sTempFile+';'
+ Jet OLEDB:Database Password=XXXXX;'
  +Jet OLEDB:Engine Type=4;//access97
//Jet OLEDB:Engine Type=5 accees2000
 try
  try
    oJetEng := CoJetEngine.Create;
    oJetEng.CompactDatabase(sOldMdb, sNewMdb);
  if FileExists(sTempFile) then
  begin
    CopyFile(Pchar(sTempFile),PChar(sDBName),False);
    DeleteFile(sTempFile);
  end;
  except
    on E: Exception do
    ReSult:=False;
  end
  finally
  oJetEng := nil;
end;
end;
 
uses DAO97 ,ComObj,
var
SourceFileName:String;
TargetFileName:String;
dao:OLEVariant;
begin
try
SourceFileName:=CurrentPath+'Eiss.mdb';
TargetFileName:=CurrentPath+'nEiss.mdb';

DataModule1.conEissMdb.Close; //压缩是以独占方式进行的;压缩前要关闭数据库连接。
screen.Cursor:=crHourGlass;
dao:=CreateOleObject('DAO.DBEngine.36');//'DAO.DBEngine.36'也可以,不知道是不是access2000要用dao3.6,我在access97上用35和36都可以
dao.CompactDatabase(SourceFileName,TargetFileName);
DeleteFile(SourceFileName);
RenameFile(TargetFileName,SourceFileName);
DataModule1.conEissMdb.Open;
screen.Cursor:=crDefault;
except
DataModule1.conEissMdb.Open;
end;

 
后退
顶部