Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Android findet meine DB nicht - [Firedac][Stan][Def]-254 (https://www.delphipraxis.net/202315-android-findet-meine-db-nicht-%5Bfiredac%5D%5Bstan%5D%5Bdef%5D-254-a.html)

Anila 19. Okt 2019 03:33

Android findet meine DB nicht - [Firedac][Stan][Def]-254
 
Hallo,

ich hoffe nochmals auf Eure Hilfe. Ich habe versucht, als erstes Projekt das hier
http://docwiki.appmethod.com/appmeth...OS_and_Android)
umzusetzen mit Delphi Tokyo. Mein Samsung Handy wird mittlerweile gefunden und ein simples "Hello World" habe ich immerhin auch geschafft.

Am obigen Projekt habe ich wenigen Änderungen vorgenommen:
- Meine Datenbank habe ich mit SQLiteStudio erstellt, sie hat aber die Extension *.sdb und heißt "Test.sdb". (Ich habe diese Shopping.s3db leider nicht).
- Sie liegt in einem anderen Verzeichnis als im obigen Tutorial. Das Verzeichnis habe ich in der Firedac Ini-Datei hinterlegt, der Firedac-Monitor findet sie auch.

Wenn ich für Windows kompiliere, sieht alles prima aus, die DB wird gefunden.

In BeforeConnect habe ich das CodeSchnipsel aus dem Tutorial eingebaut und den Datenbanknamen angepasst.

Im Deployment-Manager habe ich meine Datenbank hinzugefügt, der Remotepfad war "Assets\Internal\" - wie im Tutorial.

Ich gehe mal davon aus, dass "Deploy" die ganzen Dateien, also auch meine Datenbank auf das Handy kopiert hat?? Kann ich das irgendwie überprüfen? Ich bekomme weder beim Compilieren noch Deploy eine Fehlermeldung. Aber wenn ich dann F9 mache, kommt [Firedac][Stan][Def]-254 Definition [Test] is not found in [].

Irgendwie scheint meine Datenbank also gar nicht da zu sein, oder sie ist nicht da, wo sie erwartet wird, oder? Oder liegt es an der *.sdb Extension? Im SQLLite Studio habe ich Android aber ausgewählt.

Wenn ich einen Breakpoint in MainForm.Create setze oder in BeforeConnect, kommt obige Fehlermeldung bereits vorher.

Was ich auch ständig habe: Ich habe dann mal "Connected" auf false gesetzt - kompiliere - und bekomme dann ständig beim Compilieren den Fehler: "File not found: ....Main.fmx".
Die Datei ist da. Kann das ein Ressourcenproblem sein? Nach Neustart geht es dann wieder.

Viele Grüße
Anila

tggmx 19. Okt 2019 09:45

AW: Android findet meine DB nicht - [Firedac][Stan][Def]-254
 
Wenn die Datenbank nicht vorhanden ist kannst sie mit SQL auch zur Laufzeit erzeugen ansonsten eben die fehlenden Tabellen/Felder ergänzen.
Dieses Verfahren ist wesentlich besser geeignet wenn du später Updates einspielen möchtest.

Anila 19. Okt 2019 15:34

AW: Android findet meine DB nicht - [Firedac][Stan][Def]-254
 
Hallo,

meine Datenbank existiert auf dem Handy. Das habe ich abgefragt über FileExists(TPath.Combine(TPath.GetDocumentsPath, 'Test.sdb').

Debugging funktioniert jetzt auch und ich kann also sehen, dass in FDConnection1BeforeConnect der richtige Code aufgerufen wird:

FDConnection1.Params.Values['Database'] := TPath.Combine(TPath.GetDocumentsPath, 'Test.sdb');

Der Fehler wird irgendwo in FireDAC.Comp.Client.pas erzeugt - den Source habe ich allerdings nicht. Ich habe keine Idee mehr. Wo könnte ich noch schauen?

Viele Grüße
Anila

Anila 19. Okt 2019 19:46

AW: Android findet meine DB nicht - [Firedac][Stan][Def]-254
 
Hallo,

ich habe es nach vielem Herumprobieren endlich geschafft und möchte jetzt kurz beschreiben, was ich falsch gemacht hatte. Vielleicht gibt es ja außer mir noch weitere Leute, die an dem obigen Tutorial scheitern:

Ich hatte zunächst eine persistent Datenbank erstellt: Die Datei FDConnectionsDef.ini habe ich editiert und habe dort analog zu dem, was es dort schon zu SQLite gab, meine "Test" Datenbank aufgenommen.

FDConnection1.ConnectionDefName habe ich auf meinen DB-Alias "Test" gesetzt. Damit konnte ich in Windows problemlos verbinden.

Für Android musste ich zur Designzeit FDConnection1.ConnectionDefName und FDConnection1.ConnectionName leer lassen. Der Code in FDConnection1.BeforeConnect sieht jetzt so aus:

FDConnection1.Params.Values['Database'] := TPath.Combine(TPath.GetDocumentsPath, 'Test.sdb');
FDConnection1.Drivername :='SQLite';


Wenn ich den Drivername zur Designzeit gesetzt hatte und ansonsten ConnectionDefName und ConnectionName leer lasse, hatte ich auch eine Fehlermeldung bekommen, dass ich keine DriverID hätte. Daher setze ich den Drivername auch in BeforeConnect.

Ich hatte dann zunächst noch meinen ursprünglichen Fehler bekommen und festgestellt, dass ich in der FDQuery, die automatisch auf "Active=true" ging, ebenfalls die Verbindung über ConnectionDefName angesprochen hatte.

Offenbar muss man für Android eine temporäre Connection erstellen und das funktioniert jetzt.

Viele Grüße
Anila


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf