Ich arbeite mit
Access-Datenbanken und versuche fehlerhafte Datenbanken mit CompactDatabase zu reparieren. Zwar funktioniert dies zum Komprimieren einwandfrei, bei tatsächlich defekter *.mdb-Datei kommt aber die Fehlermeldung: Fehler bei der Authentifizierung.
Mit
Access selbst kann ich die beschädigte Datenbank aber reparieren.
Was macht
Access besser als die gleiche Routine in Delphi ?
Hier der Code für CompactDatabase aus
http://delphi.about.com/library/weekly/aa091801a.htm:
Delphi-Quellcode:
function DatabaseCompact(
const sdbName: WideString) : boolean;
var
JE : TJetEngine;
//Jet Engine
sdbTemp : WideString;
//TEMP database
sdbTempConn : WideString;
//Connection string
const
SProvider = '
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=';
begin
Result:=False;
sdbTemp := ExtractFileDir(sdbName) + '
TEMP' + ExtractFileName(sdbName);
sdbTempConn := SProvider + sdbtemp;
if FileExists(sdbTemp)
then DeleteFile(sdbTemp);
JE:= TJetEngine.Create(Application);
try
try
JE.CompactDatabase(SProvider + sdbName, sdbTempConn);
DeleteFile(sdbName);
RenameFile(sdbTemp, sdbName);
except
on E:
Exception do ShowMessage(E.
Message);
end;
finally
JE.FreeOnRelease;
Result:=True;
end;
end