Tehnika Krstarice > Programiranje > Delphi - Kompakcija Access baze podataka (II deo)

Delphi - Kompakcija Access baze podataka (II deo)

03.11.2001.

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:\Access\proba.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).

Preporučite ovaj članak

Članak još uvek nije ocenjen.