Сегодня пытался разобраться как подключиться к базе MySQL из Qt.
В общем-то это даже не проблема, а скорее «характерная» особенность...
Все эксперименты проводил под qt-sdk-win-opensource-2009.03.1
Открыть базу в принципе не сложно. Вот кусочек кода который это делает:
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("host");
db.setDatabaseName("database");
db.setUserName("user");
db.setPassword("password");
if (!db.open()) {
QMessageBox::critical(0, tr("Cannot open database"),
tr("Unable to establish a database connection.\n"
), QMessageBox::Cancel);
}
Не забываем добавить в файл проекта:
QT += sql
И соответсвующие заголовки в вашу программу. В моем случае это:
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
В общем запускаем и получаем:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
Как оказалось драйвер MySQL по умолчанию не собран в версии под Windows.
Как вариант можно собрать плагин самостоятельно. Этим путем я и решил пойти.
Загружаем дистрибутив MySQL. Запускам установку. Выбираем «Custom Install».
Установите модуль «MySQL Client» и «Libs & Include Files». И лучше если поставить в c:\mysql потому как директива -I компилятора не поддерживает под Windows длинных имен файлов, вам бы пришлось писать пути в формате 8.3
Далее из консоли «Qt Command Prompt» даем следующие команды:
cd %QTDIR%\src\plugins\sqldrivers\mysql
qmake -o Makefile "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MySQL\lib\opt\libmysql.lib" mysql.pro
mingw32-make
mingw32-make install
Теоретически к каталоге %QTDIR%\qt\plugins\sdldrivers\ должны появится два файла
qsqlmysql4.dll
qsqlmysql4d.dll
Это собствеено наши плагины.
Возможно, что после этого ваша программа все равно не заработает при запуске из под QtCreator'a.
Причина также может заключаться в том, что Qt кеширует данные о загрузке плагинов. То есть, если Qt один раз не смогла загрузить плагин, то потом даже не пробует. Чтобы очистить кеш в Windows, необходимо в регистре удалить ненужные записи в ключах HKEY_CURRENT_USER\Software\Trolltech\OrganizationDefaults\Qt Plugin Cache 4.5.debug
HKEY_CURRENT_USER\Software\Trolltech\OrganizationDefaults\Qt Plugin Cache 4.5.false
Dll должны лежать в $QTDIR$\plugins\sqldrivers. Также необходимо указать путь к «родным» библиотекам БД, либо скопировать их в debug\release. В случае с MySQL это libmySQL.dll которую можно найти там, где был установлен MySQL
Выводы — как-то это всё «не Ice» !!!
Спасибо — crossplatform.ru
И чего так все сложно, еще варианты есть?
Что делают эти строки?
cd %QTDIR%\src\plugins\sqldrivers\mysql
qmake -o Makefile «INCLUDEPATH+=C:\MySQL\include» «LIBS+=C:\MySQL\lib\opt\libmysql.lib» mysql.pro
mingw32-make
mingw32-make install
Это сборка драйвера базы данных для Qt
Всё сделал, на виндовс 7 64 битной работает данный способ, на виндовс хп сп3 не работает, посоветуйте что сделать ?
Что вы делаете и что конкретно не получается под Windows XP SP3?
И еще в догонку, зачем вам это если под Windows 7 это работает?
Какая версия QT?
Не получается собрать под QT SDK 1.1 в WinXP32 sp3, может напишете обновленную инструкцию по сборке под sdr 1.1?
«cd %QTDIR%\src\plugins\sqldrivers\mysql»
в %QTDIR%\src\plugins\sqldrivers нет каталога mysql
«qmake -o Makefile „INCLUDEPATH+=C:\MySQL\include“ „LIBS+=C:\MySQL\lib\opt\libmysql.lib“ mysql.pro»
откуда брать файл mysql.pro?
да у меня в директории %QTDIR%\src\plugins\sqldrivers\mysql есть проект mysql.pro запуская команду:
«qmake -o Makefile „INCLUDEPATH+=C:\MySQL\include“ „LIBS+=C:\MySQL\lib\opt\libmysql.lib“ mysql.pro»
ругается, что не может найди mysql.pro
В пуске, в папке QtSDK ищешь Maintain Qt SDK, запускаешь, выбираешь Package, затем Misc...что то там — QtSources и нужную версию исходников.
После докачки исходников, ищи в новопоявившейся папке исходников этот самый mysql.pro
При этом файла релиз версии может в итоге не случиться. Для его появления нужно 2 последние команды заменить на
mingw32-make -f Makefile.release
mingw32-make -f Makefile.release install