пятница, 1 июля 2011 г.

Qt: сборка плагина QIBASE. Qt + FireBird Embedded.

     Задумал я тут в недавнем прошлом переписать на Qt программу ранее созданную в Visual Basic 6.0. Попутно решил заменить "классический" сервер БД MySQL, используемый сейчас, каким-либо встраиваемым решением. Основная идея задумки - получить кросс-платформенное и портативное приложение. Исключая хранилища данных основанных на файлах, функционал Qt предложил на выбор, по-сути, три возможных решения: 1) SQLite, 2) MySQL Embedded, 3) FireBird Embedded.
     Первым делом, конечно же, было решено задействовать MySQL Embedded. Следуя инструкции, описанной в справочной системе Qt, собрал плагин QMYSQL слинкованный с MySQL Embedded библиотекой. Сборка прошла успешно, тестовое приложение плагин находило, а вот работать категорически отказывалось. Перелопатив десяток "веток" форумов по теме "Qt + MySQL Embedded" вышел на один сайт с подробным описанием манипуляций, необходимых что бы эту связку заставить работать. Правда, почитав представленную информацию, пришлось отказаться от идеи, т.к. один из ключевых моментов - статическая линковка библиотеки MySQL Embedded (что мне категорически не подходит). Не знаю справедливо ли это для пользователей Linux, но то, что и них есть свои проблемы с ее работой это факт (хотя, возможно, им просто не хватало терпения или библиотеки hands.so ;-)). По некоторым слухам, в Qt 4.8 обещают включить отдельно плагин для MySQL Embedded (на момент написания этого очерка в snapshot Qt 4.8 все оставалось как и прежде - один плагин), пока же этого не произошло, для себя я решил "забыть туда дорогу" :-).
     Следующая на очереди была СУБД SQLite. Сразу порадовала ее поддержка Qt прямо "из коробки", а так же внутренняя кодировка данных - UTF-8/UTF-16. Но радоваться долго не пришлось, как оказалось, SQLite регистронезависимый поиск поддерживает только для символов входящих в кодировку ASCII. Для всех остальных предлагается писать свои функции сравнения, либо использовать связку со сторонней библиотекой ICU. Перспектива собирать библиотеку ICU и перекомпилировать SQLite с ее участием ... меня не впечатлила и я решил, предварительно, ознакомиться с FireBird Embedded. Сделал я это точно не зря - и "головняка" меньше и возможностей больше ;-).