• 0
Авторизация  
Вадим Смоленский

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

Вопросы

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 ответ на этот вопрос

  • 0

FDPhysSQLiteDriverLink положите на форму (датамодуль), где соединение настраиваете. Должно помочь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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 час назад, Вадим Смоленский сказал:

Что следует проверить?

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

http://docwiki.embarcadero.com

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 минуту назад, wamaco сказал:

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

http://docwiki.embarcadero.com

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Похожий контент

    • От Вадим Смоленский
      Проект для Windows, автономная БД SQLite, никаких клиент-серверных дел, компоненты и операции самые простые: SQL-запрос в TFDQuery, вызов метода Open. Всё работает нормально, но отдельные пользователи жалуются на эпизодические непредсказуемые падения при поиске. Интересно, что после каждого такого падения всё опять функционирует нормально, но потом приложение не удается нормально закрыть, приходится вызывать диспетчер задач.
      Стабильно воспроизвести не могут ни пользователи, ни я сам. Мне удалось это считанные несколько раз - я лишь смог убедиться через отладчик, что проблема при закрытии связана именно с базой данных: вставлял в обработчик FormCloseQuery оператор TFDConnection.Close - и программа пару раз упала именно на этом операторе.
      Найти корень зла пока не удалось. Показалось только, что проблема возникает лишь тогда, когда поиск приводит к слишком большому (несколько тысяч) числу записей в TFDQuery.
      Может, стоит поменять какие-нибудь установки в TFDConnection или TFDQuery ?
    • От Вадим Смоленский
      Упаковываю свое приложение в appx при помощи кнопки Deploy в Deployment Manager. При этом в разделе Опций "Manifest File" выставлено "Auto Generate". В итоге получается файл AppxManifest.xml; насколько я понимаю, этот манифест также включается в состав итогового пакета appx.
      Пробую загрузить получившийся appx в Microsoft Store. Грузится очень долго и в итоге выдает ошибку: "You don't have permissions to specify the following namespaces in the appx manifest file of the package MyApp.appx: restricted namespace: http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
      В файле AppxManifest.xml действительно отыскивается такой фрагмент. Убираю его, заодно убираю фрагмент  <Capabilities> ... </Capabilities> (если не убрать, получившийся xml даже не отобразится в браузере), переименовываю в MyApp.manifest, меняю установку для манифеста на "Custom", указываю имя. Всё повторяю. Результат ровно тот же.
      Полностью меняю содержимое MyApp.manifest, беря шаблон отсюда. Всё повторяю. Результат опять тот же. Опять магазину не нравится фрагмент манифеста насчет restricted capabilities, которого теперь, по идее, там быть не должно.
      Такое ощущение, что при формировании пакета appx не имеют никакого значения установки по поводу манифеста. Он всегда запихивается в appx в некоем дефолтном варианте, повлиять на который невозможно.
      Или все-таки возможно?
    • От Вадим Смоленский
      При упаковке Windows-приложения в appx все дополнительные файлы приходится класть в одну папку с исполнимым файлом, ибо Deployment Manager, судя по всему, не предусматривает возможности сразу положить их в AppData. Но я все-таки хочу, чтобы некоторые файлы были легко доступны пользователям, поэтому организовал приложение так, что оно при первом запуске создает новый каталог в AppData:
      MyDirectory:=GetSpecialFolderPath(CSIDL_APPDATA)+'\MyApp'; CreateDir(MyDirectory); TDirectory.SetAttributes(MyDirectory,[TFileAttribute.faNormal]); После этого в созданный каталог переносятся некоторые файлы, и всё работает хорошо, за исключением одного момента: этот новый каталог невозможно открыть, например, в Проводнике. Из самого приложения легко можно открыть диалоговое окно и увидеть в нем этот каталог и все файлы; можно их читать и в них писать, но вне приложения этот каталог невидим. Всё равно что не существует.
      Мне казалось, что присвоение каталогу атрибута faNormal дожно все проблемы решить. Увы, не решает. В чем тут закавыка?
    • От Вадим Смоленский
      Устанавливая и запуская свое Windows-приложение, предназначенное для Microsoft Store и запакованное в appx, наткнулся на интересный феномен. Чтобы узнать адрес текущего каталога, я всегда использовал функцию SysUtils.GetCurrentDir. Полученный полный адрес был мне нужен, например, чтобы показывать в TWebBrowser файлы хелпов (относительные адреса там почему-то не прокатывают). Раньше адресом текущего каталога всегда был адрес, где лежит исполнимый файл - условно говоря, C:\Program Files\MyApp. Теперь, когда пакет создается по принципам UWP,  исполнимый файл и прочее хозяйство кладется в каталог C:\Program Files\WindowsApps\MyApp_1.0.0.0_x86__sp51hrchc9zqj.  При этом функция GetCurrentDir почему-то возвращает совершенно другой адрес, а именно C:\WINDOWS\system32. Соответственно, TWebBrowser ничего не показывает.
      Функция SysUtils.GetDir ведет себя так же.
      Как быть?
    • От Вадим Смоленский
      В RAD Studio, начиная с Berlin, предусмотрена возможность создавать пакеты appx для загрузки приложений в Microsoft Store. К сожалению, материалов на эту тему пока немного, толковая ссылка нашлась лишь одна:
      https://community.embarcadero.com/blogs/entry/appx-development-for-windows-10-store
      Там толково объяснено, как создать appx для приложения из одного исполнимого файла. Я попробовал, всё получилось. Но как быть, если пакет должен содержать и другие файлы? В моем случае это файл базы данных, целая папка html-файлов для хелпов, и т.п. Где я должен их указать? Логично было бы предположить, что за это ответственен манифест (Project => Options => Application => Manifest File), который можно кастомизировать. Но сколько я ни гуглил, не смог найти ничего о структуре этого манифеста применительно к файлам. Похоже, манифест здесь все-таки ни при чем.
      Раньше я всё это делал в Inno Setup. Как поступать теперь - непонятно...
    • От Вадим Смоленский
      Коллеги! Хотел бы еще раз привлечь ваше внимание к проблеме, недавнее обсуждение которой, к сожалению, заглохло. Не был бы столь настойчив, но это касается всех из нас, кто работает с Windows. Речь о дефекте платформы FMX, выражающемся в том, что щелчок по иконке в панели задач не приводит к сворачиванию приложения, как это задумано. Пользователь sargon предложил следующее решение:
      WM_SYSCOMMAND: begin if wParam = SC_MINIMIZE then PlatformWin.MinimizeApp else if wParam = SC_RESTORE then PlatformWin.RestoreApp; DefWindowProc(HWND, uMsg, wParam, LPARAM); sleep(50); // у FMX какая-то беда с потоками, иногда при нажатии по иконуе приложения в TaskBar окно не сворачивается а снова активируется, sleep уменьшает количество таких глюков Winapi.Windows.SetActiveWindow(FormToHwnd(LForm)); // после разворота активирует окно - проверил в Berlin и Tokyo 10.2.2 end; Фрагмент нужно вставить в FMX.Platform.Win в функцию function WndProc(hwnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
      Я последовал этому совету, но стало только хуже: перестало работать сворачивание даже при щелчке по системной кнопке "Minimize". С щелчком по иконке тоже никаких сдвигов. Что здесь может быть не так?
    • От slav_z
      комп-с нуля. WMPlayer играет видео (mp4) а компонент TMediaPlayer - нет.  Объясните пожалуйста причину.
    • От Вадим Смоленский
      Наткнулся на странное поведение FMX-приложений под Windows. Если развернуть окно приложения на весь экран, потом воспользоваться системной кнопкой "Свернуть все окна" (в правом нижнем углу экрана) и после этого опять вызвать окно приложения, то оно выводится уже не развернутым, а обычным. Появились недовольные таким поведением пользователи. Можно ли их чем-нибудь утешить?
    • От Вадим Смоленский
      Когда мое приложение для Windows компилировалось в Delphi 6, линуксоиды успешно запускали его в Wine. Рапортовали, что неидеально, но работать можно. Теперь, после перевода на FireMonkey, один тестировщик попробовал запустить его в Wine 3.0 и сообщает:
      "Результат неутешителен - программа в нём практически не работает. Интерфейс сломан, кнопки интерфейса не нажимаются (в большинстве; а если и нажимаются, то возникают всякие ошибки)."
      Не сталкивался ли кто-нибудь здесь с этой проблемой? Я тихо надеюсь, что существует некая волшебная кнопка, которая поможет всё наладить.
      Приложение использует FireDAC и SQLite. Сторонних компонентов никаких.
    • От Вадим Смоленский
      Один тестер моего проекта (один изо всей команды!) поставил меня в полный тупик. У него Windows 7, и он запускает приложение на разных компьютерах, выбирая разные темы - то с Aero, то без. Почему-то приложение выглядит у него прилично лишь при запуске с Aero; при запуске же с базовой темой наблюдаются искажения отрисовки и функциональные нарушения. А на одном компьютере с Aero-темой приложение может не запуститься вовсе: например, если установлено системное масштабирование шрифтов 135%. Тогда при запуске появляется сообщение об ошибке в модуле ntdll.dll.
      Не мог бы кто-нибудь разъяснить, как установка темы связана с параметрами Windows API? Можно ли как-то нивелировать эту разницу? На что вообще в таких случаях нужно обратить внимание?
  • Последние посетители   0 пользователей онлайн

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