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