Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Access über ADOX Komprimieren (https://www.delphipraxis.net/75822-access-ueber-adox-komprimieren.html)

TeronG 25. Aug 2006 12:34

Datenbank: ACCESS • Version: 200 • Zugriff über: ADOX

Access über ADOX Komprimieren
 
Hi
Ich habe in einem meiner (älteren) Projekte mit hilfe dieser Anleitung eine Datenbank angelegt. Das Ding wird nur leider etwas Groß. Wenn ich die Datei mit Access (2003) öffne kann ich sie ja "Komprimieren & reparieren" und genau das wollte ich nun mit meinem Programm machen.

Nur leider habe ich es bis jetzt, selbst mit der Suche, nicht geschaft dies zu bewerkstelligen. :coder2: :wall:

Aber da könnt ihr mir doch bestimmt weiterhelfen oder? :)



Kleiner Auszug ...
Delphi-Quellcode:
sDataSource := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + vDatabaseFileName + ';';
ADOXCatalog.Create1(sDataSource);
cCreateAdresse := 'CREATE TABLE Messwerte(' + cCRLF
                  + 'ID counter,' + cCRLF
                  + 'Datum_Zeit Datetime,' + cCRLF
                  + 'Versuchsname String,'
                  ...
                  ...
  ADOQuery.SQL.Text := cCreateAdresse;                           // Zu erstellende Spalten übergeben
  ADOQuery.ExecSQL;                                              // Execute / Ausführen
Bin auch evtl. für neue/andere Wege eine *.mbd Datei zu erstellen offen ... aber n einfacher Compact Befehl (wie z.B. bei ABS-DB) währ mir natürlich lieber ^^

mikhal 25. Aug 2006 18:38

Re: Access über ADOX Komprimieren
 
Auszug aus einem alten Delphi-Projekt:

Delphi-Quellcode:
 
const
  bak_ext          = '.$$$';
  stAccessDB       = 'Provider=Microsoft.Jet.OLEDB.4.0;'+
                      'Data Source=%s';
var
  JetEngine: Variant;
  sTemp: String; // Dateiname für temporäre Datei
  sDBName: String; // Dateiname der Datenbank
  ...

begin
  ...

  sTemp := ChangeFileExt(sDbName, bak_ext);
  JetEngine := CreateOleObject('JRO.JetEngine');
  Application.ProcessMessages;
  Screen.Cursor := crSQLWait;
  try
    JetEngine.CompactDatabase(
        Format(stAccessDB, [sDBName]),
        Format(stAccessDB, [sTemp]));
    DeleteFile(sDBName);
    RenameFile(sTemp, sDBName);
    JetEngine := Unassigned;
    Screen.Cursor := crDefault;
    MessageDlg('Die Datenbank wurde erfolgreich gepackt!', mtInformation,
   [mbOk], 0);
  except
    //
  else
    Screen.Cursor := crDefault;
    JetEngine := Unassigned;
    MessageDlg(Format('FEHLRER!%sDie Datenbank wurde nicht gepackt!',
      [#13#10]), mtInformation,   [mbOk], 0);
  end;
  ...

end;
Grüße Mikhal

TeronG 28. Aug 2006 10:34

Re: Access über ADOX Komprimieren
 
HA! COOL! Klappt! /HUG :corky: :dp:


Das Ganze verhält sich zwar n bissl komisch, aber das liegt bestimmt amm Access/Jet.

Access 95 DB's mit 1000 Datensätzen werden kleiner, als Access 2000 DB's mit 1000 Datensätzen obwohl das Resultat in beiden Fällen eine Access 2000'er DB ist. :gruebel: :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz