MySql Deploy App....HELP!!



  • Hello this is my first post but I am in dire need of some help. I have created an application in creator using qt 5.5.1 and visual studio 2013. It connects to a remote MySql Database and when I run it from creator it works fine. When I go to the build release directory and run it it works perfectly.....However When I use windepolyqt (I think that is the name of the tool) and to create an installation folder and I run it the app works fine but I get "driver not loaded driver not loaded" error when I try to connect to the database. I do have the qsqlmysql.dll in the sqldrivers folder. I have been working on this for the last 36 hours and can't figure and I desperately need to deploy this to several machines quickly. Any help would be greatly appreciated!!!!!



  • Hi, I'm guessing, windeployqt is a fine tool but for database programs it forgets to copy Q5Sql.dll, that could be cause of your problem. When starting windeployqt, try adding the -sql switch, like this:
    windeployqt -sql yourapp.exe



  • @hskoglund Thanks for the reply but QT5Sql.dll it did copy QT5Sql.dll into the application directory.


  • Lifetime Qt Champion

    Hi and welcome to devnet,

    Do you also have the MySQL client libraries deployed with your application ?



  • Ok. You could try debugging, turn on a trace when Qt loads the plugins.
    Before starting your app, set an environment variable to enable the trace:
    SET QT_DEBUG_PLUGINS=1

    To see the trace output, you can download the DebugView program



  • @SGaist I copied the libmysql.dll file into the application directory to no avail and also tried copying it and the libmysel.lib files to the c:\windows directory.


  • Lifetime Qt Champion

    Don't put anything in the windows folder. Next step is what @hskoglund suggested



  • ok the 3 Lines I see that seem to be the ones in the debug

    QSalDatabase: QMYSQL driver not loaded
    QSqlDatabase: available drivers;
    QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins


  • Lifetime Qt Champion

    The question is going to be silly but: Are you instantiating a QApplication (or Gui or Core) as the first thing in your main function ?



  • Yeah I am just using the normal Windows Application Setup Which has QApplication a (argc, argv); as the first line then just creates an instance of mainwindow.


  • Lifetime Qt Champion

    Can you check what QCoreApplication::libraryPaths(); returns ?



  • When I run it from creator it returns the release directory of the release folder that it creates and puts everything into. In other words the directory it puts the .exe file into sorry it's bee a long few days.



  • Hi, one more thing you could try (since your app runs fine when launched from Qt Creator):
    define the environment variable (SET QT_DEBUG_PLUGINS=1) also in Qt Creator (in the Projects Tab, you can set it in Build Environment) then start your app and compare the trace output to the one you got with errors before.



  • Any other Ideas this just really doesn't make any sense. It runs perfectly from the directory that it is compiled to but I can't move it anywhere else and have the MySql drivers working.



  • Here's another: try skipping using windeployqt; instead switch to using manual deployment, use this nice guide



  • @hskoglund Ok tried it Same Thing!!



  • Hmmm... The deployment directory/the installation folder your app refuses to run from, is that inside C:\Program Files (x86) or a more normal folder like C:\Qt?



  • No I have it on the Desktop I'll try though!!



  • @shathcock Nope same thing!!!



  • Hmmmm, if I understand correctly: you have 2 directories/folders with identical contents but in different places on your C: drive. When you doubleciick to launch your app in one of them everything is fine and dandy, but when you try doubleclicking your app in the other directory you get that mysql plugin loading error?



  • @hskoglund Basically yes. The one directory that is does run out of is the one that it is placed into when it is compiled, in other words the build..........\release folder. When I move the app.exe file and try to build a distribution folder it just all falls apart. The app actually runs but no database connection. I will say this also I spent 3 days with it not running until I set the environment variable QT_QPA_PLATFORM_PLUGIN_PATH. Could that be the problem. Sorry my brain is fried from trying to figure this stuff out.



  • Aha, I see :-)
    The QT_QPA_PLATFORM_PLUGIN_PATH fiddling explains why in that debug trace above there are no database dlls listed, because Qt is barking up the wrong tree I mean directory. (Because while settingQT_QPA_PLATFORM_PLUGIN_PATH takes care of custom loading qwindows.dll from a directory of your choosing, it leaves other plugins like database guys stranded.)

    QSalDatabase: QMYSQL driver not loaded
    QSqlDatabase: available drivers; <-- no DLLs listed here
    QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins

    So try placing the directory sqldrivers next to your .exe file, that should do it (just copy it from C:\5.5\msvc2013\plugins)



  • Ok so I already ad a sqldrivers folder in the same directory with the .exe file but I re-copied it anyway and changed the QT_QPA_PLATFORM_PLUGIN_PATH to point to the directory in that folder since I actually had pointed it to the directory in the qt installation and same thing still runs no database. I think I am loosing my mind over this.....



  • Yeah i know, thinking too much about Qt's plugins can be traumatic, I've been there too..
    Anyway, simplify always helps, I suggest tossing that QT_QPA_PLATFORM_PLUGIN_PATH setting.
    Then try to get your app running without any "This application failed to start because ... Qt platform plugin "windows"." dialog boxes. Once you done that, mysql functionality should be much easier to accomplish.



  • Ok any Idea how to do that....lol I worked on that one for 2 days.



  • Well if you cannot get the qwindows.dll plugin to load the vanilla/default way, you could try setting another environment variable: set QT_PLUGIN_PATH=pluginsdirectory
    This one is better (causes less brain damage) because if you can get the qwindow.dll plugin loaded successfully that way, then qsqlmysql.dll should load as well. (The pluginsdirectory above should contain a platforms directory and a sqldrivers directory.) Also I've written about the different settings here.



  • Wonderful I'll read it but here is something really strange. So I turned on debug and ran the program from the folder that it won't run from and I'm getting the windows plugin problem again however before I get that warning I get the QMYSQL driver not loaded error does that make any sense to you?



  • Yeah I've seen that, usually occurs because you have global/static variables with QDatabase contents or similar. If you have, move them to your MainWindow class. Qt and global variables do not mix well :-)


Log in to reply
 

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