Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Database locked (https://www.delphipraxis.net/196001-database-locked.html)

sko1 13. Apr 2018 11:48

Datenbank: SQLite • Version: 3 • Zugriff über: TFDConnection

Database locked
 
Hallo,

aus Anwendung A auf dem Handy möchte ich aus einer Datenbank, die Anwendung B gehört, Werte auslesen.
Beide Anwendungen laufen, beide greifen beim Start über eine TFDConnection auf ihre Datenbank zu und trennen erst bei Programmende wieder.
Die Datenbankenb liegen für alle erreichbar im Handy unter öffentliche Documents.
Die TFDQueries, die dann in der DB arbeiten, werden bei bedarf erzeugt, verbunden und danach wieder getrennt.

Das ist der Istzustand.

Nun ist Anwendung A bereits gestartet und hat intern die TFDConnection mit ihrer DB verbunden. Anwendung B startet und versucht, Grunddaten, die Anwendung A bereits hat, aus deren Datenbank zu übernehmen (z.B. Mailzugangsdaten um die nicht doppelt eintragen zu müssen).

Hierbei kommt es nun zum Laufzeitfehler "database locked".
Beende ich Anwendung A und starte Anwendung B allein, kann sie in der DB von Anwendung A lesen.

Wo liegt mein Denkfehler im Ablauf und wie kann ich das besser lösen?

Ciao
Stefan

mkinzler 13. Apr 2018 11:49

AW: Database locked
 
Sobald eine Anwendung in eine SQlite-Datenbank schreibt wird diese exklusiv gesperrt.

sko1 13. Apr 2018 12:04

AW: Database locked
 
Seit wann denn das?

Aber egal, Anwendung A ist zwar gestartet und die TFDConnection verbunden, aber sie lungert ohne Benutzeraktivitäten so vor sich her, aber es ist keine TFDQuery vorhanden und damit auch mit Sicherheit keine Schreibzugriffe!

Trotzdem bekomme ich den locked - Fehler!

Ciao
Stefan

mjustin 13. Apr 2018 19:29

AW: Database locked
 
Sind beide Apps mit dem gleichen Zertifikat signiert? ("By signing multiple APKs with the same certificate and using signature-based permissions checks, your apps can share code and data in a secure manner.", https://developer.android.com/studio...considerations)

Ist ein Shared User in den Manifesten eingetragen? (In order to share data between apps (provided they are issued by the same publisher) you will need to specify a shared user id in the AndroidManifest.xml of both apps. - https://stackoverflow.com/a/7935032/80901)

sko1 14. Apr 2018 08:05

AW: Database locked
 
Ich muss zugeben, dass ich keine Ahnung habe, was die Zertifikate da beinhalten!

Beide Apps entstehen mit dem gleichen debug.keystore, welches ich auch auf Fest-PC und Notebook verwende für alle Apps.

Muss ich da Änderungen in meiner Vorgehensweise machen?

Ich befürchte, hier fehlen mit noch Grundlagenkenntnisse :-(

Ciao
Stefan

timog 15. Apr 2018 15:27

AW: Database locked
 
Hi Stefan,

stellt sich aus Sicht der Sqlite DB als mehrere gleichzeitige Zugriffe dar. Hast Du die Verbindungsparameter vom Wiki verwendet?

Sonst für den Connection Parameter mal folgendes probieren

Delphi-Quellcode:
SharedCache=False
LockingMode=Normal
Synchronous=Normal
und für die FDConnection dann
Delphi-Quellcode:
UpdateOptions.LockWait := True;
TxOptions.Isolation := xiSnapshot; // or xiSerializible.
Lt. Wiki soll man auch den BusyTimeout hochsetzen, falls länger anhaltende Aktionen anstehen.

Nachtrag: Je nach Anforderung kann ggf. auch über eine persistente FDMemTable mit LocalSQL als Alternative zu Sqlite nachgedacht werden oder halt InterBase ToGo.

VG

Timo

sko1 16. Apr 2018 06:07

AW: Database locked
 
Hallo Timo,

das sind doch mal prima konkrete Ansätze, vielen Dank dafür!

Mal sehen ob es was bringt...

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 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