Конференцiя React fwdays. Приєднуйся безкоштовно або бери квитки поки regular | 27 березня
×Закрыть

Начиная работу с Qt и Embedded FireBird

Вступление

Эта статья представляет описание первых шагов по установке Qt, Visual Studio и FireBird. Она может быть полезной тем, кто только начинает работать с базой данных FireBird Embedded при помощи Qt провайдера. Также эта статья может пригодиться разработчикам, которые только начинают работать с Qt.

На момент написания мною этой статьи рассматриваемый здесь вопрос был плохо документирован, и именно поэтому я надеюсь, что представленный материал может быть действительно полезным.

В данной статье мы рассмотрим следующие вопросы:

  1. Инсталляция Qt SDK, его настройка и интеграция в Visual Studio.
  2. Сборка IBase плагина.
  3. Программное создание базы данных и установление связи с ней.
  4. Работа с именем пользователя и паролем для базы данных.
  5. Мы рассмотрим простые запросы к базе данных, а также вызов хранимых процедур.

Настройка окружения

Для просмотра базы данных, предложенной в качестве примера ниже в данной статье, можно воспользоваться такими клиентами:

Для доступа используйте логин Serg и пароль 12345. Пример базируется на Qt 4.5.2 LGPL.

Для настройки окружения необходимо:

1. Установить Qt SDK

1) Изначально нужно иметь свободное место на диске (2-3 GB, если нужно будет собирать все библиотеки и примеры, иначе около 1.5 GB).

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*

Полезные ссылки

  1. Firebird database.
  2. FlameRobin (open-source administration tool).
  3. IBExpert (administration tool, free Personal Edition download).
  4. Other Firebird tools.
  5. QtSDK 4.5.2.
👍НравитсяПонравилось0
В избранноеВ избранном0
Подписаться на автора
LinkedIn



Підписуйтесь: SoundCloud | Google Podcast | YouTube


12 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Ооо, firebird, помню юзал его 10 лет назад!

А що, для Firebird Embedded треба задавати пароль для підключення? Давно?
Взагалі-то захист рівня БД буде в Firebird 3.0, якого навіть в альфах ще не буде.
Це крім того, що існує trusted authentication, яка використовує автентифікацію засобами ОС.
Далі, ви використовуєте UNICODE_FSS для створення бази. Чукча пісатєль?
www.ibase.ru/...nicode_faq.html

І останнє, стаття не рівня dou, бо занадто тривіально.

Так і є.
Оригінал: www.codeproject.com/...t-and-firebird-start.aspx
і тут: www.apriorit.com/...-qt-and-embedded-firebird

Питання: чи потрібне таке на ДОУ?

Ну как бы в ссылке, Вами приведённой, автор тот же самый.

Дійсно, ви праві. Авторство не порушене. Це добре.
Однак, оригінал датується груднем 2009 року. Навіщо ця стаття на ДОУ в кінці 2011?

Собственно, это авторский перевод статьи.

Замечание насчет возраста принимается.

ДОУ стає хабром?
Усе це детально описано в документації з Qt, навіщо повторювати?
Посилання на старезну версію Qt SDK взагалі насторожує.
Навіщо використовувати версію 4.5.2, яка була випущена 2.5 роки тому?

Взагалі стаття схожа на переклад/перепост чиїхось заміток в блозі.

ДОУ стає хабром?

Ну якщо ДОУ стане Хабром в найкращих його традиціях (а не те що зараз), то в принципі буде цікаво.

А в чому перевага Embedded FireBird над sqlite?

Тим що це повноцінна БД з підтримкою усієї функціональності властивої для «серйозних» БД (тригери, вбудовані процедури, і т.п.)
Вбудованість тут полягає в тому, що механізми спільного доступу відключені, з БД працює виключно один клієнт — додаток, в яку її вбудували.

К слову, версии не шибко новые Вы указали. Во-первых, для VS2008 есть инсталлятор, во-вторых, VS Add-in посвежее не помешает (верия 1.1.9 уже есть).

QT — это сокращение от QuickTime

Исправьте, пожалуйста, на Qt — а то сильно с толку сбивает

Подписаться на комментарии