Для работы с FireBird без запущенного сервера необходимо использовать Embedded версию программы, для для сборки плагина и его совмещения с Qt необходимо проделать следующее:
Сборка библиотеки в Qt 2010.05.
1) Скачаваем с официального сайта FireBird версии сервера Superclassic / Classic и Embedded (лучше в архивах, иначе придётся устанавливать).
2) Распаковываем архив сервер Classic в папку, например - "C:\FB".
3) Заходим в папку с исходниками через консоль cmd:
"cd C:\Qt\2010.05\qt\src\plugins\sqldrivers\ibase"
В QtSDK iBase находится в папке - "C:\QtSDK\QtSources\...".
4) Выполняем команду:
(лучше перед этим добавить в "Система"->"Дополнительные парметры системы"->""Переменные среды"->"Системные переменные"->"Path" строчку ";C:\Qt\2010.05\qt\bin;C:\Qt\2010.05\mingw\bin")
"qmake "INCLUDEPATH+=C:/FB/include" "LIBS+=C:/FB/lib/fbclient_ms.lib" ibase.pro"
5) Выполняем команду:
"mingw32-make.exe all"
("C:\Qt\2010.05\mingw\bin\mingw32-make.exe all")
6) После удачной сборки, библиотеки(qsqlibase4.dll, qsqlibased4.dll, libqsqlibase4.a, libqsqlibased4.a) сами
перепишутся в папку "C:\Qt\2010.05\qt\plugins\sqldrivers". С их помощью можно работать при условии что есть FireBird Server(установлен на этой машине или на какой-то другой(по сети)).
В QtSDK библиотеки должны лежать в папке - "C:\QtSDK\Desktop\Qt\4.7.4\mingw\plugins\sqldrivers" для того чтобы сам Qt их мог найти.
Для работы самой программы нужна одна из библиотек, в зависимости от того debug или release - qsqlibased4.dll или qsqlibase4.dll.
Библиотека должна лежать в папке "sqldrivers" созданной рядом с exe. Например exe файл у нас лежит
в папке "C:\Qt\2010.05\Test" - тогда библиотека "qsqlibased4.dll" должна быть в "C:\Qt\2010.05\Test\sqldrivers".
Если мы хотим просто работать с сервером FireBird, то к exe файлу нужно положить библиотеку "fbclient.dll" из нашей папки "C:\FB".
7) Далее нам нужно сделать что бы мы могли работать без установленного FireBird Server-а. Распаковываем Embedded куда либо.
8 ) В распакованной папки Embedded переименовываем "fbembed.dll" в "fbclient.dll".
9) Переписываем наш переименованный файл "fbclient.dll" к exe файлу(заменяем если мы туда складывали обычный "fbclient.dll").
10) Туда же складываем из каталога Embedded файлы: firebird.msg, ib_util.dll, все файлы начинающиеся с icu*, каталог intl, каталог udf.
11) Как было написано в одной инструкции если планируете использовать псевдонимы для доступа к БД, то потребуется файл aliases.conf, а если вам потребуется указать специфичные настройки БД (например, местоположение БД), то не забудьте добавить и файл firebird.conf.
12) Как было написано в той же инструкции: в FireBird Embedded уровень доступа не проверяется, к БД может подключаться любой, кто имеет физический доступ к файлу БД. Доступ к БД осуществляется по локальному протоколу, т.е. вместо указания имени хоста (localhost etc.) необходимо указывать местоположение файла БД.
Подключенный клиент блокирует файл БД, т.е. одновременно с БД может работать только один пользователь (правда встраиваемые решения редко разрабатываются как многопользовательские).
13) Что бы не получить Сообщение с ошибкой "Unable to complete network request to host..." в исходном коде не нужно указывать HostName("setHostName").
Примерчик кода:
QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
ui->comboBox->addItems(db.drivers());
db.setDatabaseName("STAND.FDB");
db.setUserName("SYSDBA");
db.setPassword("masterkey");
if ( !db.open() ) {
QSqlError er = db.lastError();
QMessageBox::information(0, "Error", er.text());
}
Ссылка на страницу с которой была взята некоторая информация: "
http://codedchaos.blogspot.com/2011/07/qt-qibase-qt-firebird-embedded.html".
fbembed.dll включает в себя клиент и сервер Firebird Super Server.
firebird.msg файл содержит сообщения сервера (в основном об ошибках).
Каталог "intl" - файлы gdsintl.dll, fbintl.dll с альтернативными наборами кодировок.
Каталог "udf" (User Defined Functions) - используется для запросов или косвенно в триггерах и процедурах базы данных
ib_util.dll определяет какие библиотеки следует использовать для аллокации блоков памяти, набор полезных UDF.
icu* - что то для работы с многопоточностью