Russian Qt Forum

Qt => Базы данных => Тема начата: hamlo от Сентябрь 16, 2009, 09:21



Название: QT + MySQL
Отправлено: hamlo от Сентябрь 16, 2009, 09:21
Изибтая уже тема

http://wiki.qtcentre.org/index.php?title=Building_the_QMYSQL_plugin_on_Windows_using_MinGW

Собирал так

в результате вид mysql.pro

Код:
QT += sql
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += . "D:\MySQL\include"
LIBS += "D:\MySQL\lib\opt\libmysql.a"

# Input
HEADERS += ../../../sql/drivers/mysql/qsql_mysql.h
SOURCES += main.cpp ../../../sql/drivers/mysql/qsql_mysql.cpp

И полный вывод компилятора

Цитировать
Running build steps for project mysql...
Configuration unchanged, skipping QMake step.
Starting: D:/Qt/2009.03/mingw/bin/mingw32-make.exe -w
mingw32-make: Entering directory `D:/Qt/2009.03/qt/src/plugins/sqldrivers/mysql'
D:/Qt/2009.03/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `D:/Qt/2009.03/qt/src/plugins/sqldrivers/mysql'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"." -I"d:\MySQL\include" -I"..\..\..\sql\kernel" -I"..\..\..\..\include\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\win32-g++" -o debug\main.o main.cpp
D:/Qt/2009.03/qt/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"." -I"d:\MySQL\include" -I"..\..\..\sql\kernel" -I"..\..\..\..\include\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\win32-g++" -D__GNUC__ -DWIN32 ..\..\..\sql\drivers\mysql\qsql_mysql.cpp -o debug\qsql_mysql.moc
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"." -I"d:\MySQL\include" -I"..\..\..\sql\kernel" -I"..\..\..\..\include\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\win32-g++" -o debug\qsql_mysql.o ..\..\..\sql\drivers\mysql\qsql_mysql.cpp
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In constructor `QMYSQLDriver::QMYSQLDriver(QObject*)':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1092: warning: non-inline function 'QMYSQLDriver::QMYSQLDriver(QObject*)' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In constructor `QMYSQLDriver::QMYSQLDriver(MYSQL*, QObject*)':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1104: warning: non-inline function 'QMYSQLDriver::QMYSQLDriver(MYSQL*, QObject*)' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: At global scope:
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1122: warning: non-inline function 'void QMYSQLDriver::init()' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1122: warning: 'void QMYSQLDriver::init()' defined locally after being referenced with dllimport linkage
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In destructor `virtual QMYSQLDriver::~QMYSQLDriver()':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1129: warning: non-inline function 'virtual QMYSQLDriver::~QMYSQLDriver()' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual bool QMYSQLDriver::hasFeature(QSqlDriver::DriverFeature) const':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1137: warning: non-inline function 'virtual bool QMYSQLDriver::hasFeature(QSqlDriver::DriverFeature) const' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual bool QMYSQLDriver::open(const QString&, const QString&, const QString&, const QString&, int, const QString&)':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1203: warning: non-inline function 'virtual bool QMYSQLDriver::open(const QString&, const QString&, const QString&, const QString&, int, const QString&)' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: At global scope:
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1292: warning: non-inline function 'virtual void QMYSQLDriver::close()' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual QSqlResult* QMYSQLDriver::createResult() const':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1305: warning: non-inline function 'virtual QSqlResult* QMYSQLDriver::createResult() const' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual QStringList QMYSQLDriver::tables(QSql::TableType) const':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1310: warning: non-inline function 'virtual QStringList QMYSQLDriver::tables(QSql::TableType) const' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual QSqlIndex QMYSQLDriver::primaryIndex(const QString&) const':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1333: warning: non-inline function 'virtual QSqlIndex QMYSQLDriver::primaryIndex(const QString&) const' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: At global scope:
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1359: warning: non-inline function 'virtual QSqlRecord QMYSQLDriver::record(const QString&) const' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual QVariant QMYSQLDriver::handle() const':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1375: warning: non-inline function 'virtual QVariant QMYSQLDriver::handle() const' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual bool QMYSQLDriver::beginTransaction()':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1380: warning: non-inline function 'virtual bool QMYSQLDriver::beginTransaction()' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual bool QMYSQLDriver::commitTransaction()':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1397: warning: non-inline function 'virtual bool QMYSQLDriver::commitTransaction()' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual bool QMYSQLDriver::rollbackTransaction()':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1414: warning: non-inline function 'virtual bool QMYSQLDriver::rollbackTransaction()' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: In member function `virtual QString QMYSQLDriver::formatValue(const QSqlField&, bool) const':
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1431: warning: non-inline function 'virtual QString QMYSQLDriver::formatValue(const QSqlField&, bool) const' is defined after prior declaration as dllimport: attribute ignored
..\..\..\sql\drivers\mysql\qsql_mysql.cpp: At global scope:
..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1465: warning: non-inline function 'virtual QString QMYSQLDriver::escapeIdentifier(const QString&, QSqlDriver::IdentifierType) const' is defined after prior declaration as dllimport: attribute ignored
In file included from ..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1476:
debug/qsql_mysql.moc:72:26: warning: no newline at end of file
D:/Qt/2009.03/qt/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"." -I"d:\MySQL\include" -I"..\..\..\sql\kernel" -I"..\..\..\..\include\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\win32-g++" -D__GNUC__ -DWIN32 ..\..\..\sql\drivers\mysql\qsql_mysql.h -o debug\moc_qsql_mysql.cpp
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"." -I"d:\MySQL\include" -I"..\..\..\sql\kernel" -I"..\..\..\..\include\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\win32-g++" -o debug\moc_qsql_mysql.o debug\moc_qsql_mysql.cpp
debug\moc_qsql_mysql.cpp:38: error: definition of static data member 'QMYSQLDriver::staticMetaObject' of dllimport'd class
debug\moc_qsql_mysql.cpp:38: warning: 'QMYSQLDriver::staticMetaObject' defined locally after being referenced with dllimport linkage
mingw32-make[1]: Leaving directory `D:/Qt/2009.03/qt/src/plugins/sqldrivers/mysql'
mingw32-make: Leaving directory `D:/Qt/2009.03/qt/src/plugins/sqldrivers/mysql'
mingw32-make[1]: *** [debug/moc_qsql_mysql.o] Error 1
mingw32-make: *** [debug] Error 2
Exited with code 2.
Error while building project mysql
When executing build step 'Make'

