QT + MySQL brak połączenia z bazą danych

0

Witam wszystkich i proszę o pomoc w rozwiązaniu tego problemu.

Sprawa wygląda tak: Pracuje na Win7 64bit, mam zainstalowaną baze danych MySQL (najnowszą wersje ze strony mysql.com), QtSDK też najnowszą wersje. Chcę połączyć się za pomocą aplikacji z bazą danych.

plik projektu:

#-------------------------------------------------
#
# Project created by QtCreator 2012-06-20T22:44:09
#
#-------------------------------------------------

QT       += core
QT       += sql
QT       -= gui

TARGET = nienazwany
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp

plik .cpp

#include <QtCore/QCoreApplication>
#include <QtSql>
#include <QtDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    if (db.isDriverAvailable("QODBC")) 
        {
        qDebug()<<"Sterownik dostępny";
        }
    else
        {
        qDebug()<<"Brak sterownika";
        }
    
    db.setHostName("localhost\\MySQL55");
    db.setPort(3306);
    db.setDatabaseName("hagop");

    if(db.open())
    {
        qDebug() << "jest polaczenie";
        db.close();
    }
    else
    {
        qDebug() << "brak polaczenia - " << db.lastError();
    }

    return a.exec();
}

Po uruchomieniu programu otrzymuje:
user image

Ustawione tez ma DSN za pomocą ODBC32:
user image

Co robię źle że nie mogę się połączyć?

PS nie wiem dlaczego obrazki się nie załadowały, w podglądzie są.

0

Po 1 to dodajesz bazę QODBC a nie QMySQL. Co wypluwa QSqlDatabase::drivers(); ?

0

("QSQLITE", "QODBC3", "QODBC")

Nie mam takiego sterownika jak QMYSQL.

0

Musisz sterownik dodać do Qt. Opisane jak to zrobić jest w dokumentacji: http://qt-project.org/doc/qt-5.0/sql-driver.html#how-to-build-the-qmysql-plugin-on-windows co prawda jest to dla wersji 5.0, ale w obecnej nie powinno to się różnić.

0

W linku który mi dałeś jest sporo niejasności (jak dla mnie).
1.W kodzie: qmake "INCLUDEPATH+=D:\MySQL\include" "LIBS+=D:\MYSQL\MySQL Server <version>\lib\opt\libmysql.lib" mysql.pro (ścieżki moje) W katalogi MySQL nie ma katalogu include, taki katalog znajduje się mysql\mysql server 5.5
2. Zmieniając te ścieżki wywala mi brak pliku mysql.pro.

Znalazłem http://ieatbinary.com/2011/07/11/how-to-enable-mysql-support-in-qt-sdk-for-windows/ coś takiego i postępując zgodnie z tym otrzymuję:

C:\Windows\system32>d:

D:\>set mysql=d:\MySQL\MySQL Server 5.5

D:\>cd QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql\

D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql>qmake "INCLUDEPATH+=%mysql%\include" "LIBS+=%mysql%\lib\libmysql.lib" -o Makefile mysql.pro
WARNING: (internal):1: Unescaped backslashes are deprecated.
WARNING: (internal):1: Unescaped backslashes are deprecated.
WARNING: (internal):1: Unescaped backslashes are deprecated.

D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql>mingw32-make
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `D:/QtSDK/QtSources/4.8.1/src/plugins/sqldrivers/mysql'
g++ -mthreads -shared -Wl,--out-implib,debug\libqsqlmysqld4.a -o debug\qsqlmysqld4.dll debug/main.o debug/qsql_mysql.o debug/moc_qsql_mysql.o  -L"d:\QtSDK\Desktop\Qt\4.8.1\mingw\lib" debug\qsqlmysqld_
resource_res.o d:\MySQL\MySQL Server 5.5\lib\libmysql.lib -lQtSqld4 -lQtCored4
g++: d:\MySQL\MySQL: No such file or directory
g++: Server: No such file or directory
g++: 5.5\lib\libmysql.lib: No such file or directory
mingw32-make[1]: *** [debug\qsqlmysqld4.dll] Error 1
mingw32-make[1]: Leaving directory `D:/QtSDK/QtSources/4.8.1/src/plugins/sqldrivers/mysql'
mingw32-make: *** [debug] Error 2

D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql>
D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql> 

spróbowałem zrobić też tak:

Setting up environment for Qt usage...

C:\Windows\system32>d:

D:\>cd MySQL

D:\MySQL>dir
 Wolumin w stacji D nie ma etykiety.
 Numer seryjny woluminu: A49A-9A2A

 Katalog: D:\MySQL

