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

Развертывание приложения с FireDAC и SQLite


Вадим Смоленский

Вопрос

Писал на Delphi 10.2 Tokyo под Windows. У тестеров приложение валится при первой же попытке обращения к БД с сообщением "unable to open database file". У меня на компе всё нормально. Файл sqlite3.dll версии 3.21.0.0 в дистрибутив включен, кладется рядом с исполнимым файлом. Что может быть не так?

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

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

  • 0
5 минут назад, Вадим Смоленский сказал:

Положить - и всё? Я вижу, там еще поля какие-то есть: DefaultPath, SearchPath, DriverID... Надо что-нибудь заполнять?

Ничего заполнять не надо!

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

Тестеры сообщают, что не помогло.

Кстати, разве это не про клиент-сервер? У меня-то база вполне автономная...

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

Для того, что бы дельфя работала с sqlite нужна dll собраная для дельфи и от 1 до 3 .pas файлов для интеграции. В "топовой версии" доступно шифрование базы через libeay32.dll. 
В любом случае нужно посмотреть зависимости и после этого приложить нужную dll.
 

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

Delphi у меня нормально работает с sqlite, безо всякого dll. Не работает только собранное приложение на пользовательских компьютерах без Delphi. Если ваш совет относится к этой ситуации, я бы вас просил его развернуть, ибо пока плохо понимаю, что именно вы предлагаете.

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

Тестеры сообщают, что не помогло.

Кстати, разве это не про клиент-сервер? У меня-то база вполне автономная...

Возможно не видит тот компонент, который я указал выше. Куда они его положили или может создавали в коде? Приложите проект.

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

Возможно не видит тот компонент, который я указал выше. Куда они его положили или может создавали в коде?

Мои тестеры ничего в коде не создавали и с компонентами не работали, они просто запускали готовое приложение. Компонент FDPhysSQLiteDriverLink я положил по вашей инструкции на DataModule, рядом с TFDConnection, после чего скомпилировал исполнимый файл, создал в Inno Setup дистрибутив, куда приложил sqlite3.dll и файл БД, после чего отправил дистрибутив тестерам. Если это неправильно, то как правильно?

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

Не упаковывайте в InnoSetup, скиньте просто portable, возможно у Вас нет прав у приложения на папку, где БД лежит....

Или тестеры криво ставят... пусть сначала удалят старую версию...

Изменено пользователем wamaco
Ссылка на комментарий
  • 0
31 минуту назад, Вадим Смоленский сказал:

куда приложил sqlite3.dll

А откуда вообще взялась информация о том, что для работы приложения необходимо с ним таскать библиотеку sqlite? Беру чистый образ Win XP, на нём не должно быть этой библиотеки, кидаю туда своё приложение, работающее с sqlite через FireDAC, и всё работает. Что я делаю не так?

 

 

Ссылка на комментарий
  • 0
1 минуту назад, Maximus сказал:

А откуда вообще взялась информация о том, что для работы приложения необходимо с ним таскать библиотеку sqlite? Беру чистый образ Win XP, на нём не должно быть этой библиотеки, кидаю туда своё приложение, работающее с sqlite через FireDAC, и всё работает. Что я делаю не так?

 

 

она есть, просто лежит видимо у вас в system32.... 

у devart есть компоненты, с direct режимом, вот там dll не нужна!

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

> Не упаковывайте в InnoSetup, скиньте просто portable, возможно у Вас нет прав у приложения на папку, где БД лежит....

> Или тестеры криво ставят... пусть сначала удалят старую версию..

 

Э, нет. Мне нужно сделать нормальный, упакованный дистрибутив, который работал бы у всех. Пользователей тысячи, я каждому не стану объяснять, что удалять и какие куда выставлять права. А права на папку с БД есть заведомо, это точно.

Откуда вообще взялась тема с компонентом FDPhysSQLiteDriverLink? Кроме как в ваших постах, я упоминаний о нем нигде не видел. В хелпах написано, что этот компонент нужен для поддержки Advantage Database Server - насколько я понимаю, это клиент-серверная архитектура, которую я не использую. У меня автономная база, которая лежит у юзера на компе - при чем здесь сервер?

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

Про InnoSetup....  я про то что локализуйте проблему, может проблема шире и вовсе не в программе, а в глючном InnoSetup. А то так слишком много НО! Ясновидящих тут нет!

Про FDPhysSQLiteDriverLink читайте внимательно тут 

Вот эти строчки есть в DataModule?

FDGUIxWaitCursor1: TFDGUIxWaitCursor;

FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink;

Изменено пользователем wamaco
Ссылка на комментарий
  • 0
11 минуту назад, wamaco сказал:

