• 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

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

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


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

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

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

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

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

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

Войти

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

Войти

Авторизация  

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

    • От Вадим Смоленский
      В своем проекте (это японско-русский словарь) мне приходится выводить на TImage.Bitmap.Canvas хранящиеся в юникоде иероглифы, причем шрифт пользователь может выбрать сам. Столкнулся с неприятным явлением: разные шрифты располагают выводимый символ на разной высоте, в результате чего иероглиф часто не вписывается в предназначенную для него область. По умолчанию принят шрифт Tahoma, с ним всё хорошо:

      Но вот шрифт Yu Mincho:

      А вот, еще хлеще, Kozuka Gothic:

      Вопрос: что за параметр регулирует вертикальное смещение, можно ли его вынуть и с ним работать?
    • От Вадим Смоленский
      Некоторые юзеры (видимо, из близоруких) прибегают к масштабированию экрана и требуют, чтобы ваше приложение тоже масштабировалось. Когда мой проект был в VCL, я смотрел на параметр Screen.PixelsPerInch и учитывал его значение в своем коде. В FireMonkey этого нет. Я пытался понять, как это делать теперь, и окончательно запутался. Microsoft на официальном сайте упоминает функцию SystemParametersInfo с параметром SPI_GETLOGICALDPIOVERRIDE, но делает оговорку, что такую конфигурацию лучше не использовать - дескать, в новых версиях Windows она не будет работать. Взамен рекомендуют функцию GetScaleFactorForDevice, но тут же заявляют, что под Windows 8 и она работать не будет, а будет работать только GetScaleFactorForMonitor. Голова кругом. Нет ли у кого, случаем, готового решения, которое работало бы на любых Windows - хотя бы от семерки до десятки?
      Еще один момент, который я не могу понять - в Windows 10 в настройках экрана, помимо масштаба в процентах, можно выбирать еще и разрешение в пикселях. По-моему, раньше такого разделения не было, хотя могу ошибаться. Связаны ли эти настройки друг с другом? И как они соотносятся со старым добрым DPI?
    • От Вадим Смоленский
      Работая в Berlin, подправил стиль для одного компонента посредством вызова "Edit Custom Style" во всплывающем меню. Потом перешел на Tokyo; потом поменял компьютер и установил на него Tokyo заново. Сейчас вижу, что компонент отображается в стиле по умолчанию. Никаких сообщений по поводу пропавшего стиля не припомню. Где мне найти и как опять подключить мой отредактированный стиль?
    • От Вадим Смоленский
      В своем проекте (это японско-русский словарь) я часто вывожу текст на TImage методом TCanvas.FillText, и результат выглядит так:

      Один из тестеров, у которого установлена Windows XP, прислал скриншот того, что выводится у него:

      Ровно такую же безобразную картину я видел у себя, когда, экспериментируя с быстродействием, вставлял в файл dpr операторы  FMX.Types.GlobalUseDX:=False или FMX.Types.GlobalUseDirect2D:=False
      То ли в XP эти установки приняты по умолчанию, то ли так сконфигурирована система у тестера. Первое, что приходит в голову - вставить в код присвоение обеим упомянутым переменным значения True. Но прежде, чем предпринять такую попытку, хотелось бы услышать мнение экспертов. В чем здесь корень зла?
    • От Вадим Смоленский
      Записываю русский текст в файл:
      procedure WriteToFile; var F: TextFile; S: string; begin S:='Русский текст'; AssignFile(F,MyFile.txt'); ReWrite(F); WriteLn(F,S); CloseFile(F); end; Тип данных string - по идее, то же, что WideString. То бишь, в строку S записан юникод. Тем не менее, открывая потом файл, вижу, что русский текст сохранен в ANSI. Как добиться его сохранения в юникоде?
    • От Вадим Смоленский
      В своем VCL-проекте я использовал оригинальный способ застраховаться от повторного запуска приложения. Обычно это делают через Mutex. Но умные люди на experts-exchange.com много лет назад посоветовали мне следующее:
      // в главном окне: protected procedure CreateParams(var Params: TCreateParams); override; procedure TMyApp.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.WinClassName:='MyAPP String ID'; end; // В файле .dpr: var AWnd, A1Wnd: HWND; AWnd:=FindWindow('MyApp String ID',nil); if IsWindow(AWnd) then begin A1Wnd := GetWindow(AWnd, GW_OWNER); if IsWindow(A1Wnd) then AWnd := A1Wnd; ShowWindow(AWnd, SW_RESTORE); SetForegroundWindow(AWnd); end else begin Application.Initialize; ....... end Способ хорош тем, что он не просто блокирует повторный запуск, а выводит уже запущенное приложение на передний план, тычет юзера в него носом. Но при переходе на FireMonkey возникла закавыка: компилятору не нравится TCreateParams. Говорит: undeclared identifier. Чем бы его заменить?
    • От Вадим Смоленский
      Перейдя с Берлина на Токио, столкнулся с неприятным феноменом. Раньше, выводя на экран форму с обилием TLabel, которые нужно было заполнить текстом и выровнять, я спокойно ставил везде AutoSize=True, присваивал нужные значения полям Text, после чего ширина каждого TLabel принимала новое значение, и мой код их красиво выравнивал. Теперь же ширина не меняется до полной отрисовки на экране всего и вся. Соответственно, на этапе выравнивания код оперирует со значениями ширины, которые были еще на этапе дизайна. Как следствие - всё наперекосяк! Что делать?
    • От Вадим Смоленский
      Windows, Berlin. Когда TWebBrowser на форме получает фокус, он начинает перехватывать все нажатия клавиш. До FormKeyDown управление уже не доходит. Отключение свойства браузера CanFocus не помогает, своего события OnKeyDown у него нет. Как быть? В идеале хотелось бы оставить браузеру навигационные клавиши (стрелки, PgDn, PgUp, Home, End), но все остальные отправлять на форму. Возможно ли это?
    • От Вадим Смоленский
      Работаю в Windows с FireDAC (SQLite). При каждом обращении к базе данных экранный курсор превращается в песочные часы с надписью SQL. Пользователи моего продукта далеки от программирования и ни про какой SQL не слыхивали, им это совершенно ни к чему. Как мне подавить этот феномен? В свойствах TFDConnection я ничего на эту тему не нахожу...
    • От Вадим Смоленский
      Мастерю из TRectangle всплывающую подсказку с тенью и анимацией (увеличиваю Opacity от 0 до 1). Без TFloatAnimation тень нормально отображается, а с анимацией пропадает. Действительно ли здесь есть какие-то ограничения, или проблему можно решить?
  • Последние посетители   0 пользователей онлайн

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