Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#78

AW: Delphi 7 - BDE 32-Bit - Wie eine Datenbank und/oder Alias erstellen ?

  Alt 21. Sep 2023, 16:42
Das baut bei mir eine SQLITE Datenbankverbindung.
Kann sein dass die Datei erst beim Anlegen von Tabellen oder Beim Connect entsteht, aber sie ist immer da wenn ich sie brauche.
Es ist aus zwei Methoden zusammen kopierter Code und alle Variablen liegen bei mir im private Teil einer Klasse,
aber das soll ja auch einfach nur copy paste freundlich sein, deswegen liegen die variablen jetzt in irgendwo über dem Begin.
Evtl. must du 'FMX' durch 'VCL' ersetzten je nach Framework.
Delphi-Quellcode:
var
  fDBDir:String;
  FConnection: TFDConnection;
  fGUIxAsyncExecuteDialog: TFDGUIxAsyncExecuteDialog;
  fGUIxWaitCursor: TFDGUIxWaitCursor;
  fPhysSQLiteDriverLink: TFDPhysSQLiteDriverLink;
Begin
    FConnection := TFDConnection.Create(nil);
    FConnection.Name := 'LOCALCONNECTION';
    FConnection.Params.Clear;
    FConnection.Params.Values['DriverID'] := 'SQLite';

    fDBDir := TPath.Combine(TPath.GetHomePath, 'MEINEDATENVERZEICHNIS');
      if not TDirectory.Exists(fDBDir) then
        TDirectory.CreateDirectory(fDBDir);
  
    FConnection.Params.Values['Database'] := TPath.Combine(fDBDir,'MEINEDATENBANKDATEI.s3db');
    FConnection.Params.Values['Lockingmode'] := 'Normal';
    FConnection.Params.Values['Synchronous'] := 'Full'; // 'Normal'
    FConnection.Params.Values['SharedCache'] := 'False';
    FConnection.Params.Values['DateTimeFormat'] := 'String';

    FConnectionParams.Values['Password'] := 'MEINUNKNACKBARESPASSWORT';
    // Ohne Passwort fragt er nach einem Passwort! Auch wenn es leer ist.

    FConnection.UpdateOptions.LockWait := false; // false = sofort einen fehler melden wenn ein datensatz locked ist . true= warten bis lock vorbei ist.
    FConnection.UpdateOptions.LockMode := TFDLockMode.lmPessimistic;
    FConnection.TxOptions.Isolation := TFDTXisolation.xiRepeatableRead; //vorher TFDTXisolation.xiIsolation Es geht um die Isolation von Transaktionen gegen einander

    if Not Assigned(FPhysSQLiteDriverLink) then
      FPhysSQLiteDriverLink := TFDPhysSQLiteDriverLink.Create(self);
    FPhysSQLiteDriverLink.DriverID := 'SQLite';

    if Not Assigned(FGUIxWaitCursor) then
      FGUIxWaitCursor := TFDGUIxWaitCursor.Create(self);
    FGUIxWaitCursor.Provider := 'FMX';//oder 'VCL'

    if Not Assigned(FGUIxAsyncExecuteDialog) then
      FGUIxAsyncExecuteDialog := TFDGUIxAsyncExecuteDialog.Create(Application.MainForm);
    FGUIxAsyncExecuteDialog.Provider := 'FMX';// oder 'VCL'
end;
Damit kann man eine datenbank Verkleinern und beschleunigen... das ist ziemlich schnell und man kann es eigentlich bei jedem Start machen.
Delphi-Quellcode:
procedure TDbHealth.Defrag_And_SpeedUp;
var fFDSQLiteValidate_sweep, fFDSQLiteValidate_Analyze:TFDSQLiteValidate;
begin
    fFDSQLiteValidate_sweep := TFDSQLiteValidate.Create(nil);
    try
      fFDSQLiteValidate_sweep.Database := FDatabase;
      fFDSQLiteValidate_sweep.Password := FPassword;
      fFDSQLiteValidate_sweep.DriverLink := FPhysSQLiteDriverLink;
      fFDSQLiteValidate_sweep.MaxErrors := 10;
      fFDSQLiteValidate_sweep.Sweep;
    finally
      fFDSQLiteValidate_sweep.free;
    end;
    fFDSQLiteValidate_Analyze := TFDSQLiteValidate.Create(nil);
    try
      fFDSQLiteValidate_Analyze.Database := FDatabase;
      fFDSQLiteValidate_Analyze.Password := FPassword;
      fFDSQLiteValidate_Analyze.DriverLink := FPhysSQLiteDriverLink;
      fFDSQLiteValidate_Analyze.MaxErrors := 10;
      fFDSQLiteValidate_Analyze.Analyze;
    finally
      fFDSQLiteValidate_Analyze.free;
    end;
end;
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (21. Sep 2023 um 17:07 Uhr)
  Mit Zitat antworten Zitat