Перейти к содержанию
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 пользователей онлайн

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