Da Access wie auch die meisten anderen Datenbanken im Laufe der Zeit so einiges an Müll ansammeln, der im Betrieb die Datenbank aber heftig aufbläht gibt es in MIcrosoft Access die Funktion Komprimieren und Reparieren, da wir aber das allerdings nicht händisch ausführen wollen macht es Sinn dieses zu automatisieren! Natürlich steht uns diese Funktion auch wieder unter Windows zur Verfügung, wir müssen nur mal wieder wissen wie sie über Free Pascal anzusprechen ist.
Das folgende Beispiel funktioniert so, übergibt man an in der Kommandozeile den Namen der MDB z.B. test.mdb wird diese falls sie im lokalen Ordner existiert komprimiert.
Dafür braucht wir den Import der Type Library "Microsoft Jet Replication Objects 2.6 Library" und das Package LazActiveX.
Import JRO : Microsoft Jet Replication Objects 2.6 Library C:\Program Files (x86)\Common Files\System\ado\msjro.dll jro 2 6 tlb.pas (13,37 kByte) 30.12.2018 21:29
program CompactAccessMDB;
{$APPTYPE CONSOLE}
{$mode objfpc}{$H+}
uses
SysUtils,
Interfaces, // used packages: LazActiveX
JRO_2_6_TLB; // Microsoft Jet Replication Objects 2.6 Library
procedure CompactMDB(const Filename: string);
var
jro: JetEngine;
FilenameNeu: string;
begin
try
FilenameNeu := ChangeFileExt(Filename, '~.mdb');
jro := CoJetEngine.Create();
jro.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Filename + ';',
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + FilenameNeu + ';');
if FileExists(FilenameNeu) then
begin
DeleteFile(PChar(Filename));
RenameFile(FilenameNeu, Filename);
end;
except
DeleteFile(PChar(filenameNeu));
end;
jro := nil;
end;
begin
CompactMDB(ParamStr(1));
end.