• 0
Bio HaZaRD

Не запускается проект (FireDac + SQLite)

Вопросы

Всем привет!

Пишу проект на основе FireDac (TFDConnection, TFDQuery) + SQLite. На ПК с IDE программа запускается, а на других - нет. На ПК, без IDE, стоят все обновы.

Помогите разобраться, где проблема или посоветуйте другой компонент, который поддерживает SQLite. Заранее спасибо!

 

Примечания к файлу:

Windows-Problemberichtserfassung = Windows Problem Reporting

problem.png

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


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

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

  • 1

На других ПК рядом с Вашим ехе-файлом нужно положить dll-библиотеку SQLite

Изменено пользователем enatechno

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


Ссылка на сообщение
Поделиться на другие сайты
  • 1
16 часов назад, enatechno сказал:

На других ПК рядом с Вашим ехе-файлом нужно положить dll-библиотеку SQLite

Взять можно отсюда: http://www.sqlite.org/download.html

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


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

Большое спасибо за столь скорую реакцию.

Я перешёл на Qt и (на данный момент) не имею боли по поводу SQLite.

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


Ссылка на сообщение
Поделиться на другие сайты
  • 1
2 часа назад, Bio HaZaRD сказал:

Большое спасибо за столь скорую реакцию.

Я перешёл на Qt и (на данный момент) не имею боли по поводу SQLite.

А какая разница на чем писать, база данных все равно требует библиотеку доступа!

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


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

А какая разница на чем писать, база данных все равно требует библиотеку доступа!

Не знаю в чём проблема в c++ builder, но в Qt всё работает

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


Ссылка на сообщение
Поделиться на другие сайты
  • 1
Только что, Bio HaZaRD сказал:

Не знаю в чём проблема в c++ builder, но в Qt всё работает

На том компе на котором до этого не работало на QT работает? Это может причиной двух случаев. Для доступа из QT к sqlite посредством статической встроенной библиотеки (как для студии на liteDAC), или QT просто кидает нужный dll.

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


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

Запиленное на Qt работает на других ПК. В конце концов, с приложением лежат все DLL. Приложение весит ~50 Мб. Это не особо удобно, учитывая тот факт, что в приложении все-лишь пару кнопок и текстовых полей.

В идеале хотелось бы вообще нативное приложение построить, без всяких прибомбасов))

Изменено пользователем Bio HaZaRD

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


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

Запиленное на Qt работает на других ПК. В конце концов, с приложением лежат все DLL. Приложение весит ~50 Мб. Это не особо удобно, учитывая тот факт, что в приложении все-лишь пару кнопок и текстовых полей

Ну вот, QT вам само ложит эту dll, вот и ответ.

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


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

Ну вот, QT вам само ложит эту dll, вот и ответ.

Подожду обновы, может исправят.

Спасибо всем за содействие!

Изменено пользователем Bio HaZaRD

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


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

Подожду обновы, может исправят.

Спасибо всем за содействие!

Исправят что? Вы сами должны рядом с экзешником положить dll от sqlite!

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


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

Исправят что? Вы сами должны рядом с экзешником положить dll от sqlite!

Я клал 32 и 64 бит. Переименовывал в sqlite.dll, sqlite3.dll. Клал sqlite3.dll в папку System32 (здесь sqlite3 32 бит) и SysWOW64 (sqlite3 64 бит). Прога даже не показывалась. А когда я удалял компоненты FireDac с формы в билдере, то приложение запускалось без проблем

Изменено пользователем Bio HaZaRD

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


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

Я клал 32 и 64 бит. Переименовывал в sqlite.dll, sqlite3.dll. Клал sqlite3.dll в папку System32 (здесь sqlite3 32 бит) и SysWOW64 (sqlite3 64 бит). Прога даже не показывалась. А когда я удалял компоненты FireDac с формы в билдере, то приложение запускалось без проблем

надо рядом с exe приложения

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


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

Один раз показываю.

private
  FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink; //компонент, кинь на форму

...........


Begin
  FDPhysSQLiteDriverLink1 := TFDPhysSQLiteDriverLink.Create(self); // либо создай в ранТайме
  FDPhysSQLiteDriverLink1.VendorLib := 'full path to you sqlite.dll'; // укажи путь к библиотеке

 

Изменено пользователем rareMax

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


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

Там нужно модуль phys вроде подрубить, где то на форуме было

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


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

Где создается/размещается файл базы данных? Проблема может быть в правах доступа. Попробуйте запустить свою программу на другом ПК с правами администратора. 

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


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

