flexit Опубликовано 26 ноября, 2015 Поделиться Опубликовано 26 ноября, 2015 Здравствуйте! Для создания соединения использую 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 umkes Опубликовано 26 ноября, 2015 Поделиться Опубликовано 26 ноября, 2015 (изменено) Я делал так, 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 }; и т.д. Изменено 26 ноября, 2015 пользователем umkes Mars M и zairkz 2 Цитата Ссылка на комментарий
0 krapotkin Опубликовано 26 ноября, 2015 Поделиться Опубликовано 26 ноября, 2015 может, дело в GetSharedDocumentsPath ? андроид говорит, что база программы лежит в папке, доступной только для самой программы Цитата Ссылка на комментарий
0 FAN Опубликовано 26 ноября, 2015 Поделиться Опубликовано 26 ноября, 2015 GetSharedDocumentsPath не работает GetDocumentsPath работает FDConnection1.Params.Values['Database'] := TPath.Combine(TPath.GetDocumentsPath, 'lbase.db'); Цитата Ссылка на комментарий
0 flexit Опубликовано 27 ноября, 2015 Автор Поделиться Опубликовано 27 ноября, 2015 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 flexit Опубликовано 27 ноября, 2015 Автор Поделиться Опубликовано 27 ноября, 2015 Попробовал использовать компонент TSqlConnection вместо TFDConnection c тем же самым кодом - ошибки при соединении не происходит. Придется использовать dbExpess вместо FireDAC. И все же интересно, в чем же может быть проблема при работе с компонентом TFDConnection. Есть какие-нибудь идеи? Цитата Ссылка на комментарий
0 umkes Опубликовано 27 ноября, 2015 Поделиться Опубликовано 27 ноября, 2015 я еще хочу добавить что ничего в Deloyment не трогал, там какие-то нюансы есть. Просто создавал БД если ее нету и юзал Цитата Ссылка на комментарий
0 flexit Опубликовано 27 ноября, 2015 Автор Поделиться Опубликовано 27 ноября, 2015 Все же я вернулся к 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 haword Опубликовано 27 ноября, 2015 Поделиться Опубликовано 27 ноября, 2015 а зачем каждый раз указывать драйвер? один раз задал и все на форме. у меня так все работает. и этот пример брал из примеров. {$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 flexit Опубликовано 27 ноября, 2015 Автор Поделиться Опубликовано 27 ноября, 2015 Я тоже начинал с таких примеров и понимаю, что это штатный вариант. Но у меня он не проходит, и думаю, что кривизна рук тут не при чем. На форме у TFDConnection драйвер у меня тоже указан. Но если я напишу в ConnectionString='Database='+DBPath, то TFDConnection не понимает, какой драйвер нужно использовать. Ну а Params.Values['DriverID']:='SQLite' можно писать, или не писать - все равно в этом варианте при компиляции под Андроид возникает ошибка при попытке коннекта. Цитата Ссылка на комментарий
0 unlimuser Опубликовано 22 октября, 2018 Поделиться Опубликовано 22 октября, 2018 У меня подобная ошибка при запуске на любом ПК, куда скопирована скомпилированная программа, на ПК, где установлена среда Delphi 10.2 без проблем запускается. Как победить эту ошибку на других ПК, куда копируется программа? Цитата Ссылка на комментарий
0 #WAMACO Опубликовано 23 октября, 2018 Поделиться Опубликовано 23 октября, 2018 13 часов назад, unlimuser сказал: У меня подобная ошибка при запуске на любом ПК, куда скопирована скомпилированная программа, на ПК, где установлена среда Delphi 10.2 без проблем запускается. Как победить эту ошибку на других ПК, куда копируется программа? в папку с exe положи sqlite3.dll скачать последнюю версию можно с sqlite.org Anatoliy 1 Цитата Ссылка на комментарий
0 unlimuser Опубликовано 23 октября, 2018 Поделиться Опубликовано 23 октября, 2018 3 часа назад, wamaco сказал: в папку с exe положи sqlite3.dll скачать последнюю версию можно с sqlite.org Лежит, и это не решает проблему стертертопика: [FireDAC][stan][Def]-254. Definition [lbase] is not found in []. Цитата Ссылка на комментарий
0 mazayhin Опубликовано 23 октября, 2018 Поделиться Опубликовано 23 октября, 2018 3 часа назад, unlimuser сказал: Лежит, и это не решает проблему стертертопика: [FireDAC][stan][Def]-254. Definition [lbase] is not found in []. Ну скорее всего у себя вы указали в коннекшене символическое имя для подключения, оно сохраняется в FDConnectionDefs.ini (вроде правильно), а у пользователя его нет. Задайте параметры подключения вручную, явно Anatoliy и unlimuser 2 Цитата Ссылка на комментарий
Вопрос
flexit
Здравствуйте!
Для создания соединения использую TFDConnection.
Под Windows проблем нет, на планшете под Андроидом возникает ошибка:
[FireDAC][stan][Def]-254. Definition [lbase] is not found in [].
Физически база на устройстве присутствует, вижу ее в файловом менеджере и в коде проверяю наличие файла с помощью TFile.Exists.
Код:
TestConnect.zip
Ссылка на комментарий
13 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.