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]



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



  • Es funktioniert wirklich ohne Probleme :-) vielen lieben dank für deine hilfe.
    Darf man dich ein zwei Dinge vielleicht noch fragen?

    Gruß



  • Das freut mich wirklich sehr!
    Klar kannst du mich noch ein paar Dinge fragen, vielleicht stellst du einfach einen neuen Thread ein.
    Den vorhandenen solltest du mit [SOLVED] kennzeichnen, dazu bitte den ersten Post bearbeiten.
    Bis zum nächsten Mal! :-)



  • Für deine Hilfe sage ich recht herzlichen Dank :-)
    Das mit Solved wollte ich noch erledigen habe es aber gestern vergessen da dies so gut funktioniert hat :-D
    Aber was mich noch interessieren würde ob es schon einen guten Thread gibt der das Thema Drucken behandelt :-)



  • Ich habe noch keinen Thread zum Thema Drucken gesehen.
    Du solltest mal unter QPainter/QPrinter suchen.
    Mit dem Thema muss ich mich in den nächsten Tagen etwas intensiver beschäftigen...
    Für den Einstieg ist in der Qt Hilfe das Thema Qt Print Support empfehlenswert und hier für sofortige Ergebnisse das Kapitel QWidget::render - damit kannst Du beliebige Widgets auf den Drucker ausgeben.



  • Oh schade. Aber werde mir das mal anschauen. Vielleicht mach ich dann wenn ich auf Probleme stoßen sollte einen Thread auf :-)
    Bin glaub nicht der einzige der vielleicht das gerne nutzen möchte.

    Danke und Gruß

    Alex ;-)



  • Hallo nochmal,

    Wenn ich ein Release mache wie muss die Ordner Struktur aussehen wenn ich im Netz (LAN) verteile?



  • Das hängt stark davon ab, was du veröffentlichen möchtest:
    Wenn es sich um mehrere Qt-Anwendungen handelt, könntest du mit "Shared Libraries":qthelp://org.qt-project.qtdoc.520/qtdoc/sharedlibrary.html arbeiten. Wenn du nur eine Anwendung verteilen willst, kannst du Static Libraries verwenden, dann erhältst du nur ein .exe.
    Die Prozesse sind unter Deploying Qt Applications in der Qt Hilfe oder auch im "Wiki":http://qt-project.org/wiki/Deploying-an-Application-on-Windows-using-Shared-Libraries beschrieben.
    Ich hoffe, das hilft dir weiter



  • Also einmal gebe ich den Ordner "platforms" und den "sqldrivers" mit.
    Mit einer sqlite geht es wunderbar aber wie mache ich es mit der mysql wenn diese auf einem pc (xxx.xxx.xxx.200) also server läuft?
    Der link shared libraries geht leider nicht.
    Also ich will diese Anwendung auf mehrere PC im gleichen Netzwerk verteilen um auf die gleiche Datenbank zu kommen.



  • Ich vermute, das Problem liegt am Zugriff der Clients auf die Datenbank. Die PCs müssen in der Lage sein, auf die Datenbank zuzugreifen (port und host beachten). Wenn du die Anwendung mit sqlite zum Laufen gebracht hast, wird es auch mit MYSQL funktionieren, wenn der Zugriff der PCs gesichert ist.



  • Also muss ich nur den sqldrivers Ordner mitliefern?



  • Wenn es mit sqlite so schon läuft, dann: ja.
    Ich weiß nicht, ob du noch weitere DLLs benötigst aber für das MYSQL-Kapitel müsste es genügen.



  • Okay. Mal schauen. Wie löst du das Problem?



  • Ich komme nicht auf den Fehler :-( habe jetzt die dll die er braucht oder ankreidet in den gleichen ordner getan wie die exe datei. Aber er schafft keine verbindung zur datenbank. mit der mysql workbench komme ich drauf und mit den gleichen daten die ich dort eingegeben habe gebe ich im programm auch ein. debug läuft ohne weiteres aber das release läuft nicht da es keine datenbank öffnen kann.



  • Hi, versuche doch mal, Fehlermeldungen zu erzeugen und die dann zu posten. Ich könnte mir vorstellen, dass das Probleme auch für viele andere interessant ist, daher solltest du einen neuen Thread eröffnen (Deploy Qt5.2 plus MYSQL Win7).
    Evtl. hilft schon, das Release Build komplett neu zu kompilieren.



  • Wie erzeuge ich am besten eine gezielte Fehlermeldung?
    Ich glaub er erkennt die MYSQL treiber nicht die ich ihm mit gegeben habe.
    Wie sieht denn die Ordnerstruktur einer fertigen EXE aus?
    Ich habe jetzt momentan einen Ordner Biodate in dem ist einmal der ordner platforms und sqldrivers. Das Programm startet ohne probleme. das einzige er gibt mir ein QMessageBox aus in der ich die datenbank öffne.

    Gruß



  • Ich mache mal einen neuen Thread auf.


Log in to reply