Qt 5.2.1 MySQL SQL Driver installieren [SOLVED]



  • Unter den Ordner mingw48_32 in der bin gibt es ne qmake



  • Sieht schon nicht schlecht aus!
    Path ist eine Systemvariable in Windows, die den Suchpfad enthält.
    Ein Programm wie qmake.exe wird im cmd-Fenster nur dann gefunden, wenn es in einem Verzeichnis steht, auf das "Path" verweist.
    Die Variable "Path" musst du wie folgt bearbeiten:
    bq.
    Systemsteuerung
    ->System und Sicherheit
    ->System
    ->Erweiterte Systemeinstellungen
    ->Umgebungsvariablen
    ->Systemvariablen

    in der Listbox Path auswählen und dann:

    Bearbeiten
    ans Ende der Zeile ein Semikolon und den gesamten Pfad eintragen
    (Bsp. ;C:\Qt5.2.1\5.2.1\mingw48_32)



  • @cd %QTDIR%\src\plugins\sqldrivers\mysql@

    Bei dem kommt The system cannot find the path specified.



  • Den Ordner sqldrivers finde ich in mehrere Ordner von Qt. Ist es dir unter Tools\QtCreator\bin\plugins\sqldrivers?



  • Befinde mich nun im folgenden Pfad

    C:\Qt\5.2.1\Src\qtbase\src\plugins\sqldrivers\mysql

    und habe danach folgendes eingegeben

    qmake "INCLUDEPATH+=C:/MySQL/include" "LIBS+=C:/mysql/MySQL Server 5.6/lib/libmysql.lib" mysql.pro

    Danach hat er mir nur wieder den Pfad angezeigt ohne irgendwelche Meldung



  • Das ist korrekt, den Ordner sqldrivers gibt es mehrfach: Im Quellcode und im Qt-Pfad.
    Die kompilierten Treiber (.dll) müssen in:
    C:\Qt\Qt5.2.0\5.2.1*\mingw48_32\plugins\sqldrivers*
    liegen



  • Habe folgende *.dll
    qsqlite.dll
    qsqlited.dll
    qsqlmysql.dll
    qsqlmysqld.dll
    qsqlodbc.dll
    qsqlpsql.dll
    qsqlpsqld.dll

    :-)



  • Führe ich folgendes Projekt aus:

    @QSqlDatabase mydb1 = QSqlDatabase::addDatabase("QMYSQL");
    mydb1.setHostName("10.211.55.6");
    mydb1.setDatabaseName("test");
    mydb1.setUserName("test");
    mydb1.setPassword("server");
    mydb1.setPort(3306);

    if(!mydb1.open())
    {
        cout << "Database Error";
        return false;
    }
    else
    {
        cout << "Database true";
        return true;
    }@
    

    Und in der pro habe sql mit qmake gemacht



  • Funktioniert das denn jetzt?



  • Nein. Leider nicht :-(

    wo muss ich die libmysql.dll hin kopieren? musste man die nicht in ein windows Verzeichnis laden?



  • Die dlls müssen in C:\Qt\Qt5.2.0\5.2.1\mingw48_32\plugins\sqldrivers liegen. (evtl. C:\Qt\Qt5.2.0\5.2.1 gegen den entsprechenden Pfadnamen deines Rechners austauschen)
    Wenn das nicht funktionieren sollte (was meist an Problemen mit der Path-Variablen liegt) kannst du auch ein Unterverzeichnis sqldrivers unter dem Build-Verzeichnis anlegen, das im Creator unter Projekte definiert ist (z.B. QBUILD\debug\meinprojekt), und die dlls auch dahin kopieren.
    Das ist zwar nicht elegant aber zum Testen ggf. sinnvoll.



  • Also im Pfad:
    C:\Qt\5.2.1\mingw48_32\plugins\sqldrivers
    liegen folgende Treiber:
    qsqlite.dll
    qsqlited.dll
    qsqlmysql.dll
    qsqlmysqld.dll
    qsqllodbc.dll
    qsqllodbcd.dll
    qsql.psql.dll
    qsqlpsqld.dll

    Habe es jetzt in den Ordner build-<meinProjekt>/debug/sqldrivers kopiert und das projekt bereinigt und qmake ausgeführt. leider immer noch mit der Meldung das er die Treiber nicht laden konnte



  • Poste doch bitte mal die exakte Fehlermeldung - da werden wir hoffentlich einen Hinweis finden können.



  • Beim Ausführen kommt:

    QSqlDatabase: QMYSQL driver not loaded
    QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

    dann kommt das cout "Database Error" was ich mir ausgeben lasse



  • Bin mit Navicat oder MySQL Workbench mit der Datenbank verbunden.



  • Das bringt uns weiter:
    Qt zeigt dir mit der Meldung, dass ein mysql Treiber vorhanden ist (available driver QMSQL) , dass dieser aber nicht verwendet werden kann (not loaded).
    Eine Ursache hierfür kann ein Mix zwischen 64-Bit und 32-Bit Versionen sein. Wenn Du mit mingw arbeitest, musst Du auch die 32-Bit Version von MYSQL verwenden. Ist dem so?
    Wenn ja, dann hilft evtl., das Projekt nochmals komplett neu erstellen zu lassen.
    Wenn nein, wird es sich nicht vermeiden lassen, die 32-Bit MYSQL zu installieren und das plugin neu zu bauen.
    Hier ist ein empfehlenswerter Link, der sich auf das Problem bezieht:
    "MYSQL WIN":http://seppemagiels.com/blog/create-mysql-driver-qt5-windows



  • Habe jetzt alles Deinstalliert und alles auf 32bit installiert.
    Nun sagt er mir:
    The filename, directory name, or volume label syntax is incorrect
    Mal schauen woran es liegt :-)



  • Mit dem Befehl:

    INCLUDEPATH+=C:/Program Files (x86)\MySQL\include --> Welches verzeichnis will er hier?

    Ich glaube es hängt daran



  • Habe es jetzt nochmals probiert in der cml diesmal ohne fehler aber das programm selber funktioniert nicht. kommt wieder driver not loaded :-(



  • Lösche nochmals die bereits im Build-Verzeichnis vorhandenen Dateien und lasse den Build neu erstellen.
    Das war auch in meiner Win7-Installation nach zahllosen Stunden der letzte Fehler.



  • Okay ich habe den Fehler gefunden. Ich musste die libmyswl.dll in C:Windows kopieren und schon läuft es



  • Prima, freut mich! Aber - streng genommen - gehört sie da nicht hin, Qt müsste sie auch in sqldrivers erkennen.
    Aber das ist Kür, wichtiger ist, dass es jetzt funktioniert!



  • Jetzt funktioniert es wieder nicht :-(



  • ich dreh durch :-(



  • Hab jetzt die libmysql.dll wieder heraus gelöscht :-(



  • Gibt's eine frische Fehlermeldung? Oder: was wurde zwischen den beiden Builds verändert?



  • @qDebug() << QSqlDatabase::drivers();@

    listet er mir wieder alle sauber auf ohne Probleme.

    @ QSqlDatabase mydb = QSqlDatabase::addDatabase("QMYSQL");
    mydb.setDatabaseName("baur_test_odb");
    mydb.setHostName("10.211.55.6");
    mydb.setPort(3306);
    mydb.setUserName("test");
    mydb.setPassword("server");
    if(mydb.open())
    qDebug() << "Open";
    else
    qDebug() << "Not Open";@

    Bei diesem Code sagt er QMYSQL driver not loaded :-(



  • Aber es hat einmal richtig funktioniert?

    Kompiliere doch zum Testen mal das Beispiel "SQL Browser" in einem neuen Build-Verzeichnis.

    Du solltest die mysql.dll ruhig im Windows Ordner lassen, wenn es damit einmal funktioniert hat. Das kann man später noch korrigieren.



  • Habe jetzt nochmals ein neues Projekt erstellt. Dort geht es :-) ich teste es jetzt mal an einem großen Projekt ausprobieren und nochmal Feedback geben.

    Gruß



  • Okay. Wenn ich das neue Projekt:

    @#include <QCoreApplication>
    #include <QtSql>
    #include <iostream>
    #include <cstdlib>

    using namespace std;

    int main(int argc, char *argv[])
    {
    QCoreApplication a(argc, argv);
    QSqlDatabase mydb = QSqlDatabase::addDatabase("QMYSQL");
    mydb.setDatabaseName("baur_test_dbo");
    mydb.setHostName("10.211.55.6");
    mydb.setPort(3306);
    mydb.setUserName("test");
    mydb.setPassword("server");

    if(!mydb.open())
        qDebug()<<"error";
    else
        qDebug()<<"open";
    
    return a.exec&#40;&#41;;
    

    }
    @

    ausführe bringt qDebug() "open" aber sobald ich dies in mein Vorhandenes Projekt mache:

    @if(mydb1.open())
    ui->mysqlLabel->setText(mydb1.databaseName());
    else
    ui->mysqlLabel->setText("Error");@

    @QSqlDatabase mydb1;
    bool dbOpen1()
    {
    mydb1 = QSqlDatabase::addDatabase("QMYSQL");
    mydb1.setHostName("10.211.55.10");
    mydb1.setDatabaseName("baur_test_dbo");
    mydb1.setPort(3306);
    mydb1.setUserName("test");
    mydb1.setPassword("server");

        if(!mydb1.open())
            return false;
        else
            return true;
    }
    
    void dbClose1()
    {
        mydb1.close();
    }@
    

    Bekomme ich einen Fehler beim ausführen. Es erscheint "Error" im Laben :-(



  • Also es geht definitiv nicht. Er lädt von einem alten Projekt das ich mit dem Kaputten laptop gemacht habe auch nicht und sagt das er die Treiber nicht laden kann.



  • Wenn aber das neue Projekt funktioniert, ist dein System Qt + Mysql im Prinzip korrekt eingestellt, die DLLs sind vorhanden und passen zum Qt.
    Du musst analysieren, welche Unterschiede zwischen den Projekten vorhanden sind (include?, .pro mit +SQL etc.) und - falls es Meldungen außer "...MYSQL not loaded" gibt, diese bitte posten.
    Nochmal der Hinweis: Evtl. vorhandene Dateien im BUILD-Verzeichnios löschen, bevor du die nicht funktionierenden Projekte neu kompilierst.



  • Also habe jetzt alles mögliche ausprobiert leider ohne erfolg :-(
    Mein Include in der pro:

    @QT += core gui sql@

    Dann habe ich den BUILD inhalt gelöscht bevor ich kompiliert habe.



  • Einträge in .pro sind OK!
    Und du hast ein Projekt, das funktioniert?
    Ist das auf deinem aktuellen Rechner kompiliert oder ist der Build von deinem Laptop worden?



  • Erst habe ich ein Projekt ohne MySQL erstellt. Auf dem jetzigen Laptop und anschließen wollte ich es um die MySQL erweitern das leider scheitert.
    Erstelle ich ein neues Projekt für die Commando Zeile geht es. Nehme ich ein Projekt her das auf dem alten laptop erstellt habe erkennt er es. Nehme ich ein anderes altes her funktioniert es wieder nicht. ist alles ganz komisch :-(



  • So jetzt wird erstmal alles deinstalliert



  • So hab jetzt alles neu installiert (Qt und MySQL)
    Nun habe ich im Ordner sqldrivers die dll schon drinnen obwohl ich die Kommandozeile nicht ausgeführt habe.
    Ist das Normal?



  • In dem Ordner unter mingw48_32\plugins\sqldrivers sollten die noch nicht vorhanden sein.
    Wenn du komplett neu installiert hast, prüfe doch die Installation mit der sehr guten Anleitung:
    "QT5 MYSQL":http://seppemagiels.com/blog/create-mysql-driver-qt5-windows
    Die ist sehr aktuell und ich würde deine Installation Schritt für Schritt danach prüfen.



  • Also die Installation habe ich so gemacht wie es in der Anleitung beschrieben ist.
    Aber mit diesem Pfad komme ich nicht so recht:

    @set mysql=C:\PROGRA~2\MySQL\MYSQLS~1.5@



  • Im Beispiel ist MYSQL im Pfad C:\Program Files (x86)\MySQL\MySQL Server 5.5 installiert.
    Mit den Leerzeichen gibt es Probleme, daher soll der Pfad im alten 8-stelligen Windows-Format eingegeben werden:
    also: C:\PROGRA~2\MySQL\MYSQLS~1
    Ich habe aktuell keinen Windows-Rechner zur Verfügung, du solltest den Pfadnamen im cmd-Fenster mit "cd C:\PROGRA~2\MySQL\MYSQLS~1" testen (evtl. musst du PROGRA~1 verwenden)
    Für qmake ist es sicherer, die Schrägstriche / anstelle der Backslashes \ einzugeben.


Log in to reply