Вот ошибка
Цитировать
D:/Qt/2009.03/qt/src/plugins/sqldrivers/mysql/debug/moc_qsql_mysql.cpp:38: error: definition of static data member 'QMYSQLDriver::staticMetaObject' of dllimport'd class

Если так продолжится - уйду на C# или Java

Помогите! Я уже винду снес и поставил по новой, чтобы он ODBC драйвер увидел. Теперь мускульный перестал видеть и не собирает, а у меня проект горит!



Название: Re: QT + MySQL
Отправлено: Rcus от Сентябрь 16, 2009, 09:38
Хм, в статье по ссылке ничего не говорится о редактировании .pro файла. Он теперь совсем не походит на то что в оригинале было.
Цитировать
Если так продолжится - уйду на C# или Java
/* испугался и открыл секреты решения всех проблем */


Название: Re: QT + MySQL
Отправлено: hamlo от Сентябрь 16, 2009, 09:40
Смысл всех изменений в статье сводится именно к этому...
Пока пойду опять перставлю QT опять...

Нашел вот что

http://qt.shamangrad.net/doku.php?id=%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80%D1%8B_%D0%B1%D0%B0%D0%B7_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_sql

Но и те драйвера не видит!

http://qt.shamangrad.net/lib/exe/fetch.php?media=drivers:mysql.rar

 ???


Название: Re: QT + MySQL
Отправлено: hamlo от Сентябрь 16, 2009, 09:49
Дайте плз линк на драйвера для 4.5.2 Qt. Самый простой выход. Буду безмерно благодарен.

ЗЫ После сборки по инструкции опять эта ошибка, причем пробовал на 3-ех машинах.


Название: Re: QT + MySQL
Отправлено: Rcus от Сентябрь 16, 2009, 10:00
Самый простой выход это точно следовать инструкции и не править mysql.pro руками.
Удаление include(../qsqldriverbase.pri) привело в конечном счете к ошибке сборки /* здесь был абзац о том как именно это влияет, но он вырезан внутренним троллем */


Название: Re: QT + MySQL
Отправлено: hamlo от Сентябрь 16, 2009, 10:04
qpluginbase.pri - на месте (но 1 уровень выше). Без изменения pro файла QT += sql или без включения к qmake "INCLUDEPATH+=D:\Qt\2009.03\qt\src\sql\kernel" получаем в консоль

Код:
D:/Qt/2009.03/qt/src/plugins/sqldrivers/mysql/main.cpp:42: qsqldriverplugin.h: No such file or directory

