![]() |
SQLite iOS <> SQLite Android!
Hallo Zusammen!
Hab mal wieder was gefunden... Der gleiche Source für eine SQLite Datenbank einmal unter iOS.. Läuft... Unter Android... Exception "Table nicht gefunden" und scheinbar Unterschiede in der Syntax.. Hab noch nicht genau rausgefunden was alles nicht geht, aber ich bin dran. Kennt Ihr das auch? Programmiert Überhaupt außer DM für Android? Grüsse Mavarik |
AW: SQLite iOS <> SQLite Android!
Wird die Datenbank automatisch erstellt oder mit Deployed ? Stimmen die Pfade zur Datenbank unter Android, denn hier sind diese etwas anders gelagert als bei iOS ? Wie sollen wir da jetzt weiterhelfen ?
|
AW: SQLite iOS <> SQLite Android!
In der Bereitstellung musste auf das richtige Verzeichnis bei Android achten.
Ich habe nun 4 Apps mit XE5 Online, es man die schwächen von XE5 kennt, kommt man damit auch klar. Als Anfänger auf dem Gebiet wird man wohl seine Probleme mit Kleinigkeiten Bugs haben, die aber eine große Wirkung haben :pale: |
AW: SQLite iOS <> SQLite Android!
Diese halben Rant-Postings ohne substantiellen Inhalt sind langsam fade. Nicht nur, dass es keinen guten Eindruck macht - es hilft auch niemandem weiter. Nichtmals dir.
Code? Szenarien? QC-Einträge? Anwendungsbeispiele? Konkrete Fragen? Lösungswünsche? Einfach nur "Kotz, X geht mal wieder nicht" mag deinem Magen ein klein wenig helfen, das war es aber halt leider auch. |
AW: SQLite iOS <> SQLite Android!
Zitat:
Um der Ursache auf den Grund zu gehen, brauchen wir nähere Infos. |
AW: SQLite iOS <> SQLite Android!
Zitat:
"Hab noch nicht genau rausgefunden was alles nicht geht, aber ich bin dran." Ich habe keine Ahnung woran es liegt oder auch nur im geringsten ne Idee wo ich momentan suchen soll. Da mein Debugger zur rumspinnt unter Andorid und mitten im Firemonkey an irgend welchen undefinierten Stellen anhält. (Siehe anderer Thread) Abgesehen davon, dass scheinbar bei jedem neuen Compile der Datenbereich der App weg ist. Auch daran suche ich noch... Ich werde weiter berichten... Die Frage "?" war: "Kennt Ihr das auch? <- Programmiert Überhaupt außer DM für Android? <-" Mavarik |
AW: SQLite iOS <> SQLite Android!
Zitat:
Mavarik |
AW: SQLite iOS <> SQLite Android!
Zitat:
|
AW: SQLite iOS <> SQLite Android!
Zitat:
Bei iOS bleibt aber die Verzeichniss-Struktur erhalten und alle Files die die "letzte" Version der App erzeugt hat. (egal, ist nur nervig für jeden Tests die Datenbanken (6Min) neu zu erzeugen) Aber es ist bei mir so, das ich aus einer Datei die ich per TCP/IP auf's Device geschoben habe die SQLite Datenbank erzeuge. (ohne Fehlermeldung) Wenn ich dann die Tabelle sofort danach nochmal auf machen will ist die weg. Mavarik |
AW: SQLite iOS <> SQLite Android!
Zitat:
Ich bin von Prinzip zufrieden und weis wie ich die Probleme die bei mir erscheinen umgehen kann, da brauche ich keinen QC Beitrag! Jetzt will ste wissen was ich meine?, Falls ja: Ich habe bei mir ein Problem mit der AndroidManifest.xml, die ignoriert meine Einstellungen die ich in der IDE mache, fügt auch die falsche Mindestversion ein. Ist aber nicht schlimm, wenn man weis wie man das umgehen kann! Ein Anfänger kann hier schon mal verzweifeln denke ich, aber als Appleentwickler ist das ein gewohnter Zustand! |
AW: SQLite iOS <> SQLite Android!
Zitat:
Delphi-Quellcode:
If Mavarik.Will(DampfAblassen) Then
Mavarik.SollPostenIn(Klatsch AND Tratsch) Else If Mavarik.Hat(BeispielCode) or Mavarik.Hat(EinfachMehrInfos) Then Mavarik.SollPosten(WoAuchImmer) Else Mavarik.SollteEs(Machen.WieNuhrEmpfiehlt); |
AW: SQLite iOS <> SQLite Android!
@Frank:
Du schreibst, dass Du Unterschiede in der Syntax vermutest. Ich interpretiere dies als "Unterschiede in der SQL-Syntax". Das würde mich sehr überraschen, aber vielleicht kannst Du hier näher darauf eingehen. |
AW: SQLite iOS <> SQLite Android!
Zitat:
Android hat eine andere Verzeichnisstruktur als iOS, das fängt bei der Bereitstellung an. Dort ist das Problem zu finden. Das ich hier auch schon viel Lehrgeld gezahlt habe mache ich bei jeder neuen Plattform erstmal eine Testfunktion, die mir die Verzeichnisstrukutr ausliest und mir diese anzeigt, damit man nicht an Kleinigkeiten scheitert. |
AW: SQLite iOS <> SQLite Android!
@arnof: Nein, ich meinte Mavarik. Du hast es ja sogar geschafft, auf einen reinen Meckerbeitrag eine relevante Fachdiskussion zu starten! :thumb:
|
AW: SQLite iOS <> SQLite Android!
Zitat:
Ich denke doch, dass dies ein Forum ist um Erfahrungen auszutauschen, oder? Mir ist nicht bekannt, dass Daniel hier andere Richtlinien eingeführt hat. Es geht mir darum während der Entwicklung von Apps, die auftretenden Probleme zu publizieren - in der Hoffnung - ,dass andere Entwickler von den Infos profitieren oder ggf. ne Lösung haben nach dem Motto : "Ja kenne ich, must Du xy machen" Entschuldigung, dass ich Deinen scheinbar höheren Anspruch mit meinen Postings nicht genüge. @Mavarik.Will(DampfAblassen) Natürlich nervt es, dass EMBT alle 2 Minuten irgendwo ein Blogpost, ein FB-Post oder ne eMail schickt wie toll XE5 ist und wie einfach es ist den gleichen Code auf alle Plattformen zu bringen ist. Meine App hat mehr IFDEF als früher wo ich noch den gleichen Sourcecode für unser DOS & Windows Programm hatte. Fazit: Immer wenn etwas auf Android nicht läuft was auf iOS geht, gibt es einen neuen Thread. Und zwar dann, wenn das Problem aufgetreten ist um zu erfahren ob das andere schon kennen. Wenn ich mehr Info habe oder eine Lösung poste ich die ja auch. Soviel dazu... |
AW: SQLite iOS <> SQLite Android!
Zitat:
![]() ![]() ![]() Wenn ich dann das glück habe, dass der Debugger mal den Haltepunkt nicht ignoriert und der Stepper auch das macht was er soll (klapp auch nicht immer) lande ich irgendwo im System (genau Stelle) hab ich noch nicht und bekomme die Meldung. Tabelle nicht gefunden. Folgendes hab ich getestet. - Memo1 SavetoFile Memo2 LoadfromFile (Funktioniert! Ich habe also schreib lese rechte auf das Verzeichniss) - Andere Pfade (TPath.GetDocumentsPath & GetHomePath + PathDelim + 'Documents' + PathDelim; (ggf. Dir erzeugt und getestet ob Dir da!) - Ich habe(vermutet) es könnte auch an meiner TableExist Routine liegen.
Delphi-Quellcode:
- Vielleicht reagiert Android anders wenn eine Tabelle noch offen ist oder die Connection geshared wird.
SQ.SQL.Text := 'SELECT CASE WHEN tbl_name = "'+FTableName+'" THEN 1 ELSE 0 END FROM sqlite_master WHERE tbl_name = "'+FTableName+'" AND type = "table";';
SQ.Active := true; Result := boolean(SQ.Fields[0].AsString = '1'); - Oder die Freigabe (ARC)?!?! Keinen Plan. Mehr konnte ich noch nicht testen da ich eine DeadLine bis gestern 20:00 Uhr für die Genehmigung der Software hatte. Daher musste ich mich dann auf die letzten Kleinigkeiten unter iOS kümmern. Aber ich werde mal ne keine Test-App mit kleineren Testdaten machen um das Problem einzukreisen, da scheinbar keiner außer mir diese Problem hat. Grüsse Mavarik |
AW: SQLite iOS <> SQLite Android!
Zitat:
![]() ...habe die SQLite Datenbank erzeuge. (inkl. der Tabellen) (ohne Fehlermeldung) Wenn ich dann die Tabelle sofort danach nochmal auf machen will ist die weg. Mavarik |
AW: SQLite iOS <> SQLite Android!
Liste der Anhänge anzeigen (Anzahl: 1)
Zur Geschwindigkeit unter Android und XE5, das läuft nicht schlecht ich habe heute morgen wiedermal an einer schönen App gearbeitet und gefühlte 100 mal gestartet direkt auf dem Gerät. Das dauert keine 15 sec bis die App läuft.
Ich arbeite aber NICHT im Debugmodus, sondern fast immer mit Release UND Anwendungs-Store mit Zertifikatzuweisung. Infos gebe ich entweder in Listboxen aus oder in Logdateien aus, auf die kann man unter Android direkt zugreifen. |
AW: SQLite iOS <> SQLite Android!
Noch mal eine Idee zu deinem Geschwindigkeitsproblem: starte mal nicht direkt die app aufs Gerät, sondern erzeuge diese einfach nur, dann findest Du die apk unter project/android/release(oder debug)/projekt/bin/
Geht das schneller ? Die apk kannste dann manuell aufs Gerät schieben und installieren. Vielleicht kommst du beim manuellen Ablauf so eine Idee wo es hängt. |
AW: SQLite iOS <> SQLite Android!
Zitat:
Hab 6MB SQLite Datenbank für eine nackte Installation. Die "fehlende" Geschwindigkeit zeigt sich schon beim Scrollen von eine ListBox mit 10 Einträgen á 3 Images 8 Label. Hatte ich ME, DM, DW schon am Stammtisch auf den letzten Delphi Tagen gezeigt. (Die wollten das auch nicht glauben) ME: Warte auf Update 1. Die Animation für das Umlegen eines Switches dauert 3 Sekunden. Vielleicht muss ich mal ein Video davon machen... Aber wie gesagt. ![]() |
AW: SQLite iOS <> SQLite Android!
Also...
![]() Dann sollte ja gemäß der Anleitung:
Delphi-Quellcode:
der richtige Path sein.
procedure TForm1.SQLConnectionSQLiteBeforeConnect(Sender: TObject);
begin {$IF DEFINED(iOS) or DEFINED(ANDROID)} ShoppingList.Params.Values['Database'] := TPath.Combine(TPath.GetDocumentsPath, 'shoplist.s3db'); {$ENDIF} end; Das mag funktionieren, wenn man die Datei da per deploy "rüberschiebt", aber ein
Delphi-Quellcode:
Sollte doch an dieser Stelle die Datenbank erzeuge. (So jedenfalls funktioniert es unter iOS)
procedure TForm40.SQLConnection1BeforeConnect(Sender: TObject);
begin SQLConnection.Params.Values['Database'] := TPath.Combine(TPath.GetDocumentsPath, 'TestBase.s3db'); SQLConnection.Params.Values['ColumnMetadataSupported'] := 'False'; SQLConnection.Params.Values['FailIfMissing'] := 'False'; end; Ich denke, dass die Systemtreiber für dieses Verzeichniss keine Create-Rechte habe, den nach einem Aufruf liegt da keine Datenbank. Oder hat jemand eine bessere Idee? Mavarik |
AW: SQLite iOS <> SQLite Android!
Bessere Idee? Ja. :-)
Nach unserem Skype-Gespräch habe ich Dein Demo mit FireDAC nachgebaut und dort stimmen Theorie und Praxis auf Anhieb überein. |
AW: SQLite iOS <> SQLite Android!
Zitat:
Data.DbxSqlite.pas
Delphi-Quellcode:
Wer findet den Fehler, warum es auf Android nicht funktioniert?
var
DatabaseName: string; ErrorCode: Integer; begin if ConnectionProperties.Values['ColumnMetaDataSupported'] = '' then {$IFDEF MSWINDOWS} ConnectionProperties.Values['ColumnMetaDataSupported'] := 'True'; {$ENDIF} {$IFDEF MACOS} ConnectionProperties.Values['ColumnMetaDataSupported'] := 'False'; {$ENDIF} DatabaseName := FConnectionProperties.Values[TDBXPropertyNames.Database]; try if string.Compare(FConnectionProperties.Values['FailIfMissing'], 'True', True) = 0 then ErrorCode := sqlite3_open_v2(MarshaledAString(Utf8Encode(DatabaseName)), FConnectionHandle, SQLITE_OPEN_READWRITE, nil) else ErrorCode := sqlite3_open16(PChar(DatabaseName), FConnectionHandle); except raise Exception.Create(SLibraryNotFound); end; Für Andoid steht da:
Delphi-Quellcode:
Was mir sagt NIEMAND, in Worten NIEMAND hat es bisher versucht eine SQLite Datenbank onthefly auf einem Android Device zu erzeugen... Erschreckend!
var
DatabaseName: string; ErrorCode: Integer; begin if ConnectionProperties.Values['ColumnMetaDataSupported'] = '' then DatabaseName := FConnectionProperties.Values[TDBXPropertyNames.Database]; try if string.Compare(FConnectionProperties.Values['FailIfMissing'], 'True', True) = 0 then ErrorCode := sqlite3_open_v2(MarshaledAString(Utf8Encode(DatabaseName)), FConnectionHandle, SQLITE_OPEN_READWRITE, nil) else ErrorCode := sqlite3_open16(PChar(DatabaseName), FConnectionHandle); except raise Exception.Create(SLibraryNotFound); end; Bzw. Hatte zum Glück immer 'ColumnMetaDataSupported'] = '' gesetzt! Mavarik |
AW: SQLite iOS <> SQLite Android!
Weil bei Android der Code so compiliert wird
Delphi-Quellcode:
statt so (ob das besser ist?)
if ConnectionProperties.Values['ColumnMetaDataSupported'] = '' then
DatabaseName := FConnectionProperties.Values[TDBXPropertyNames.Database];
Delphi-Quellcode:
if ConnectionProperties.Values['ColumnMetaDataSupported'] = '' then
begin end; DatabaseName := FConnectionProperties.Values[TDBXPropertyNames.Database]; |
AW: SQLite iOS <> SQLite Android!
Zitat:
Tja wie ist es denn bei Android, wahrscheinlich wie bei iOS oder? Keinen Plan... Mavarik |
AW: SQLite iOS <> SQLite Android!
man kann nie genug begins haben, aber dran denken alles braucht ein end (nur die Wurst hat zwei: end to end)
|
AW: SQLite iOS <> SQLite Android!
Zitat:
|
AW: SQLite iOS <> SQLite Android!
Zitat:
|
AW: SQLite iOS <> SQLite Android!
[QUOTE=Mavarik;1241187]
Zitat:
Weist Du auch, wenn man die Download zahlen bei den neuen nativen Androidcomponenten siehst (die wurden auch geblogt, auch hier mal war der Link zu sehen), da waren heute nachmittag nur 140 downloads. Ich war da schon mindesten 2 mal dabei. Ich würde behaupten JEDER der ernsthaft hier was für Android macht mit XE5, hat die sich sicherlich schon mal angeschaut, ob man die vielleicht benutzen, oder was abschauen kann! Das ist Weltweit, ja da weiste bescheid! |
AW: SQLite iOS <> SQLite Android!
Hallo zusammen,
ich bin neu im Thema Mobile-Devices unter XE5 und habe statt iOS erst einmal mit meinem Galaxy S4 unter Android 4.2.2 angefangen meine ersten Erfahrungen zu sammeln. Genau dieses o.a. Problem hatte ich auch und das Fixing der Data.DBXSqlite war die Lösung. Ich habe ewig die Ursache gesucht und den Fehler nur bei mir Code vermutet. Ich wollte einfach mal danke sagen, an all diejenigen,die hier im Forum zu Lösungen beitragen. :-D Gruß Axel |
AW: SQLite iOS <> SQLite Android!
Zitat:
|
AW: SQLite iOS <> SQLite Android!
Hallo,
habe hier ein ähnliches Problem wie weiter oben beschrieben. Mit dem Code erstelle ich eine SQLite Datenbank:
Delphi-Quellcode:
Wie Ihr sehen könnt, frage ich am Ende des Blockes ab, ob die Datei erstellt wurde. Sie wird erstellt, zumindest wird mir das mit FileExists angezeigt. Warum aber sehe ich die Datei nicht mit einem Dateiexplorer wie z.B. Astro-File Manager oder gar mit aSQLiteManager?
DataPfad:= TPath.Combine(TPath.GetDocumentsPath, 'Test.db');
if not TFile.Exists(DataPfad) then Begin Try // Datenbank erstellen SQLConnection.connected:=False; SQLConnection.Params.Values['Database'] := DataPfad; Startup.SQLConnection.Params.Values['FailIfMissing'] := 'False'; Startup.SQLConnection.Connected:=True; except on E: EDatabaseError Do ShowMessage(E.Message); End; Try SQLBefehl:='CREATE TABLE Kontakte(EintragID INTEGER PRIMARY KEY AUTOINCREMENT, TelNummer VARCHAR(50) NOT NULL, KontaktName VARCHAR(100));'; DtaZeilen := SQLConnection.ExecuteDirect(SQLBefehl); except on E: Exception Do Showmessage(E.ClassName + ' / ' + E.Message); End; SQLConnection.Connected:=False; if not FileExists(DataPfad) then ShowMessage('Datenbank nicht erstellt'); end; Wäre toll wenn mir jemand einen Hinweis geben könnte was ich da falsch mache |
AW: SQLite iOS <> SQLite Android!
Zitat:
|
AW: SQLite iOS <> SQLite Android!
Stimmt, grad auch entdeckt. Wenn ich den Pfad mit GetSharedDocuments auslese dann funktionierts.
|
AW: SQLite iOS <> SQLite Android!
Nächstes Problem.
Ich schaffe es Daten in die SQLite Datenbank einzutragen. Nun funktioniert das Auslesen nicht
Delphi-Quellcode:
Verstehe nicht warum. Wenn ich die Datenbank mit der App "SQLite Magic" öffne, dann wird alles angezeigt was ich in die Tabelle "Kontakte" eingetragen habe. Aber der obige Quellcode liefert mir nicht einen Datensatz.
Try
FSQLCommandText := 'SELECT * FROM Kontakte;'; SQLConnection.Execute(FSQLCommandText, NIL, FSQLDataSet); FSQLDataSet.First; While NOT FSQLDataSet.EOF Do Begin sStr := ''; For i := 0 To FSQLDataSet.FieldCount - 1 Do sStr := sStr + ' ' + FSQLDataSet.Fields[i].AsString; ShowMessage(sStr); FSQLDataSet.Next; End; Except On E: EDatabaseError Do ShowMessage(E.Message); End; Habe die SQL-Abfrage mittlerweile gefühlte 100x neu geschrieben aber ohne Erfolg. Gibt es vielleicht in XE6 einen Bug? |
AW: SQLite iOS <> SQLite Android!
Solltest du nicht besser einen neuen Thread erstellen?
BTW: Dein
Delphi-Quellcode:
kannst du ersatzlos streichen und du bekommst mehr Informationen bei einer Exception (die auch sehr hilfreich wären, wenn du uns diese mitteilst).
try except
PS Manchmal macht es sich auch gut, wenn man einen Blick in die Dokumentation wirft. Meistens sieht man dann klarer. Ein guter Anfang wäre ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz