Доброго времени суток!
Есть приложение и dll к нему, юзающая InterBase 9. Вот структура каталогов:
%appdir%/myapp.exe
%appdir%/gds32.dll - взят из папки bin Interbase'a
%appdir%/sqldrivers - все имеющиеся драйвера БД, в т.ч. qsqlibase(d)4.dll
%appdir%/DB/db.dll - собственно dll работы с БД.
Доступа к коду самого приложения нет, только к коду отлаживаемой dll. Работа ведется в
MSVS2010 с использованием
Qt 4.8.6.
qsqlibase компилировал согласно инструкции тут:
http://doc.crossplatform.ru/qt/4.5.0/sql-driver.html#qibase-for-borland-interbaseВот содержание
ibase.pro:
TARGET = qsqlibase
SOURCES = main.cpp
INCLUDEPATH += C:\CodeGear\InterBase\SDK\include
LIBS += C:\CodeGear\InterBase\SDK\lib_ms\gds32_ms.lib
include(../../../sql/drivers/ibase/qsql_ibase.pri)
include(../qsqldriverbase.pri)
Вот содержание сгенерированного pro файла отлаживаемой dll:
TEMPLATE = lib
TARGET = db
DESTDIR = ../bin/win32/DB
QT += core gui sql xml
CONFIG += debug
DEFINES += QT_LARGEFILE_SUPPORT QT_SQL_LIB DB_LIB WIN32_LEAN_AND_MEAN QT_XML_LIB QT_DLL
INCLUDEPATH += ./GeneratedFiles \
. \
./GeneratedFiles/Debug \
./3rd-party/Info-ZIP \
./../!_Groundwork \
./../!_Groundwork/App \
./3rd-party/ibtr
LIBS += -lws2_32 \
# -lc:/CodeGear/InterBase/SDK/lib_ms/gds32_ms
# PRECOMPILED_HEADER = StdAfx.h
DEPENDPATH += .
MOC_DIR += ./GeneratedFiles/debug
OBJECTS_DIR += debug
UI_DIR += ./GeneratedFiles
RCC_DIR += ./GeneratedFiles
include(db.pri)
win32:RC_FILE = db.rc
Создание объекта БД:
db_ = QSqlDatabase::addDatabase(opts_.dbEngine(), uid_);
isValid() возвращает false, а в db_.lastError() "Driver not loaded" и в db_.drivers() "QSQLITE QODBS и другие, кроме QIBASE".
Кто-нибудь сталкивался с подобным?
UPD Dovgon (спасибо ему за это) натолкнул на мысль, что драйвер БД может находиться не в той папке. И действительно он искался только по стандартному пути %QTDIR%/plugins/sqldrivers/.