Если делать по шагам, то ткните меня носом, чт оя мог упустить в трех командах. Вот новая винда и вот я из SDK ставлю Qt.

Качаю mingw-utils

Добавляю в переменную path где она может найти qmake и mingw32-make (пути до папок qt и mingw в них папки bin).

Добавляю путь до mingw-utils, чтобы виделось reimp.exe

далее делаю reimp libmysql.lib (который получаю из установщика MySQL) для получения совместимого .a файла, требуемого для сборки либы для QT

далее в Makefile (в  директории сборки mysql driver %qtdir%/src/plugins/sqldrivers/mysql) добавляю пути (INCLUDEPATH +=) где можно найти заголовочный файлы mysql и путь непосредсвенно до самой .a библиотеки.

Далее пытаюсь собрать с помощью mingw32-make -f Makefile (тот самый мейк фаил в котором указаны пути до заголовочных файлов и мускульная .a либа). Ясенно нигде не указано где искать заголовочные файлы QtSql модуля и получаем вышеприведенную ошибку.

При попытке указать их расположение явно, получаем какую то тарабарщину... Все.





Название: Re: QT + MySQL
Отправлено: Rcus от Сентябрь 16, 2009, 10:12
Эм на каком месте? Он не включается напрямую в mysql.pro, а в qsqldriverbase.pri уже есть строка QT = core sql.


Название: Re: QT + MySQL
Отправлено: hamlo от Сентябрь 16, 2009, 10:18
Выложите плз сборку мускульных дров для 4.4.2.....  :'(

ЗЫ По вышеприведенной ссылке есть дрова для 4.3.4... оч не хочется решать все что связно с Qt какими то костылями и откатами до старых версий...


Название: Re: QT + MySQL
Отправлено: hamlo от Сентябрь 16, 2009, 10:43
Ппц... поставил SDK на диск C:/ Все собралось - но драйвера так и не видит... Это ваще логика где?


Название: Re: QT + MySQL
Отправлено: hamlo от Сентябрь 16, 2009, 11:11
Ну да что же это за такое!

Код:
C:\Qt\2009.03\qt\src\plugins\sqldrivers\mysql>mingw32-make install
mingw32-make -f Makefile.Debug install
mingw32-make[1]: Entering directory `C:/Qt/2009.03/qt/src/plugins/sqldrivers/mys
ql'
copy /y "debug\qsqlmysqld4.dll" "c:\Qt\2009.03\qt\plugins\sqldrivers\qsqlmysqld4
.dll"
Скопировано файлов:         1.
mingw32-make[1]: Leaving directory `C:/Qt/2009.03/qt/src/plugins/sqldrivers/mysq
l'
После сборки. и все... и опять

QMYSQL driver not loaded...

ВЫВОД! Кадры из Троллтеха кладут в SDK исходники НЕ ТОЙ версию QT, которая поставляется в бинарном виде! Потому что после пересбора Qt мускульный драйвер видится, и пропадает, без пересборки ODBC.

ЗЫ Я извиняюсь, но это чистой воды МУДАЧЕСТВО. Это за все мои страдания.. казлы млин и уроды... все заработало... Надеюсь, этот пост поможет ещё кому либо из новичков при использовании Qt из SDK, по крайней мере под виндой...


Название: Re: QT + MySQL
Отправлено: Rcus от Сентябрь 16, 2009, 11:41
Хм... интересные выводы. У меня аж один из логических блоков мозга закоротило.


Название: Re: QT + MySQL
Отправлено: hamlo от Сентябрь 16, 2009, 11:52
Ну тогда почему мускульные дрова видятся только после пересборки 4.5.2 из исходников?


Название: Re: QT + MySQL
Отправлено: Rcus от Сентябрь 16, 2009, 12:11
Ну обычно в таких случаях принято открыть справку и посмотреть что там написано. Вот хорошая причина может быть
Цитировать
If you experience plugin load problems and see output like this:

 QSqlDatabase: QMYSQL driver not loaded
 QSqlDatabase: available drivers: QMYSQL
The problem is usually that the plugin had the wrong build key. This might require removing an entry from the plugin cache. Here is some more plugin debugging info.
Интересно, там еще по ссылкам много всего.


Название: Re: QT + MySQL
Отправлено: hamlo от Сентябрь 16, 2009, 13:13
Омг... а много ещё таких "сюрпризов" может быть? Типа "внутреннего идентификатора сборки"?


Название: Re: QT + MySQL
Отправлено: Rcus от Сентябрь 16, 2009, 13:29
Конечно он есть :) Не надо страдать параноей - наслаждайтесь.