Вот эти строчки есть в DataModule?

FDGUIxWaitCursor1: TFDGUIxWaitCursor;

FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink;

Строчки про FDGUIxWaitCursor1 не наблюдаю. А зачем нам еще и этот компонент? Это ж, вроде, просто песочные часы в качестве курсора.

Ссылка на комментарий
  • 0
7 минут назад, Вадим Смоленский сказал:

Строчки про FDGUIxWaitCursor1 не наблюдаю. А зачем нам еще и этот компонент? Это ж, вроде, просто песочные часы в качестве курсора.

http://docwiki.embarcadero.com/Libraries/Berlin/en/FireDAC.Comp.UI.TFDGUIxWaitCursor

Внимательно читаем документацию!

 

Preparing Your Application for Run Time

FireDAC has a loosely-coupled multilayered architecture, where layers provide services. A service API is defined as a COM interface that other layers can request using the interface factory.

To properly operate FireDAC, you must link the implementation of the IFDGUIxWaitCursor and IFDPhysDriver interfaces to your application.

For this, drop the TFDGUIxWaitCursor and TFDPhysSQLiteDriverLink components on the form.

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

Ну, хорошо, поставил я и этот компонент рядом с TFDConnection. Что дальше? Приведенные ссылки ничего не проясняют. В теме "Самый простой способ работы с SQLite" лишь одно упоминание об этих компонентах. Alex Bozhko пишет:

"Ну, FDGUIxWaitCursor1, FDPhysSQLiteDriverLink1 - один раз повесили рядом с FDConnection, настроили и забыли - не особая и проблема (за универсальность чем-то платить всегда приходится)."

НАСТРОИЛИ!  В чем должна заключаться эта настройка?

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

Ну, хорошо, поставил я и этот компонент рядом с TFDConnection. Что дальше? Приведенные ссылки ничего не проясняют. В теме "Самый простой способ работы с SQLite" лишь одно упоминание об этих компонентах. Alex Bozhko пишет:

"Ну, FDGUIxWaitCursor1, FDPhysSQLiteDriverLink1 - один раз повесили рядом с FDConnection, настроили и забыли - не особая и проблема (за универсальность чем-то платить всегда приходится)."

НАСТРОИЛИ!  В чем должна заключаться эта настройка?

Вся настройка заключается в этом

For this, drop the TFDGUIxWaitCursor and TFDPhysSQLiteDriverLink components on the form.

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

For this, drop the TFDGUIxWaitCursor and TFDPhysSQLiteDriverLink components on the form.

Сделал, не помогло. Тестеры сообщают, что всё ровно так же.

Ссылка на комментарий
  • 0
5 минут назад, Вадим Смоленский сказал:

Сделал, не помогло. Тестеры сообщают, что всё ровно так же.

Мучайте тестеров тогда! ХЗ что у вас там! У меня все работает везде! Советую не зацикливаться на отписки тестеров! Мало ли, что они там пишут!

Разверните чистый стенд Windows и тестируйте сами!

Либо скидывайте сюда проект! Другого выхода не вижу!

Изменено пользователем wamaco
Ссылка на комментарий
  • 0
1 час назад, wamaco сказал:

она есть, просто лежит видимо у вас в system32.... 

Чистая ХР, откуда там взяться этой библиотеке? Она не поставлялась вместе с виндой.

Проверил, её там действительно нет.

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

Еще два вопроса.

1. У компонента FDGUIxWaitCursor1 есть свойство Provider. Значение по умолчанию: Forms. Не нужно ли поменять на FMX?

2. У тестера, как выяснилось, x64. Требуется ли другая sqlite3.dll?

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

Сделайте тестовое приложение, без функционала, только подключение к базе с одной таблицей и выводом данных из неё. Если она у ваших тестеров заработает, значит косяк в вашем приложении. Если не заработает, то скините проект сюда.

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

Идея сделать тестовое приложение оказалась плодотворной, ибо я сразу же нашел свою ошибку: TFDConnection.Connected было почему-то установлено в True уже на этапе дизайна. Соответственно, программа пыталась открыть базу, когда еще не знала, где эта база лежит.

Теперь база открывается, но не работает с отдельными таблицами. В тестовом приложении таблица одна, называется Elements, там два поля и три записи. За нее отвечает компонент TFDTable. Опять же, у меня на компьютере все хорошо, а у тестера программа падает с сообщением "no such table: ELEMENTS". Что следует проверить?

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

Для начала следует почитать

http://docwiki.embarcadero.com

Уже читал. Не обижусь, если вы меня ткнете носом во что-нибудь более конкретное.

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

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

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

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

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

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

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

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

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

×
×
  • Создать...