надо рядом с exe приложения

Я ложил с exe.

35 минут назад, enatechno сказал:

Где создается/размещается файл базы данных? Проблема может быть в правах доступа. Попробуйте запустить свою программу на другом ПК с правами администратора. 

База находится в папке рядом с exe, а exe – на D:/.... Я запускал на другом пк с правами и без прав админа.

 

2 часа назад, rareMax сказал:

Один раз показываю.


private
  FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink; //компонент, кинь на форму

...........


Begin
  FDPhysSQLiteDriverLink1 := TFDPhysSQLiteDriverLink.Create(self); // либо создай в ранТайме
  FDPhysSQLiteDriverLink1.VendorLib := 'full path to you sqlite.dll'; // укажи путь к библиотеке

 

Также пробовал бросать этот компонент – без результатно.

 

 

Завтра ещё раз сделаю по вашим советам на чистой винде

Изменено пользователем Bio HaZaRD

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


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

Дамы и Господа,

в общем не знаю из-за чего, но после переустановки винды на билд 15002 и установки Rad Studio, скачанной с сайта embarcadero, всё скомпелировалось и заработало.

Итак ход разработки проги:
создав интерфейс, кинул FDConnection, FDQuery и настроил их. После закинул на ПК без IDE. Убидившись в том, что в System32 и SysWOW64 не лежит sqlite3.dll, запустил прогу и.... всё заработало.

Мой вывод по поводу sqlite: C++ Builder впаивает sqlite в exe, тем самым никакие DLL с прогой ложить не нужно, а вот БД надо.

 

Ещё один вопрос про FireDac: как программно указать относительный путь к БД (sqlite) для компонента FDConnection?

 

Всех благодарю за помощь и содействие.

Основная проблема решена! ))

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


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

Убидившись в том, что в System32 и SysWOW64 не лежит sqlite3.dll, запустил прогу и.... всё заработало

Поверьте, FireDac не имеет встроенного механизма доступа с sqlite. То есть, нужна dll. Все таки она где-то у вас лежит))

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


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

Поверьте, FireDac не имеет встроенного механизма доступа с sqlite. То есть, нужна dll. Все таки она где-то у вас лежит))

Ясно, буду искать и тестировать. Может на виртуалке что-нибудь выясню

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
4 часа назад, Andrey Efimov сказал:

Читайте правила форума. Один вопрос - одна тема.

Вас понял.

 

В общем прога запускается, но к сожалению проблема с БД не решина.

Компоненту FDConnect в свойствах был присвоен путь к базе данных. Соответственно тот путь, который указан в свойствах Компонента статичен и не будет совпадать с путём, где будет лежать прога на другом ПК. Я же хочу чтобы путь определялся динамически.

Методом тыка понял, что FireDac не может программно присвоить путь к БД объекту TFDConnect *Conn.

void __fastcall TMainForm::FormShow(TObject *Sender) {
	// TFDConnection *Conn
	Conn->DriverName = "SQLite";
	Conn->Params->Values['Database'] = ExtractFilePath(Application->ExeName) +
		"psalms.db";
	Conn->Open();
}

То-есть после запуска проги не по пути, по которому я указал в компонете, прога выдаёт ошибку: База данных не найдена.

 

Прошу помочь понять мне, как динамически присвоить путь к БД.

Заранее благодарю.

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


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

Прикладывайте тестовый проект - так проще разбираться в чем у вас проблема

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


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

Прикладывайте тестовый проект - так проще разбираться в чем у вас проблема

Спасибо вам за ваше сообщение, оно подало мне отличную идею, которая наконец решила мою проблему.

 

Ещё раз моя проблема:
FDConnection не мог подключится к БД на чужом ПК с любово места на HDD. Эта проблема заключалась в том, что в компоненте, кинутой на форму, я указывал статический путь к базе данных.

Решение:
Удалить путь к файлу в компонете FDConnection и программно указать его, например в методе формы FormShow или FormCreate.

 

Ещё раз всем спасибо за понимание и поддержку!
С уважением Владимир

