Planned maintenance has been done but it did not solve the problem. So work will continue on this and a new time for trying updates will be announced asap.

Qt 5.2.1 MySQL SQL Driver installieren [SOLVED]



  • 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.



  • Okay. Werde das mal später testen sobald die Kollegen Feierabend gemacht haben :-)
    Was verwendest du dann? Ubuntu?



  • Ja, ich verwende normalerweise (und mit Vergnügen) Kubuntu = Ubuntu mit KDE, habe Qt mit Datenbank aber auch unter Win7 und Vista laufen.
    Während das mit Ubuntu sofort funktioniert hat, hat die Win-Installation viel Zeit gekostet...



  • Glaube bei Ubuntu ist das ganze nicht so schwer. Irgendeine Anleitung habe ich da mal gesehen.
    Ich hoffe das ich die Datenbank zum laufen bekomme sonst bekomme ich noch die Kriese :-(



  • Nicht aufgeben - das wird!
    Wichtig ist dann nochmal der Vergleich zwischen dem Programm, das bereits läuft und den anderen Projekten...



  • Ich werde es mit der Anleitung von dir heute so gegen 17 Uhr nochmals probieren und hoffen das es klappt.



  • Was Programmierst du für Ubuntu? Würde mich mal interessieren was die Leute so machen.



  • Ich habe über viele Jahre ein stark anwenderorientiertes ERP/CRM mit EDI usw. für einen Automobilzulieferer geschrieben - hauptsächlich SQL und als Frontend VB. Das renoviere ich jetzt komplett mit Qt!



  • Das Klingt interessant :-)
    Du eine andere Frage noch. Woher bekomme ich den 8-stelligen namen wenn es mit "MySQL Server 5.6" nicht funktioniert? Weist du das Zufällig?



  • Soweit ich weiß, gibt es eine Option im dir-Befehl.

    Aber zur Not kannst du das auch berechnen:
    Es werde die ersten 6 Buchstaben - ohne Leerzeichen - verwendet, dann die Tilde ~ und fortlaufende Ziffern, beginnend mit 1.
    Wahrscheinlich ist das MYSQLS~1
    Viel Erfolg



  • Ich weis nicht was ich falsch mache :-( es will einfach nicht funktionieren ;-(



  • Hab jetzt zwei neue Programme gemacht. Eins geht und das andere nicht. Das kann ja nicht so schwer sein :-(



  • Kannst du denn keinen Unterschied erkennen zwischen den beiden Programmen?
    Ich würde die beiden Stück für Stück verkleinern, bis nur noch minimale Datenbank-Funktionen vorhanden sind - dadurch müsstest du dem Fehler auf die Spur kommen.
    Was tun die beiden Programme?



  • Mit einem Projekt gehe ich über das Menü auf ein Dialog und in diesem wird eine table mittels button in ein tableView angezeigt und sagt mir Driver not loaded Driver not loaded

    Die pro: @QT += core gui sql@
    Include:@ #include <QtSql>@
    Datenbank:

    @QSqlDatabase db1;
    bool dbOpen()
    {
    db1=QSqlDatabase::addDatabase("QMYSQL");
    db1.setDatabaseName("baur_test_dbo");
    db1.setHostName("10.211.55.6");
    db1.setPort(3306);
    db1.setUserName("test");
    db1.setPassword("server");
    if(!db1.open())
    return false;
    else
    return true;
    }
    void dbClose()
    {
    db1.close();
    }
    @

    Das andere Programm startet mit dem MainWindow mit TableView und Button und lädt mir die Table im TableView ohne Probleme.

    pro: @QT += core gui sql@
    include: @#include <QtSql>@
    Datenbank:

    @QSqlDatabase mydb1;
    bool openDatabase()
    {
    mydb1 = QSqlDatabase::addDatabase("QMYSQL");
    mydb1.setHostName("10.211.55.6");
    mydb1.setDatabaseName("baur_test_dbo");
    mydb1.setPort(3306);
    mydb1.setUserName("test");
    mydb1.setPassword("server");
    if(!mydb1.open())
    return false;
    else
    return true;
    }

    void closeDatabase()
    {
        mydb1.close();
    }
    

    @

    Wenn ich bei diesem Programm in Qt/5.2.1/mingw/.../sqldrivers die mysql dll´s herausschneide funktioniert dieses Programm nicht. Also hat er sie theroretisch doch erkannt?



  • Du hast recht, die dlls werden sicher gefunden und verwendet. Und das ist mehr als die halbe Miete!
    Ich vermute, dass dein Problem jetzt "nur noch" an dem Dialog liegt, mit dem du im ersten Beispiel die Datenbank öffnest.

    Zum Absichern würde ich jetzt versuchen, das erste Programm ohne den Dialog zum Laufen zu bringen. Dann solltest du dir im Qt-Beispiel SQL Browser die Verbindung Dialog zur Browser-Klasse anschauen.
    @
    QSqlTableModel *model = new CustomModel(table, connectionWidget->currentDatabase());
    @



  • Ich hab mal bei Dropbox die Programme in einem Zip getan:

    "Hier":https://www.dropbox.com/s/95gi1tpalpodp73/Desktop.rar

    Mit dem Beispiel komme ich noch nicht so klar :-(



  • Ich denke, ich habe den Fehler gefunden:
    Im Projekt database öffnest du mit
    @
    if(!openDatabase())
    ui->statusLabel->setText("Error");
    else
    ui->statusLabel->setText("Connected...");
    @
    die Datenbank.

    Das fehlt - wenn ich es richtig sehe - im Projekt Biodate.
    Füge doch in
    @void Anzeigen::on_anzeigenButton_clicked()@

    den dbOpen() ein.



  • Also bei Database im Projekt funktioniert es ja. Nur im anderen Funktioniert es nicht :-( ist ja nicht mein erstes Projekt mit SQL aber hier versteh ich die fehler nicht



  • Oder meinst du das andere Projekt?



  • Also habe im anderem Projekt folgendes gemacht:

    @void Anzeigen::on_anzeigenButton_clicked()
    {
    MainWindow main;
    main.db1.open();
    QSqlQuery *qry = new QSqlQuery(main.db1);
    QSqlQueryModel *model = new QSqlQueryModel();
    qry->prepare("select * from strom");
    if(qry->exec())
    {
    model->setQuery(*qry);
    ui->tableView->setModel(model);
    }
    else
    QMessageBox::critical(this,"ERROR",qry->lastError().text());
    }@

    funktioniert trotzdem nicht und bringt den Fehler das er die Driver nicht gefunden wurde



  • Du solltest in deinem Biodate Projekt den Eintrag wie im Database Projekt setzen (nur dbOpen statt openDataBase):

    @
    if(!dbOpen())
    ui->statusLabel->setText("Error");
    else
    ui->statusLabel->setText("Connected...");
    @

    Dann ist die Datenbank geöffnet und du kannst deine queries ausführen.



  • Tatsache :-)
    wie kann das sein?


Log in to reply