Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Android FireDac SQLite: "attempt to write a read only database" (https://www.delphipraxis.net/189525-android-firedac-sqlite-attempt-write-read-only-database.html)

luisk 21. Jun 2016 11:12

Datenbank: SQLite • Version: 8 • Zugriff über: FireDac

Android FireDac SQLite: "attempt to write a read only database"
 
Hallo,
ich bekomme unter Android FireDac SQLite
die Meldung "attempt to write a read only database" bei dem SQL-Befehl "Create Table ..."

Über diese Parameter öffne ich die Connection:
Delphi-Quellcode:
   Connection:=TFDConnection.Create(nil);
           Connection.Params.Add('DriverID=SQLite');
           // l_o_TFDConnection.Params.Add('User_Name=xyz');
           // l_o_TFDConnection.Params.Add('Password=demotest');
           Connection.Params.Add('Database=' + s_DB );
                                             //'c:\...\xx.SQLite '
           Connection.Params.Add('OpenMode=CreateUTF8');
           Connection.Params.Add('DateTimeFormat=String');
           Connection.LoginPrompt := false;
           Connection.Open();
hier finde ich folgendes: zu 'OpenMode=CreateUTF8'
http://docwiki.embarcadero.com/RADSt...anken_(FireDAC)

OpenMode:
CreateUTF8 – Öffnen einer Datenbank zum Lesen oder Schreiben. Wenn die Datenbank nicht vorhanden ist, wird sie mit der Standardcodierung UTF8 (dem Standardwert für Delphi-Versionen vor 2009) erstellt.

Unter Win10 läuft der SQL Befehl "Create Table ....." an dieser Stelle :(

Sir Rufo 21. Jun 2016 11:37

AW: Android FireDac SQLite: "attempt to write a read only database"
 
Was für ein Pfad ist in
Delphi-Quellcode:
s_DB
eingetragen?

(Doch bitte kein
Delphi-Quellcode:
'C:\…'
auf Android, oder etwa doch?)

luisk 21. Jun 2016 12:07

AW: Android FireDac SQLite: "attempt to write a read only database"
 
Hallo,
nein kein "c:\"
ich kann die Datenbank öffnen
Delphi-Quellcode:
Connection.Open();
und über "Select .. " auch die Tabellen lesen.
Dabei musste ich beim Öffnen der Datenbank die Groß/Kleinschreibung beachten

Vor dem Schreiben kann ich über den Connector ja auch die DB öffnen. Wäre die Datei nicht vorhanden, käme
hier schon einen Fehlermeldung.
Hier kommt der Fehler:
Delphi-Quellcode:
Connection.ExecSQL(s_SQL);

Uwe Raabe 21. Jun 2016 12:19

AW: Android FireDac SQLite: "attempt to write a read only database"
 
Aber wo liegt denn die Datei nun unter Android genau?

luisk 21. Jun 2016 12:25

AW: Android FireDac SQLite: "attempt to write a read only database"
 
"sdcard/Documents/Tablet_Daten/Server_Interface/von_Server/DBs_SQLite/"
im Debugger sieht der Pfad so aus:
"storage/emulated/0/Documents/Tablet_Daten/Server_Interface/von_Server/DBs_SQLite/"

den Pfad hole ich mir über: Androidapi.IOUtils.GetSharedDocumentsDir ;
Alternative: Androidapi.IOUtils.GetExternalDocumentsDir;

es sieht so aus, als hätte ich hier keine Schreibrechte.
Allerdings habe ich die Datei.SQLite über http in einer Zip-Datei von einem Apache-Server geholt,
die Unterverzeichnisse über TDirectory erstellt und über TZip ausgepackt.
Dabei hatte ich ja auch die Schreibrechte.
Wie schon erwähnt: Lesen über "Select.." geht

luisk 21. Jun 2016 12:57

AW: Android FireDac SQLite: "attempt to write a read only database"
 
Hier hab ich etwas dazu gefunden
http://stackoverflow.com/questions/1...-database-mode
If using Android.
Make sure you have added the permission to write to your EXTERNAL_STORAGE to your AndroidManifest.xml.
Add this line to your AndroidManifest.xml file above and outside your <application> tag.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_ST ORAGE"/>
This will allow your application to write to the sdcard. This will help if your EXTERNAL_STORAGE is where you have stored your database on the device.

Wie komme ich an dieses AndroidManifest.xml.

Uwe Raabe 21. Jun 2016 13:09

AW: Android FireDac SQLite: "attempt to write a read only database"
 
Zitat:

Zitat von luisk (Beitrag 1340720)
Wie komme ich an dieses AndroidManifest.xml.

Die wird aus der AndroidManifest.template.xml erzeugt. Diese wiederum sollte in deinem Projektverzeichnis liegen.

Uwe Raabe 21. Jun 2016 13:13

AW: Android FireDac SQLite: "attempt to write a read only database"
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Uwe Raabe (Beitrag 1340721)
Zitat:

Zitat von luisk (Beitrag 1340720)
Wie komme ich an dieses AndroidManifest.xml.

Die wird aus der AndroidManifest.template.xml erzeugt. Diese wiederum sollte in deinem Projektverzeichnis liegen.

Wobei das dann wohl doch der falsche Ort ist. Die Berechtigung kannst du doch direkt in den Projekt-Optionen einstellen:

luisk 21. Jun 2016 13:29

AW: Android FireDac SQLite: "attempt to write a read only database"
 
die beiden Einstellungen stehen bei meinem Projekt schon auf true :(

luisk 21. Jun 2016 13:40

AW: Android FireDac SQLite: "attempt to write a read only database"
 
http://stackoverflow.com/questions/1...-database-mode

Navigate to /system/etc/permissions/
abe rich finde kein /system/etc/ mit dem ES Datei Explorer


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:10 Uhr.
Seite 1 von 2  1 2      

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