![]() |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 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