Delphi – Kompakcija Access baze podataka (II deo)

Sledeฤ‡i programski kod (obraฤ‘ivaฤ dogaฤ‘aja OnClick dugmeta btnKompakt) jeste primer koriลกฤ‡enja CompactDatabase metode:


procedure TForm1.btnKompaktClick(Sender: TObject);
var
dbIzvor : WideString;
dbOdred : WideString;
const
SProvider = ‘Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=’;
begin
dbIzvor := SProvider + edIzvor.Text;
dbOdred := SProvider + edCilj.Text;

if FileExists(edCilj.Text) then
DeleteFile(edCilj.Text);

JE.CompactDatabase(dbIzvor, dbOdred);
end;

Zapazite da gornji kod pretpostavlja koriลกฤ‡enje Access 2000 baze podataka, jer je Microsoft Jet OLEDB 4.0 podrazumevani objektni model za pristup podacima Access-a 2000.

U najveฤ‡em broju sluฤajeva ลพeleฤ‡ete da zadrลพite stari naziv baze podataka nakon procesa kompaktovanja. Poลกto sadrลพaj polja „edIzvor“ i „edCilj“ ne moลพe biti isti, uz pomoฤ‡ programskog koda trebalo bi da kompaktovanu bazu zamenimo originalnom. To ฤ‡emo uraditi u sledeฤ‡oj funkciji:


function KompakcijaBaze
(const sdbName: WideString) : boolean;
var
JE : TJetEngine;
sdbTemp : WideString;
sdbTempConn : WideString;
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;

Funkcija „KompakcijaBaze“ prihvata string parametar sa punim nazivom baze podataka koju ลพelite da kompaktujete. A zatim vraฤ‡a True ukoliko je kompakcija uspeลกna, a u suprotnom False. sdbName se kompaktuje u sdbTemp, zatim se briลกe sdbName i vrลกi preimenovanje sdbTemp u sdbName. Ovu funkciju moลพemo pozvati na sledeฤ‡i naฤin:

KompakcijaBaze(„C:Accessproba.mdb“);

Funkcija je idelana za upotrebu u svim Delphi ADO aplikacijama, a moลพe biti napisana i kao konzolna aplikacija koja ฤ‡e imati samo jedan komandni parametar (ili viลกe), a koja ne zahteva nikakav GUI (grafiฤki interfejs).

Pratite Krstaricu na www.krstarica.com