procedure CompactDatabase_JRO(DatabaseName:string;DestDatabaseName:string='';Password:string=''); const Provider = 'Provider=Microsoft.Jet.OLEDB.4.0;'; var TempName : array[0..MAX_PATH] of Char; // имя временного файла TempPath : string; // путь до него Name : string; Src,Dest : WideString; V : Variant; begin try Src := Provider + 'Data Source=' + DatabaseName; if DestDatabaseName<>'' then Name:=DestDatabaseName else begin // выходная база не указана - используем временный файл // получаем путь для временного файла TempPath:=ExtractFilePath(DatabaseName); if TempPath='' Then TempPath:=GetCurrentDir; //получаем имя временного файла GetTempFileName(PChar(TempPath),'mdb',0,TempName); Name:=StrPas(TempName); end; DeleteFile(PChar(Name));// этого файла не должно существовать :)) Dest := Provider + 'Data Source=' + Name; if Password<>'' then begin Src := Src + ';Jet OLEDB:Database Password=' + Password; Dest := Dest + ';Jet OLEDB:Database Password=' + Password; end;
V:=CreateOleObject('jro.JetEngine'); try V.CompactDatabase(Src,Dest);// сжимаем finally V:=0; end; if DestDatabaseName='' then begin // т.к. выходная база не указана DeleteFile(PChar(DatabaseName)); //то удаляем не упакованную базу RenameFile(Name,DatabaseName); // и переименовываем упакованную базу end; except // выдаем сообщение об исключительной ситуации on E: Exception do ShowMessage(e.message); end; end;
не помню где эту процедурку взял - так что без копирайта