2012-06-24  09:28    <DIR>          .
2012-06-24  09:28    <DIR>          ..
2012-06-24  09:27    <DIR>          Connector C 6.0.2
2012-06-24  09:27    <DIR>          Connector C++ 1.1.0
2012-06-24  09:28    <DIR>          Connector NET 6.5.4
2012-06-24  09:27    <DIR>          Connector ODBC 5.1.11
2012-06-24  09:28    <DIR>          MySQL Documentation 5.5.25
2012-06-24  09:26    <DIR>          MySQL Server 5.5
2012-06-24  09:27    <DIR>          MySQL Workbench CE 5.2.40
2012-06-24  09:28    <DIR>          Samples and Examples 5.5.25
               0 plik(ów)                  0 bajtów
              10 katalog(ów)  12 725 784 576 bajtów wolnych

D:\MySQL>dir /x
 Wolumin w stacji D nie ma etykiety.
 Numer seryjny woluminu: A49A-9A2A

 Katalog: D:\MySQL

2012-06-24  09:28    <DIR>                       .
2012-06-24  09:28    <DIR>                       ..
2012-06-24  09:27    <DIR>          CONNEC~1.2   Connector C 6.0.2
2012-06-24  09:27    <DIR>          CONNEC~1.0   Connector C++ 1.1.0
2012-06-24  09:28    <DIR>          CONNEC~1.4   Connector NET 6.5.4
2012-06-24  09:27    <DIR>          CONNEC~1.11  Connector ODBC 5.1.11
2012-06-24  09:28    <DIR>          MYSQLD~1.25  MySQL Documentation 5.5.25
2012-06-24  09:26    <DIR>          MYSQLS~1.5   MySQL Server 5.5
2012-06-24  09:27    <DIR>          MYSQLW~1.40  MySQL Workbench CE 5.2.40
2012-06-24  09:28    <DIR>          SAMPLE~1.25  Samples and Examples 5.5.25
               0 plik(ów)                  0 bajtów
              10 katalog(ów)  12 725 784 576 bajtów wolnych

D:\MySQL>set mysql=d:\MySQL\MYSQLS~1.5

D:\MySQL>cd..

D:\>cd QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql\

D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql>qmake "INCLUDEPATH+=%mysql%\include" "LIBS+=%mysql%\lib\libmysql.lib" -o Makefile mysql.pro
WARNING: (internal):1: Unescaped backslashes are deprecated.
WARNING: (internal):1: Unescaped backslashes are deprecated.
WARNING: (internal):1: Unescaped backslashes are deprecated.

