Einzelnen Beitrag anzeigen

skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#1

Fehlermeldung "database table is locked"

  Alt 14. Dez 2018, 08:10
Datenbank: SQlite • Version: ? • Zugriff über: TFDQuery / TFDConnection
Hallo,

in letzer Zeit häufen sich die Meldungen von Anwendern einer Android-App über Laufzeitfehler
"database table is locked"...

Wo könnte man ansetzen bzw. was könnte die Ursache sein?
Bei mir ist das leider noch nie aufgetreten, auf 3 Handys sowie einem Tablet nicht!

Meine generelle Vorgehensweise:
- zu Programmstart wird eine Connection erzeugt
- für jeden Datenbankzugriff (nicht für jedes einzelne Datensatz lesen!) wird eine Query erzeugt
- die Connection verbunden
- der Query die Connection zugewiesen
- die Query geöffnet
- in der Tabelle gearbeitet
- die Query geschlossen
- die Query zerstört
- die Connection disconnected
- zu Programmende wird die Connection zerstört

Ist daran etwas auszusetzen / falsch?

Grund die Connection immer wieder zu verbinden bzw. zu trennen ist, dass die Datenbankdatei erst aktualisiert wird, wenn die Connection disconnected wird!
Man kann 1000 neue Datensätze per Query anlegen und posten, die DB-Datei vergrößert sich erst mit dem Disconnect der Connection, irgendwo wird sonst alles erst zwischengespeichert.
Ich brauche aber stets den aktuellen Datenbestand in einer Cloud!

Edit:
die Connection wird wie folgt eingestellt:
Delphi-Quellcode:
      Conn := TFDConnection.Create(Nil);
      Conn.DriverName := 'SQLite';
      Conn.LoginPrompt := false;
      Conn.Params.Database := dbPath;
      Conn.Params.Add('LockingMode=Normal');
      Conn.Params.Values['Encrypt'] := 'aes-128';
      Conn.Params.Password := GetKey;
      Conn.UpdateOptions.LockWait := True;
      Conn.TxOptions.Isolation := xiSnapshot; // was bewirkt das?

Ciao
Stefan

Geändert von skoschke (14. Dez 2018 um 08:26 Uhr)
  Mit Zitat antworten Zitat