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