D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql>mingw32-make
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `D:/QtSDK/QtSources/4.8.1/src/plugins/sqldrivers/mysql'
g++ -mthreads -shared -Wl,--out-implib,debug\libqsqlmysqld4.a -o debug\qsqlmysqld4.dll debug/main.o debug/qsql_mysql.o debug/moc_qsql_mysql.o  -L"d:\QtSDK\Desktop\Qt\4.8.1\mingw\lib" debug\qsqlmysqld_
resource_res.o d:\MySQL\MYSQLS~1.5\lib\libmysql.lib -lQtSqld4 -lQtCored4
Creating library file: debug\libqsqlmysqld4.a
debug/qsql_mysql.o: In function `codec':
D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:223: undefined reference to `mysql_character_set_name@4'
debug/qsql_mysql.o: In function `qMakeError':
D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:234: undefined reference to `mysql_error@4'
D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:237: undefined reference to `mysql_errno@4'
debug/qsql_mysql.o: In function `qMakeStmtError':
D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:309: undefined reference to `mysql_stmt_error@4'
D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:312: undefined reference to `mysql_stmt_errno@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:358: undefined reference to `mysql_stmt_result_metadata@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:362: undefined reference to `mysql_num_fields@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:369: undefined reference to `mysql_fetch_field@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:432: undefined reference to `mysql_free_result@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:438: undefined reference to `mysql_store_result@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:440: undefined reference to `mysql_free_result@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:437: undefined reference to `mysql_next_result@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:446: undefined reference to `mysql_stmt_close@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:452: undefined reference to `mysql_free_result@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:496: undefined reference to `mysql_stmt_data_seek@12'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:498: undefined reference to `mysql_stmt_fetch@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:513: undefined reference to `mysql_data_seek@12'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:514: undefined reference to `mysql_fetch_row@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:529: undefined reference to `mysql_stmt_fetch@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:544: undefined reference to `mysql_fetch_row@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:565: undefined reference to `mysql_stmt_num_rows@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:570: undefined reference to `mysql_num_rows@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:614: undefined reference to `mysql_fetch_lengths@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:696: undefined reference to `mysql_real_query@12'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:701: undefined reference to `mysql_store_result@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:702: undefined reference to `mysql_field_count@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:707: undefined reference to `mysql_field_count@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:710: undefined reference to `mysql_affected_rows@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:714: undefined reference to `mysql_fetch_field_direct@8'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:728: undefined reference to `mysql_stmt_num_rows@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:733: undefined reference to `mysql_num_rows@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:750: undefined reference to `mysql_stmt_insert_id@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:755: undefined reference to `mysql_insert_id@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:775: undefined reference to `mysql_errno@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:776: undefined reference to `mysql_field_seek@8'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:777: undefined reference to `mysql_fetch_field@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:780: undefined reference to `mysql_fetch_field@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:783: undefined reference to `mysql_field_seek@8'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:796: undefined reference to `mysql_free_result@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:804: undefined reference to `mysql_next_result@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:813: undefined reference to `mysql_store_result@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:814: undefined reference to `mysql_field_count@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:823: undefined reference to `mysql_affected_rows@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:827: undefined reference to `mysql_fetch_field_direct@8'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:892: undefined reference to `mysql_stmt_init@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:900: undefined reference to `mysql_stmt_prepare@12'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:908: undefined reference to `mysql_stmt_param_count@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:909: undefined reference to `mysql_stmt_param_count@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:937: undefined reference to `mysql_stmt_reset@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:944: undefined reference to `mysql_stmt_param_count@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:944: undefined reference to `mysql_stmt_param_count@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1023: undefined reference to `mysql_stmt_bind_param@8'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1031: undefined reference to `mysql_stmt_execute@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1043: undefined reference to `mysql_stmt_affected_rows@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1048: undefined reference to `mysql_stmt_bind_result@8'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1055: undefined reference to `mysql_stmt_attr_set@12'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1057: undefined reference to `mysql_stmt_store_result@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1069: undefined reference to `mysql_stmt_bind_result@8'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1271: undefined reference to `mysql_init@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1271: undefined reference to `mysql_real_connect@32'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1286: undefined reference to `mysql_select_db@8'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1289: undefined reference to `mysql_close@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1295: undefined reference to `mysql_options@12'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1308: undefined reference to `mysql_set_character_set@8'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1300: undefined reference to `mysql_close@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1316: undefined reference to `mysql_get_client_version@0'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1316: undefined reference to `mysql_get_server_version@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1322: undefined reference to `mysql_thread_init@0'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1335: undefined reference to `mysql_thread_end@0'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1337: undefined reference to `mysql_close@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1353: undefined reference to `mysql_get_server_version@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1361: undefined reference to `mysql_list_tables@8'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1365: undefined reference to `mysql_data_seek@12'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1366: undefined reference to `mysql_fetch_row@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1372: undefined reference to `mysql_free_result@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1425: undefined reference to `mysql_list_fields@12'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1431: undefined reference to `mysql_fetch_field@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1433: undefined reference to `mysql_free_result@4'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1451: undefined reference to `mysql_query@8'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1468: undefined reference to `mysql_query@8'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1485: undefined reference to `mysql_query@8'
debug/qsql_mysql.o:D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql/../../../sql/drivers/mysql/qsql_mysql.cpp:1511: undefined reference to `mysql_real_escape_string@16'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\qsqlmysqld4.dll] Error 1
mingw32-make[1]: Leaving directory `D:/QtSDK/QtSources/4.8.1/src/plugins/sqldrivers/mysql'
mingw32-make: *** [debug] Error 2

D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql> 

D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql>qmake "INCLUDEPATH+=%mysql%\include" "LIBS+=%mysql%\lib\libmysql.lib" -o Makefile mysql.pro "CONFIG+=release"
WARNING: (internal):1: Unescaped backslashes are deprecated.
WARNING: (internal):1: Unescaped backslashes are deprecated.
WARNING: (internal):1: Unescaped backslashes are deprecated.

D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql>mingw32-make
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `D:/QtSDK/QtSources/4.8.1/src/plugins/sqldrivers/mysql'
g++ -mthreads -shared -Wl,--out-implib,debug\libqsqlmysqld4.a -o debug\qsqlmysqld4.dll debug/main.o debug/qsql_mysql.o debug/moc_qsql_mysql.o  -L"d:\QtSDK\Desktop\Qt\4.8.1\mingw\lib" debug\qsqlmysqld_
resource_res.o -llibmysql -lQtSqld4 -lQtCored4
d:/qtsdk/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -llibmysql
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\qsqlmysqld4.dll] Error 1
mingw32-make[1]: Leaving directory `D:/QtSDK/QtSources/4.8.1/src/plugins/sqldrivers/mysql'
mingw32-make: *** [debug] Error 2

D:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql>

Zgodnie z tą instrukcją powinno to przebiegać bez błędów a u mnie kilka się wygenerowało.

0

Swego czasu też straciłem nad tym trochę czasu. Zerknij do D:\QtSDK\QtSources\4.8.0\src\plugins\sqldrivers\mysql, z tego co pamiętam w jakiś sposób skompilowałem ten projekt (dołączając chyba pliki include z serwera MYSQL);

0

Udało mi się skompilować sterownik (przyczyną był mysql server 64bit). Ale nadal mam problem z połączeniem się z bazą :(.

#include <QtCore/QCoreApplication>
#include <QtSql>
#include <QtDebug>
#include <QSqlDatabase>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    qDebug()<<QSqlDatabase::drivers();


    db.setHostName("localhost");
    db.setPort(3306);
    db.userName("hagop");
    db.setPassword("hagop");
    db.setDatabaseName("baza");

    if(db.open())
    {
        qDebug() << "jest polaczenie";
        db.close();
    }
    else
    {
        qDebug() << "brak polaczenia - " << db.lastError();
    }

    return a.exec();
}
 

Na serwerze założyłem konto login:hagop i pass:hagop oraz bazę danych o nazwie baza zawierającą jedna tabele. Program w takim stanie nie kompiluje się. Wywali mi błąd : D:\Qt\nienazwany-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK__Debug\..\nienazwany\main.cpp:15: błąd:no matching function for call to 'QSqlDatabase::userName(const char [6])'. Gdy db.userName i db.Password zostaną zahaszowane program kompiluje się i dostaje taki komunikat:

 ("QSQLITE", "QMYSQL3", "QMYSQL", "QODBC3", "QODBC")
brak polaczenia -  QSqlError(1045, "QMYSQL: Unable to connect", "Access denied for user 'ODBC'@'localhost' (using password: NO)")
0
 db.userName("hagop");

Skompilowało się? Powinno być db.setUserName("hagop"); no chyba, że popełniłeś literówkę :)

1

Tak rzeczywiście pomyliłem się z tym UserName. Wszystko już działa poprawnie. Dziękuję za pomoc.

Dla następców podsumuję co zrobiłem:

  1. Instalacja MySQL server wersja 32bit (na wersji 64bit nie działa)
  2. Instalacja QT SDK
  3. Start -> Programy -> QT SDK -> Desktop -> Qt 4.8.1 for Desktop (MinGW)
  4. cd QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql\ (przechodzimy do tego katalogu)
  5. qmake "INCLUDEPATH+=d:\MYSQL\include" "LIBS+=d:\MYSQL\lib\libmysql.lib" -o Makefile mysql.pro (zainstalowałem serwer mysql bezpośrednio w katalogu MYSQL, żeby nie męczyć się z tymi ścieżkami). Wykonanie tej linii nie wywala żadnych błędów.
  6. mingw32-make (kompilacja bez żadnych błędów)
  7. qmake "INCLUDEPATH+=d:\MYSQL\include" "LIBS+=d:\MYSQL\lib\libmysql.lib" -o Makefile mysql.pro "CONFIG+=release" (podobnie jak wcześniej bez żadnych błędów)
  8. mingw32-make (kompilacja bez żadnych błędów)
  9. Skopiowałem z katalogu debug i release (są one w QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql) pliki: libqsqlmysqld4.a, qsqlmysqld4.dll, libqsqlmysql4.a i qsqlmysql4.dll do katalogu: QtSDK\Desktop\Qt\4.8.1\mingw\plugins\sqldrivers.
  10. Skopiowałem plik libmysql.dll z katalogu instalacyjnego MYSQL do katalogu WINDOWS

Od tego momentu sterownik QMYSQL jest już obsługiwany. Można to sprawdzić z poziomu samplowego programy sqlbrowser.

Problem uznaję za rozwiązany a temat za zamknięty.

0
hagop napisał(a):

Instalacja MySQL server wersja 32bit (na wersji 64bit nie działa)
no nie działa, nie działa i doszedłbyś do tego szybciej gdybyś z wyszukiwarki skorzystał ;)
tutaj masz link do tematu z zeszłego roku, w którym kiedyś o tym wspominałem. Co prawda czasy się zmieniły, wersje myslq'a oraz Qt również ale jak widać problemy dalej pozostały te same.

1 użytkowników online, w tym zalogowanych: 0, gości: 1