Hallo an alle.
Da ich selbst schon vergeblich nach der Möglichkeit eine
Access-Datenbank zu komprimieren gesucht habe, und zufälligerweise jetzt einen Weg gefunden habe, möchte ich ihn gern an andere Suchende weitergeben! Ich hoffe das es dem ein oder anderen weiterhilft
Hier nun der Source:
Delphi-Quellcode:
const
SConnectionString = '
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
+'
Jet OLEDB:Database Password=%s;';
//erzeugt einen relativen Temp-Pfad zum Zwischenspeichern
function GetTempPathFileName():
string;
var
SPath,SFile:
array [0..254]
of char;
begin
GetTempPath(254,SPath);
GetTempFileName(SPath,'
~SM',0,SFile);
result:=SFile;
DeleteFile(result);
end;
//Funktion zum Komprimieren der DB inkl. Passwort
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;
//Aufruf
CompactDatabase(ExtractFilePath(Application.ExeName)+'
Datenbank.mdb', '
Passwort');
Ich hoffe es hilft irgendjemand weiter...
Viele Grüße, delphipitti
[edit=Chakotay1308]Code lesbar gemacht. Mfg, Chakotay1308[/edit]