Delphi-PRAXiS
Seite 3 von 4     123 4      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 Uhr.
Seite 3 von 4     123 4      

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