Перейти к содержанию
Fire Monkey от А до Я
  • 0

XE8, не могу установить соединение с базой Sqlite на устройстве под Android


flexit

Вопрос

Здравствуйте!

 

Для создания соединения использую TFDConnection.

Под Windows проблем нет, на планшете под Андроидом возникает ошибка:

[FireDAC][stan][Def]-254. Definition [lbase] is not found in [].

Физически база на устройстве присутствует, вижу ее в файловом менеджере и в коде проверяю наличие файла с помощью TFile.Exists.

 

Код:

 

procedure TForm5.FDConnection1BeforeConnect(Sender: TObject);
var DBPath: string;
begin
  {$IFDEF ANDROID}
     DBPath:=TPath.GetSharedDocumentsPath + PathDelim + 'lbase.db';
  {$ELSE}
     DBPath:='d:\test\lbase.db';
  {$ENDIF}
  if TFile.Exists(DBPath) then
    ShowMessage('File exist') else
    ShowMessage('File not exist');
  FDConnection1.Params.Values['Database']:= DBPath;
end;
 
procedure TForm5.Button1Click(Sender: TObject);
begin
  FDConnection1.Connected:=true;
end;

TestConnect.zip

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Я делал так,

FDMainConnection.Params.Values['Database'] := TPath.Combine(TPath.GetDocumentsPath, 'DB.s3db');

Создает в моих документах на винде, и где-то не знаю где на андроидах)

Так же мб понадобится

FDMainConnectionAfterConnect(Sender: TObject);
begin
  FDMainConnection.ExecSQL('CREATE TABLE If Not Exists [TableName] (' + #13#10 +
                           '[IdObject] INTEGER  PRIMARY KEY NOT NULL,' + #13#10 +
                           '[SomeField] INTEGER  NULL' + #13#10 +
                           ')');
end { FDMainConnectionAfterConnect };

и т.д.

Изменено пользователем umkes
Ссылка на комментарий
  • 0

GetSharedDocumentsPath не работает

GetDocumentsPath работает 

 FDConnection1.Params.Values['Database']  := TPath.Combine(TPath.GetDocumentsPath, 'lbase.db');

Так я тоже пробовал и с тем же результатом. Изначально в Deloyment указывал .\assets\internal и использовал функцию GetDocumentsPath.

Потом попробовал указывать в Deloyment .\assets в качестве RemotePath и использовать функцию GetSharedDocumentsPath. В результате  TFile.Exists показывает в обоих случаях, что файл базы присутствует, но ошибка все равно возникает.

TPath.Combine я тоже использовал.

Ссылка на комментарий
  • 0

Попробовал использовать компонент TSqlConnection вместо TFDConnection c тем же самым кодом - ошибки при соединении не происходит. Придется использовать dbExpess вместо FireDAC.

И все же интересно, в чем же может быть проблема при работе с компонентом TFDConnection. Есть какие-нибудь идеи?

Ссылка на комментарий
  • 0

Все же я вернулся к TFDConnection и выяснил следующее.

 

Перед установкой соединения при компиляции под Windows можно написать:

  FDConnection1.Params.Values['DriverID']:='SQLite';

  FDConnection1.Params.Values['Database']:= DBPath;   
или 
  FDConnection1.ConnectionString:='DriverID=SQLite;Database='+DBPath;
Проблем не будет в обоих случаях.
 
А вот под Андроид первый вариант выдает ошибку [FireDAC][stan][Def]-254. Definition [baseName] is not found in [],
а второй - успешно работает.
 
P.S. Только начал изучать разработку мобильных приложений в Delphi, но подобные 'милые особенности' на каждом шагу уже успели изрядно утомить. 
Ссылка на комментарий
  • 0
а зачем каждый раз указывать драйвер? один раз задал и все на форме. 
 
у меня так все работает. и этот пример брал из примеров. 
 
  {$IF DEFINED(IOS) or DEFINED(ANDROID)}
    DBCon.Params.Values['Database'] :=
        TPath.Combine(TPath.GetDocumentsPath, 'database.db3');
  {$ELSE}
    DBCon.Params.Values['Database'] :=
       ExtractFilePath(ParamStr(0)) +  'database.db3';
  {$ENDIF}
Ссылка на комментарий
  • 0

Я тоже начинал с таких примеров и понимаю, что это штатный вариант.

Но у меня он не проходит, и думаю, что кривизна рук тут не при чем.

 

На форме у TFDConnection драйвер у меня тоже указан.

Но если я напишу в  ConnectionString='Database='+DBPath, то TFDConnection не понимает, какой драйвер нужно использовать.

Ну а Params.Values['DriverID']:='SQLite' можно писать, или не писать - все равно в этом варианте при компиляции под Андроид  возникает ошибка при попытке коннекта.

Ссылка на комментарий
  • 0

У меня подобная ошибка при запуске на любом ПК, куда скопирована скомпилированная программа, на ПК, где установлена среда Delphi 10.2 без проблем запускается.

Как победить эту ошибку на других ПК, куда копируется программа?

Ссылка на комментарий
  • 0
13 часов назад, unlimuser сказал:

У меня подобная ошибка при запуске на любом ПК, куда скопирована скомпилированная программа, на ПК, где установлена среда Delphi 10.2 без проблем запускается.

Как победить эту ошибку на других ПК, куда копируется программа?

в папку с exe положи sqlite3.dll

скачать последнюю версию можно с sqlite.org

Ссылка на комментарий
  • 0
3 часа назад, wamaco сказал:

в папку с exe положи sqlite3.dll

скачать последнюю версию можно с sqlite.org 

Лежит, и это не решает проблему стертертопика: [FireDAC][stan][Def]-254. Definition [lbase] is not found in [].

Ссылка на комментарий
  • 0
3 часа назад, unlimuser сказал:

Лежит, и это не решает проблему стертертопика: [FireDAC][stan][Def]-254. Definition [lbase] is not found in [].

Ну скорее всего у себя вы указали в коннекшене символическое имя для подключения, оно сохраняется в FDConnectionDefs.ini (вроде правильно), а у пользователя его нет. 

Задайте параметры подключения вручную, явно

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...