Начиная работу с Qt и Embedded FireBird
Вступление
Эта статья представляет описание первых шагов по установке Qt, Visual Studio и FireBird. Она может быть полезной тем, кто только начинает работать с базой данных FireBird Embedded при помощи Qt провайдера. Также эта статья может пригодиться разработчикам, которые только начинают работать с Qt.
На момент написания мною этой статьи рассматриваемый здесь вопрос был плохо документирован, и именно поэтому я надеюсь, что представленный материал может быть действительно полезным.
В данной статье мы рассмотрим следующие вопросы:
- Инсталляция Qt SDK, его настройка и интеграция в Visual Studio.
- Сборка IBase плагина.
- Программное создание базы данных и установление связи с ней.
- Работа с именем пользователя и паролем для базы данных.
- Мы рассмотрим простые запросы к базе данных, а также вызов хранимых процедур.
Настройка окружения
Для просмотра базы данных, предложенной в качестве примера ниже в данной статье, можно воспользоваться такими клиентами:
Для доступа используйте логин Serg и пароль 12345. Пример базируется на Qt 4.5.2 LGPL.
Для настройки окружения необходимо:
1. Установить Qt SDK
1) Изначально нужно иметь свободное место на диске
2) Запустить инсталляцию SDK (QtSDK 4.5.2). Желательно не менять путь по умолчанию или же установить аналогичную структуру папок, но, например, на диске «D:\».
3) Создать Environmental Variable «QtDIR» и указать такой путь «C:\Qt\2009.03\Qt\» - если путь установки не менялся на шаге 2.
2. Собрать Qt для работы с VS 2005 (2008)
1) Запустить «VS 2005 Command Prompt» в соответствующем разделе меню Пуск.
2) В запущенной консоли перейти в папку QtDIR («C:\Qt\2009.03\Qt\», если на предыдущем этапе использовался путь по умолчанию).
3) Запустить «configure.exe» с такими параметрами:
-plugin-sql- ibase
Эти параметры можно уточнить, запустив
configure.exe -help
4) На вопрос консоли:
Which edition of Qt do you want to use?
— нужно выбрать Open Source Edition.
Затем нужно набрать «y» (’y’ - to accept this license offer).
5) Ожидаем окончания создания файлов VCProj и главного Solution. В конце будет создан Solution «projects.sln» в папке «C:\Qt\2009.03\Qt\».
3. Установить Visual Studio Addon for Qt
1) Закрыть все окна Visual Studio, если они открыты.
2) Запустить Qt-vs-addin-1.0.2.exe
3) Открыть Visual Studio и открыть опции Qt из меню «Qt->Qt Options». Нажать Add и создать имя, например, «Qt 4.5.2». Имя не важно, но оно сохраняется в проекте. Другой человек, открывший проект , может не сразу собрать его, так как увидит сообщение об ошибке (no such Qt version found on this machine или что-то в этом роде). В качестве параметра-пути следует указать путь в папку Qt, что соответствует $(QtDIR), по умолчанию это "C:\Qt\2009.03\Qt\«.В качестве Qt Default Version выбираем только что созданную запись «Qt 4.5.2».
4) Необязательно собирать все проекты. Достаточно собрать только:
- QtCore
- QtGUI
- QtSQl
- QMain
Примечание: Libraries Win32 static library и Qt Library имеют разные настройки для «wchar_t as Built-In», и если вы хотите встроить Win32 static library в Qt приложение, то вам нужно либо собрать Qt без этой опции, либо в Project Settings/С++/Language поменять свойство «Treat wchar_t as Built-In Type» на «No (/Zc:wchar_t-)».
Для отключения этой опции в Qt необходимо перед п.2 сделать следующее:
- Открыть файл qmake.conf. Он расположен по адресу: QtDIR/mkspecs/win32-msvc2005/ qmake.conf. Я работал с Visual Studio 2005, поэтому использовал подпапку «win32-msvc2005». Если же вы работаете с другой версией, то сможете найти этот файл в соответствующей папке.
- В открытом файле необходимо изменить флаг QMAKE_CFLAGS, удалив «-Zc:wchar_t-»
4. Установить FireBird:
Firebird можно скачать отсюда.
5. Собрать Plugin для IBase
1) Зайти в папку $(QtDIR)\ src\plugins\sqldrivers\ibase и собрать проект в Debug and Release.
Перед тем как собирать, нужно установить такие свойства проекта:
- В C/C++/General -> Additional Include Directories необходимо добавить путь к папке include (например, C:\Program Files\Firebird\Firebird_2_1\include).
- В Linker/General -> Additional Library Directories необходимо прописать примерно следующее: C:\Program Files\Firebird\Firebird_2_1\lib.
- Для сборки проекта IBase в нём нужно исправить имя линкуемой библиотеки (Linker/Input -> Additional Dependencies) с «gds32_ms.lib» на «fbclient_ms.lib» — последняя поставляется с FireBird.
2) Установить Embedded Server.
- Embedded Server можно взять по этой ссылке: FireBird Embedded 2.1.3 Release.
- Файл «fbembed.dll» необходимо переименовать в «fbclient.dll».
Соединение с существующей базой данных
Перед тем как устанавливать соединение с базой данных, необходимо сначала подгрузить QIBASE плагин. Если вы решили использовать плагин и грузить его вручную, то для плагина, помещенного в одну папку с EXE файлом, соответствующий код будет выглядеть так:
*PLACEHOLDERS_PRE_2*
Теперь, когда плагин для работы с FireBird подгружен, можно переходить к настройке соединения с нашей базой данных.
*PLACEHOLDERS_PRE_3*
Хочу обратить особое внимание на настройку QSqlDatabase объекта:
*PLACEHOLDERS_PRE_4*
Логин, пароль и полный путь к базе данных можно было передать и в строке соединения, но я столкнулся со следующей проблемой. При передаче вышеперечисленных настроек через строку соединения, а не через функции set...(), они не присваивались database объекту.
Программное создание базы данных FireBird
Для того чтобы создать базу данных программно, необходимо выполнить следующее:
*PLACEHOLDERS_PRE_5*
Почему был выбран именно такой метод создания базы данных? Я имею ввиду isc_dsql_execute_immediate(). Ответ прост — по-другому не вышло. Некоторые провайдеры позволяют создавать базу данных следующим образом:
*PLACEHOLDERS_PRE_6*
НО для данной версии Qt и для IBASE драйвера в частности такой метод не работает. Для детальной информации можно обратиться к примерам из Qt («QtDIR\examples\sql\Connection.h»).
Примечание: Будьте внимательны, FireBird работает только с ASCII кодировкой. Поэтому если ваш путь (filePath) содержит символы Unicode, то функция «isc_dsql_execute_immediate» вернет ошибку.
Запросы к базе данных
Простой Select из базы данных
*PLACEHOLDERS_PRE_7*
где fireBirdDatabase_.CreateQuery() имеет следующий вид:
*PLACEHOLDERS_PRE_8*
Как вызвать хранимую процедуру?
Наша процедура принимает в качестве параметра строку с названием должности — текстовая строка, размер зарплаты для этой должности — целое число, а также описание, которое храниться в бинарном виде (BLOB).
Процедура возвращает ID новой записи.
*PLACEHOLDERS_PRE_9*
Полезные ссылки
- Firebird database.
- FlameRobin (open-source administration tool).
- IBExpert (administration tool, free Personal Edition download).
- Other Firebird tools.
- QtSDK 4.5.2.
12 коментарів
Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.