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

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


Bio HaZaRD

Вопрос

Всем привет!

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

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

 

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

Windows-Problemberichtserfassung = Windows Problem Reporting

problem.png

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

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

  • 1
16 часов назад, enatechno сказал:

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

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

Ссылка на комментарий
  • 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

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

Ссылка на комментарий
  • 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
52 минуты назад, Rusland сказал:

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

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

 

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

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

 

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

test.zip

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