Russian Qt Forum
Ноябрь 24, 2024, 14:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.7 (MinGW) + FireBird 2.5 : driver not loaded  (Прочитано 9009 раз)
vlad-mal
Гость
« : Ноябрь 11, 2010, 11:58 »

Всем привет.
Под утро совсем мозги склеились, посему прошу помощи:
Выполни сборку драйвера QIBASE с помощью батника следующего содержания:

Код:
set QTDIR=C:\Qt\2010.05\qt
set PATH=C:\Qt\2010.05\qt\bin
set PATH=%PATH%;C:\Qt\2010.05\bin;C:\Qt\2010.05\mingw\bin
set PATH=%PATH%;%SystemRoot%\System32
set QMAKESPEC=win32-g++

qmake -o Makefile "INCLUDEPATH+=D:\\FireBird_2_5\\include" "LIBS+=D:\\FireBird_2_5\\lib\\fbclient_ms.lib"

mingw32-make

pause

В результате чего в подкаталоге C:\Qt\2010.05\qt\plugins\sqldrivers появились 4 новых файла:

Код:
qsqlibase4.dll
qsqlibased4.dll
libqsqlibase4.a
libqsqlibased4.a
Однако, при попытке загрузки драйвера:

Код:
      QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");

Вижу, что:

QSqlDatabase: QIBASE driver not loaded
QSqlDatabase: available drivers: QFIREBIRD QSQLITE QODBC3 QODBC


Может быть, сборка выполнена неправильно? Если следовать документации буквально:

Цитировать
How to Build the QIBASE Plugin on Windows
The following assumes InterBase or Firebird is installed in C:\interbase:
...
If you are using Firebird, the Firebird library has to be set explicitely:
Код:
 cd %QTDIR%\src\plugins\sqldrivers\ibase
 qmake "INCLUDEPATH+=C:\interbase\include" "LIBS+=-lfbclient" ibase.pro
 nmake
If you are not using a Microsoft compiler, replace nmake with make in the line above.
- то сборку выполнить вообще невозможно (из-за "LIBS+=-lfbclient"). Вследствие чего и был написан приведенный выше батник.
...
Что бы еще покрутить? Строит глазки
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Ноябрь 11, 2010, 12:05 »

......available drivers: QFIREBIRD..........
Какбэ намекает.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
vlad-mal
Гость
« Ответ #2 : Ноябрь 11, 2010, 12:08 »

Пантер, я пробую и тот, и другой.
В частности, работа со Stored Procedures интересует и с Returning значениями.

В "стандартном" работа с эвентами есть.
Записан
vlad-mal
Гость
« Ответ #3 : Ноябрь 11, 2010, 12:12 »

Да, c QIBASE получилось: просто недочитал один абзац документации:

Цитировать
Troubleshooting
...
Ensure that the client libraries of the DBMS are available on the system.

Положил возле .exe клиентскую библиотеку (fbclient.dll), и все заработало.
(А с QFIREBIRD драйвером - не надо было? Шокированный)
...
Блин, вот ведь документация - и с ошибками, и вообще фиг догадаешься....
Записан
vlad-mal
Гость
« Ответ #4 : Ноябрь 11, 2010, 12:37 »

...Положил возле .exe клиентскую библиотеку (fbclient.dll), и все заработало.
(А с QFIREBIRD драйвером - не надо было? Шокированный)
...

Ха, оказывается, там сама ibpp клиентскую библиотеку ищет, в следующем порядке:
Цитировать

- fbembed.dll from the host application executable directory,
- fbclient.dll from the host application executable directory,
- fbclient.dll from the directory specified by the DefaultInstance registry value of the SOFTWARE\Firebird Project\Firebird Server\Instances registry key,
- fbclient.dll without specifying any path, such that the system will choose locations from which to try (usually the system directories)
- gds32.dll, for compatibility purposes, without specifying any path, the system will decide from which locations to try (usually the system directories).


Да, FireBird - хитрая штука, не два байта переслать...
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Ноябрь 11, 2010, 14:26 »

>>Положил возле .exe клиентскую библиотеку
старая песня о главном, используемые библиотеки должны быть доступны, на виндовозе это означает, что в переменной окружения PATH должен быть путь к ней
Записан

Юра.
crossly
Гость
« Ответ #6 : Ноябрь 11, 2010, 14:50 »

Цитировать
Да, FireBird - хитрая штука, не два байта переслать...
и дело тут совсем не в firebird... как уже сказал Юрий... все динамически линкуемые библиотеки должны быть доступны....
Записан
vlad-mal
Гость
« Ответ #7 : Ноябрь 11, 2010, 20:09 »

Ну...
Параллельно с QIBASE я экспериментировал с QFIREBIRD, было странным видеть, что QFIREBIRD доступна, а QIBASE - нет: и сервер, и клиентская библиотека  у меня одна и та же.
При работе с QFIREBIRD я не выкладывал  fbclient.dll ни в system, ни в каталог программы - все работало. Естественно, ожидал того же поведения от QIBASE.

Выяснилось, что из-за того, что у QFIREBIRD в качестве ядра используется библиотека ibpp, никаких fbclient.dll "подкладывать" не надо было: она ищет fbclient.dll не просто по "системному" пути, а в т.ч. и по записи в реестре об исталляции FB (HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances\DefaultInstance).

Век живи - век учись.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 23.