Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   iOS SQLite iOS <> SQLite Android! (https://www.delphipraxis.net/177935-sqlite-ios-sqlite-android.html)

Mavarik 6. Dez 2013 14:57

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

RWarnecke 6. Dez 2013 16:12

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 ?

arnof 6. Dez 2013 16:40

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:

Medium 7. Dez 2013 01:27

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.

Daniel 7. Dez 2013 04:16

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von Medium (Beitrag 1238844)
Einfach nur "Kotz, X geht mal wieder nicht" mag deinem Magen ein klein wenig helfen, das war es aber halt leider auch.

:thumb:

Um der Ursache auf den Grund zu gehen, brauchen wir nähere Infos.

Mavarik 7. Dez 2013 13:25

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von Daniel (Beitrag 1238851)
Zitat:

Zitat von Medium (Beitrag 1238844)
Einfach nur "Kotz, X geht mal wieder nicht" mag deinem Magen ein klein wenig helfen, das war es aber halt leider auch.

:thumb:

Um der Ursache auf den Grund zu gehen, brauchen wir nähere Infos.

Ihr seit so witzig...

"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

Mavarik 7. Dez 2013 13:31

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von arnof (Beitrag 1238817)
In der Bereitstellung musste auf das richtige Verzeichnis bei Android achten.

Ich erzeuge alles on the fly. Aber das mit dem Verzeichnis könnte ein Ansatz sein.

Mavarik

Lemmy 7. Dez 2013 14:02

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von Mavarik (Beitrag 1238862)
Abgesehen davon, dass scheinbar bei jedem neuen Compile der Datenbereich der App weg ist. Auch daran suche ich noch...

hm.. wenn ich bei der EKON richtig aufgepasst habe, dann wird doch die Anwendung auf dem Device bei jedem Compile deinstalliert und wieder neu installiert... Oder bringe ich da gerade was durcheinander?

Mavarik 7. Dez 2013 14:10

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von Lemmy (Beitrag 1238864)
Zitat:

Zitat von Mavarik (Beitrag 1238862)
Abgesehen davon, dass scheinbar bei jedem neuen Compile der Datenbereich der App weg ist. Auch daran suche ich noch...

hm.. wenn ich bei der EKON richtig aufgepasst habe, dann wird doch die Anwendung auf dem Device bei jedem Compile deinstalliert und wieder neu installiert... Oder bringe ich da gerade was durcheinander?

Ja so ist es..
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

arnof 7. Dez 2013 18:00

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von Medium (Beitrag 1238844)
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.

Meiste meinen Beitrag ?

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!

Furtbichler 7. Dez 2013 19:36

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von Mavarik (Beitrag 1238862)
Ihr seit so witzig...

Nee, vielleicht nur ein wenig angenervt.
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);

Daniel 7. Dez 2013 19:41

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.

arnof 7. Dez 2013 19:53

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von Mavarik (Beitrag 1238803)
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

Ist doch einfach, schau doch mal wann Du einen Fehler bekommst; beim erzeugen oder erst beim öffnen ?

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.

Medium 8. Dez 2013 01:26

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:

Mavarik 8. Dez 2013 10:10

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von Furtbichler (Beitrag 1238886)
Zitat:

Zitat von Mavarik (Beitrag 1238862)
Ihr seit so witzig...

Nee, vielleicht nur ein wenig angenervt.
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);

Sonst geht's Dir aber gut, oder?

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...

Mavarik 8. Dez 2013 10:33

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von Daniel (Beitrag 1238887)
@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.

Würde ich gerne machen, wenn ich richtig Debuggen könnte. Zum einen haben ich auf iOS Seite dieses Problem zum anderen dauert ein Try-Debug auf Android Seite jeweils mehr als 12 Min. (Compile, Link, Deploy dann per TCP/IP die Daten rüber ziehen und diese in die Datenbank einfügen). Selbst wenn ich das auf die minimalen Datenbanken beschränke nochmal 5 Min. weil mein Nexus 10 im Debug Modus noch langsamer ist.
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:
  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');
- Vielleicht reagiert Android anders wenn eine Tabelle noch offen ist oder die Connection geshared wird.
- 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

Mavarik 8. Dez 2013 10:38

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von arnof (Beitrag 1238888)
Ist doch einfach, schau doch mal wann Du einen Fehler bekommst; beim erzeugen oder erst beim öffnen ?

Siehe #9

...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

arnof 8. Dez 2013 10:45

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.

arnof 8. Dez 2013 12:07

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.

Mavarik 8. Dez 2013 13:09

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von arnof (Beitrag 1238975)
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.

Kann ich testen.... (Anderer Thread)
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. Lieber hier posten.

Mavarik 25. Dez 2013 13:26

AW: SQLite iOS <> SQLite Android!
 
Also...

Wenn das hier auf Android funktionieren soll:

Dann sollte ja gemäß der Anleitung:
Delphi-Quellcode:
procedure TForm1.SQLConnectionSQLiteBeforeConnect(Sender: TObject);
begin
  {$IF DEFINED(iOS) or DEFINED(ANDROID)}
  ShoppingList.Params.Values['Database'] :=
      TPath.Combine(TPath.GetDocumentsPath, 'shoplist.s3db');
  {$ENDIF}
end;
der richtige Path sein.

