Deploy Qt5.2 plus MYSQL Win7 [SOLVED]



  • Hallo Forum,

    ich habe ein Projekt mit Release erstellt. Im Debug funktioniert die Datenbank Anbindung über das Netzwerk ohne Probleme (MySQL Server xxx.xxx.xxx.200 Port 3306 user "test" password "test").
    Aber jetzt war das Projekt fertig und ich wollte ein Release machen. Das Projekt kann ich ohne Fehlermeldung öffnen aber er kann die Datenbank nicht öffnen.
    Ich habe ein Ordner "Biodate" (Projektname) erstellt und dort alle DLL´s die er braucht eingefügt. Dazu ist in dem Ordner noch die EXE Datei und ein Ordner "platforms" sowie "sqldrivers".

    Weist einer von euch eine Lösung? Habe auch nochmals auf Build neu erstellt aber ohne Erfolg.

    Gruß

    Alex



  • Hallo,

    zur Analyse ist das hoffentlich hilfreich:
    @
    sql = "SELECT a, b, c FROM test WHERE a = 'eins'";
    query.prepare(sql);
    if (!query.exec()) {
    QMessageBox::warning(this,
    "MYAPP",
    "Fehler in der Datenbankabfrage F01!" +
    query.lastError().text(),
    QMessageBox::Ok,
    QMessageBox::Ok);
    qDebug() << sql;
    return;
    }
    @

    anstelle von query.lastError() auch db.connectionName() etc.



  • Jetzt habe ich mein Projekt abgeschossen :-( und weis nichmal warum es nicht mehr startet aus dem Debug modus heraus



  • Heißt das, es startet vom Creator aus nicht oder nicht auf den Clients?
    Wir müssen in jedem Fall Fehlermeldungen/-infomationen erzeugen, damit wir das Baby wieder zum laufen bringen...



  • Bekomme von Windows folgende Meldung:

    @Problem signature:
    Problem Event Name: APPCRASH
    Application Name: Biodate.exe
    Application Version: 0.0.0.0
    Application Timestamp: 53344efa
    Fault Module Name: Qt5Cored.dll
    Fault Module Version: 5.2.1.0
    Fault Module Timestamp: 52ed67e6
    Exception Code: c00000fd
    Exception Offset: 001c0d76
    OS Version: 6.1.7601.2.1.0.256.48
    Locale ID: 1031
    Additional Information 1: 0224
    Additional Information 2: 02243292856ec4b94152c7718e4919e1
    Additional Information 3: b118
    Additional Information 4: b118752717c348612a233e4229bd1cf9

    Read our privacy statement online:
    http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409

    If the online privacy statement is not available, please read our privacy statement offline:
    C:\Windows\system32\en-US\erofflps.txt
    @



  • Die Meldungen sagen mir leider nichts - beanstandet wird scheinbar die Qt5Cored.dll.
    Läuft das Programm noch, wenn du es im Creator in Debug oder Release startest? Hilft evtl. ein komplett neuer Build?
    Ich würde als nächsten Schritt ein ganz simples Hello World Programm testen und - wenn die App wieder crashed, nach "Qt5Cored.dll Win7 crash" googeln.



  • Ein einfaches helllo World mit GUI funktioniert ohne Probleme.



  • Hab jetzt mal alles gelöscht vom debug und neu gemacht. Bekomme jetzt folgenden Fehler:

    @:-1: error: [ui_mainwindow.h] Error -1073741511@



  • Hab jetzt das komplette Qt neu Installiert und es ist immer noch der Fehler da :-(

    Weis einer einen rat?

    "hier das Projekt":https://www.dropbox.com/s/dm86239at8hwj5o/Biodate.rar



  • Aber das Hello World läuft noch?
    Läuft eines der Beispiele von Qt mit SQL (z.B.SQL Browser)?



  • Das hello World läuft ohne Fehler. Muss jetzt noch eins machen um das sql zu probieren.



  • Also habe folgendes Testobjekt erstellt und ausprobiert:

    @public:
    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();
    }@

    Mit Folgendem Button und TableView

    @ MainWindow main;
    if(!main.dbOpen())
    QMessageBox::critical(this,"ERROR","Datenbank nicht offen");
    else
    {
    QSqlQuery *qry = new QSqlQuery(main.db1);
    QSqlQueryModel * model = new QSqlQueryModel();
    qry->prepare("SELECT * FROM einkauf");
    if(qry->exec())
    {
    model->setQuery(*qry);
    ui->tableView->setModel(model);

        }
        else
            QMessageBox::critical(this,"ERROR",qry->lastError().text());
    }@
    

    Das Programm läuft ohne Fehler und die Datenbank wird auch geöffnet und darf die Table sehen.



  • und was ist jetzt mit deinem biodate-projekt?
    Bekommst du noch Fehlermeldungen oder läuft das jetzt auch?
    Die zuletzt gepostete Meldung bezieht sich ja wahrscheinlich auf das Öffnen der Datenbank und - soweit ich das sehe - ist das identisch mit dem Testprogramm.



  • Ja ist sehr identisch. Aber biodate läuft immer noch nicht. Kommt immer noch die gleiche Fehlermeldung. Kannst du es bei die öffnen?



  • Ich kann das Projekt nur starten, wenn ich in mainwindow.cpp die Zeile "MainWindow main" auskommentiere. Mit der Zeile stürzt das Programm sofort ab mit "RTTI symbol not found..."

    @
    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    // auskommentiert: MainWindow main;
    ui->setupUi(this);
    ui->menuBar->hide();

    }
    @

    Ich kann aber nur bis zum mainwindow.ui testen, weil ich die Datenbank nicht habe - bzw. aktuell auch ausschließlich mit PostgreSQL arbeite. Es erscheint aber die Fehlermeldung: "Fehler beim öffnen der Datenbank" und das ist ja die erwartete Reaktion.



  • Ja genau. Ich versuche es später mal.



  • Also hattest recht. Funktioniert wenn man das in der cpp auskommentiert. Mich interessiert es nur ob er sich mal beim erstellen verschluckt hat :-(
    Aber danke für die Hilfe. Muss jetzt nur noch schauen wie ich es auf andere PC´s zum laufen bekomme :-)



  • Prima, das freut mich - und die nächste Aufgabe werden wir auch bewältigen :-)



  • Habe jetzt mal unter parallels eine win7 virtuell erstellt um zu testen.



  • So, habe jetzt mal alle dll die er sagt in das gleiche Verzeichnis getan. Beim starten kommt folgende fehlermeldung:

    @The procedure entry point _Z8qWinMainP11HINSTANCE_S0_PciRiR7QVectorIS1_E could not be located in the dynamic link library Qt5Core.dll.@

    Weis das jemand zufällig?



  • Lege doch unter dem Verzeichnis deiner App (.exe) das Verzeichnis plugins/platform an und kopiere die Qt5Core.dll (ggf. auch die anderen) hinein.
    Wichtig ist, dass 64-Bit und 32-Bit Versionen nicht gemischt werden.



  • Funktioniert auch nicht :-( findet den Einsprungspunkt wieder nicht. Habe auch schon mal an der PATH mich versucht aber auch ohne erfolg



  • Zu "located in the dynamic link library Qt5Core.dll" gibt es Menge Einträge im Qt Forum u.a. - wenn ich das richtig sehe, bezieht es sich immer auf das Verteilen der App.exe auf andere Rechner.

    Ich würde jetzt wie folgt vorgehen:

    1. Die Einträge zum Fehler überfliegen - vielleicht findest du den entscheidenden Hinweis.
    2. Die einfache Hello World auf einem Client installieren
      3.1. Wenn die nicht läuft, Meldungen posten.
      3.2. Zum Testen Qt auf einem Client installieren.
      3.3. Hello World testen


  • bq. 3.2. Zum Testen Qt auf einem Client installieren.

    Welches Qt genau? Meinst du mit Creator oder was anderes?



  • Habe jetzt ein Hello World gemacht und dies auf den anderen Rechner gestartet. Nachdem ich alle fehlenden dll´s hinein kopiert habe bekomme ich folgende fehler Meldung

    @This application failed to start because it could not find or load the Qt platform plugin "windows".

    Reinstalling the application may fix this problem.@



  • Okay den Fehler konnte ich beseitigen indem ich im Ordner meiner exe Datei einen Ordner erstelle "platforms" in der ich die qwindows.dll kopiert habe. Nun läuft das Hello World auf einen anderen Rechner ohne Qt installation. Rechner ist mit i3 16GB RAM und Win7 64bit



  • Nehme ich jetzt diese Struktur für mein Datenbank programm her bekomme ich die Meldung:

    @Das Programm kann nicht gestartet werden, da Qt5Sql.dll auf dem Computer fehlt. Installieren sie das Programm erneut , um das Problem zu beheben.@

    Versuche jetzt mal mit der Qt5Sql.dll herum zu spielen.

    P.S.: zu den .dll´s von oben: Sind alle von mingw...\bin Ordner



  • Habe die Qt5Sql.dll nur in das Verzeichnis der exe kopiert und schon läuft das Programm ;-)



  • Einzige Fehler nun. Er kann die Datenbank nicht öffnen.



  • Dann solltest du Meldungen provozieren (Hostname, Database etc.) Die MYSQL-dlls sind auch im EXE-Verzeichnis?



  • Also gezielt das ausgeben lassen?
    Mysql.dll habe ich keine kopiert



  • (Ich meine die qsqlmysql.dll und qsqlmysqld.dll.)
    Wir müssen zuerst prüfen, ob die MYSQL plugins funktionieren, das heißt, wird versucht, die DB zu öffnen oder wird das plugin nicht gestartet. Das kannst du auf der Maschinen ohne Creator am einfachsten tun, indem du einige Ergebnisse der Schritte:
    @
    QSqlDatabase::addDatabase("QMYSQL");
    mydb1.setHostName("10.211.55.6");
    mydb1.setDatabaseName("test");
    mydb1.setUserName("test");
    mydb1.setPassword("server");
    mydb1.setPort(3306);
    mydb1.open()
    @
    mit QMessageBox ausgibst.



  • Nein die habe ich noch nicht implementiert.
    Die Qmessage habe ich Standard mäßig eh schon drin.
    Muss ich gleich mal testen



  • So habe es jetzt heraus bekommen durch google und probieren.
    Im Ordner in der die exe liegt legt man einen neuen ordner "sqldrivers" an und fügt folgende dll´s dort ein:

    libmysql.dll
    qsqlmysql.dll

    Und dann kann man die Appli. auf einem anderem Windows starten und man kommt auf die Datenbank.

    Also hat man einen Ordner z.B. wie mein Projekt "Biodate" in der die exe Datei liegt erschafft man dort zwei ordner:

    1. Ordner "platforms" -> dort liegt die qwindows.dll
    2. Ordner "sqldrivers" -> dort liegt die libmysql.dll und die qsqlmysql.dll

    Die restlichen .dll´s sagt einem das Windows dann schon wenn man versucht das Programm zu starten. Diese Dateien fügt man in den ordner in der sich die exe befindet ein.

    Für was eine Nachtschicht immer so gut ist :-) extra aufm Laptop Ubuntu Server mit MySQL sowie 2x Win7 installiert und diese aufm OSX mit Parallels gleichzeitig laufen lassen :-)

    Gruß und danke für die Hilfen :-)



  • Freut mich sehr, dass alles funktioniert - dann bis zum nächsten Mal :)



  • Mal schauen was ich als nächstes anpacken werde :-) ich denke aber das ich erstmal qwt mal her nehme und schau wie man dies verwendet.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.