test.zip

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


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

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

    • От x11
      При попытке подключиться к базе данных SQLite на эмуляторе с Android  7 получаю исключение:
      Delphi Tokyo + UniDAC 7.
      Эмулятор какой-то неполноценный?
    • От brunnengi
      Здравствуйте.
      Требуется программа на андроид с набором кнопок со следующем функционалом:
      1. Кнопка1 - создать базу в test.sqlite (в том месте где доступ к нему есть только у самого приложения (имею ввиду если это не ROOT телефон, при рут и так всё понятно)
      2. Кнопка2 - создать таблицу в базе test.sqlite с названием "TblTest01" (с разным набором полей на своё усмотрение)
      3. Кнопка3 - создать таблицу в базе test.sqlite с названием "TblTest02" (с разным набором полей на своё усмотрение)
      4. Кнопка4 - Добавить строку в таблицу "TblTest01" (любой набор данных на ваших усмотрение)
      5. Кнопка5 - Удалить строку в таблице "TblTest01" (по любому ключу на ваше усмотрение)
      6. Кнопка6 - Изменить строку в таблице "TblTest01" (по любому ключу и любое значение на ваше усмотрение)
       
      Приложение должно иметь фоновый сервис, который должен получать данные с сервера и добавлять их в базу test.sqlite в таблицу "TblTest02".
      При получение новый данных, сервис должен показать в "шторке" сообщение, по клику на которую открывается само приложение с визуальной частью.
      Т.е. если визуально приложение закрыто, выгружено, не запущено или запущено, фоновый процесс должен сам делать запросы к серверу и добавлять новые данные в базу, если они есть/поступили
      Приложение должно запускаться вместе с системой, после перезагрузки и т.д.
      Использовать только те компоненты что доступны в самой среде из коробки.
      Часть где делается запрос к серверу должен иметь timeout равный 20 секундам.
      Сервис должен грамотно делать запросы к серверу как положено в Андроид приложениях. 
      Серверная часть мне не нужна, можете для теста сами эмулирвать эти процессы.
       
       
      -----
      ЦЕНА: 2500р.
      СРОКИ: Не горит, но в целом где то дней 7 есть
      Перечисляю на QIWI, ЯД, Сбербанк, короче куда скажите.
    • От striker
      Добрый день!
      Работаю с MySQL
      Подключаюсь через FireDac.
      FDQuery+FDConnecton+Bind+Grid
      Запрос выполняется моментально, но как только подключаю Grid - начинает висеть. Grid заполняется очень долго - секунд 12-15.
      Причем результат запроса - всего 230 строк, хоть и join присутствует.
      Куда копать? Может дело быть именно в FMX?
    • От notricky
      Суть вопроса в заголовке.
      Есть ли какие-то настройки у базы или FireDAC чтобы в английской системе (винда 7) русский текст отображался не вопросами, а русским текстом?
      Настройки у БД UTF-8.
    • От Clio
      Добрый день !
      В приложении я использую базу SQLite (полt, содержащие дату и время тип REAL) . В TFDQuery я описал это поле - тип Float и через LiveBindings подключил к TGrid (Date Column). 
      Но в гриде отображается только год, а не полное время. 
      Подскажите, пожалуйста, как необходимо настроить поле в Query и TGrid, чтобы дата и время отображалась правильно.
    • От gelo1
      Здравствуйте ребята. Моё имя Олег. Я из Минска.
      Подскажите пожалуйста. У меня есть приложение для OS Android представляющее собой базу данных в котором задеплоин файл БД SQLite. Хотелось бы пойти дальше и изучить как обновлять этот файл базы на этом приложении из удалённого сервера простора INTERNET. Может у кого есть готовое решение или ссылка где это подробно описано?
      Благодарю.
      С Уважением. Олег.
    • От hryasch
      Добрый вечер. У меня такая проблема - мне нужно, чтобы Android приложение по нажатию на кнопку (к примеру) выдавало диалог, где будет видна файловая система (или спрашивала другое доступное приложение, типо X-PLORE), чтобы я мог выбрать файл ( фотографию к примеру) и нажав "окей" чтобы путь запомнился в какую-нибудь переменную.
       

    • От notricky
      Собственно как это делают люди?

      Речь, конечно, не про выполнение скрипта "update table set...", а про использование Edit/Post с изменением как в Датасете, так и в БД.

      Какие нужны настройки, в частности у TFDQuery.
      // настройки qr.UpdateOptions = [KeyFields = id][UpdateChangedFields = true] // при этом селект не смотрит напрямую в theTable, но id - это поле theTable qr2.UpdateOptions.UpdateTableName := 'theTable'; qr2.Edit; qr2.FieldByName('Str').Value := Format('%s-%d',[qr2.FieldByName('Str').AsString, Code]); qr2.Post; В такой форме позволяет менять датасет, но в БД данные не скидываются. БД SQLite.
  • Последние посетители   0 пользователей онлайн

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