Сегодня пытался разобраться как подключиться к базе 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 <QMessageBox>
#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

  8 Responses to “Qt и MySQL под Windows. Проблема в QtCreator'e из «коробки»”

  1. И чего так все сложно, еще варианты есть?

    Что делают эти строки?

    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

  2. Всё сделал, на виндовс 7 64 битной работает данный способ, на виндовс хп сп3 не работает, посоветуйте что сделать ?

    • Что вы делаете и что конкретно не получается под Windows XP SP3?

      И еще в догонку, зачем вам это если под Windows 7 это работает? :-)

      Какая версия QT?

  3. Не получается собрать под 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?

  4. да у меня в директории %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

  5. В пуске, в папке QtSDK ищешь Maintain Qt SDK, запускаешь, выбираешь Package, затем Misc...что то там — QtSources и нужную версию исходников.

    После докачки исходников, ищи в новопоявившейся папке исходников этот самый mysql.pro

  6. При этом файла релиз версии может в итоге не случиться. Для его появления нужно 2 последние команды заменить на

    mingw32-make -f Makefile.release

    mingw32-make -f Makefile.release install

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 
 
© 2011 ADTL Blog Suffusion theme by Sayontan Sinha