Das mag funktionieren, wenn man die Datei da per deploy "rüberschiebt",
aber ein

Delphi-Quellcode:
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;
Sollte doch an dieser Stelle die Datenbank erzeuge. (So jedenfalls funktioniert es unter iOS)

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

Daniel 27. Dez 2013 14:28

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.

Mavarik 27. Dez 2013 15:06

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von Daniel (Beitrag 1241183)
Bessere Idee? Ja. :-)
Nach unserem Skype-Gespräch habe ich Dein Demo mit FireDAC nachgebaut und dort stimmen Theorie und Praxis auf Anhieb überein.

Und ich hab den Fehler gefunden:

Data.DbxSqlite.pas


Delphi-Quellcode:
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;
Wer findet den Fehler, warum es auf Android nicht funktioniert?

Für Andoid steht da:

Delphi-Quellcode:
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;
Was mir sagt NIEMAND, in Worten NIEMAND hat es bisher versucht eine SQLite Datenbank onthefly auf einem Android Device zu erzeugen... Erschreckend!

Bzw. Hatte zum Glück immer 'ColumnMetaDataSupported'] = '' gesetzt!

Mavarik

Sir Rufo 27. Dez 2013 15:15

AW: SQLite iOS <> SQLite Android!
 
Weil bei Android der Code so compiliert wird
Delphi-Quellcode:
  if ConnectionProperties.Values['ColumnMetaDataSupported'] = '' then
    DatabaseName := FConnectionProperties.Values[TDBXPropertyNames.Database];
statt so (ob das besser ist?)
Delphi-Quellcode:
  if ConnectionProperties.Values['ColumnMetaDataSupported'] = '' then
  begin

  end;
  DatabaseName := FConnectionProperties.Values[TDBXPropertyNames.Database];

Mavarik 27. Dez 2013 15:39

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von Sir Rufo (Beitrag 1241188)
statt so (ob das besser ist?)
Delphi-Quellcode:
  if ConnectionProperties.Values['ColumnMetaDataSupported'] = '' then
  begin

  end;
  DatabaseName := FConnectionProperties.Values[TDBXPropertyNames.Database];

Der Kandidat hat 100 Punkte...

Tja wie ist es denn bei Android, wahrscheinlich wie bei iOS oder?

Keinen Plan...


Mavarik

arnof 27. Dez 2013 16:54

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)

Bernhard Geyer 27. Dez 2013 19:16

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von Mavarik (Beitrag 1241187)
Und ich hab den Fehler gefunden:

Data.DbxSqlite.pas

Erstellst du auch noch einen QC-Eintrag dazu?

Mavarik 27. Dez 2013 20:56

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1241230)
Zitat:

Zitat von Mavarik (Beitrag 1241187)
Und ich hab den Fehler gefunden:

Data.DbxSqlite.pas

Erstellst du auch noch einen QC-Eintrag dazu?

Logisch... 121404

arnof 27. Dez 2013 21:08

AW: SQLite iOS <> SQLite Android!
 
[QUOTE=Mavarik;1241187]
Zitat:

Zitat von Daniel (Beitrag 1241183)
Bessere Idee? Ja. :-)

Was mir sagt NIEMAND, in Worten NIEMAND hat es bisher versucht eine SQLite Datenbank onthefly auf einem Android Device zu erzeugen... Erschreckend!

Mavarik

Da stimmt doch meine Schätzung (anderes Thema).

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!

GS1200 28. Dez 2013 14:25

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

Mavarik 28. Dez 2013 16:47

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von GS1200 (Beitrag 1241285)
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

Jo ich habe fast 2 Monate in meinem Code den Fehler gesucht... Bis ich dann den Fehler mit dem Debugger gefunden habe...

schand99 3. Feb 2015 13:25

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:
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;
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?

Wäre toll wenn mir jemand einen Hinweis geben könnte was ich da falsch mache

Olli73 3. Feb 2015 13:53

AW: SQLite iOS <> SQLite Android!
 
Zitat:

Zitat von schand99 (Beitrag 1288732)
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?

Weil andere Apps nicht auf "TPath.GetDocumentsPath" zugreifen dürfen, der ist nur für deine App.

schand99 3. Feb 2015 13:56

AW: SQLite iOS <> SQLite Android!
 
Stimmt, grad auch entdeckt. Wenn ich den Pfad mit GetSharedDocuments auslese dann funktionierts.

schand99 3. Feb 2015 15:15

AW: SQLite iOS <> SQLite Android!
 
Nächstes Problem.

Ich schaffe es Daten in die SQLite Datenbank einzutragen. Nun funktioniert das Auslesen nicht
Delphi-Quellcode:
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;
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.
Habe die SQL-Abfrage mittlerweile gefühlte 100x neu geschrieben aber ohne Erfolg. Gibt es vielleicht in XE6 einen Bug?

Sir Rufo 3. Feb 2015 15:59

AW: SQLite iOS <> SQLite Android!
 
Solltest du nicht besser einen neuen Thread erstellen?

BTW: Dein
Delphi-Quellcode:
try except
kannst du ersatzlos streichen und du bekommst mehr Informationen bei einer Exception (die auch sehr hilfreich wären, wenn du uns diese mitteilst).

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 Delphi-Referenz durchsuchenTSqlConnection.Execute


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