Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Cant connect to mysql database: QMYSQL driver not loaded


  • Lifetime Qt Champion

    It's explained in the documentation
    In the plugins subfolder of your Qt installation under sqldrivers.
    It's a .dll file since you're on Windows.
    Qt looks for the plugins in the subfolder named plugins unless you tweaked the qt.conf file.

    Likely because it can find the plugin but will fail to load it. Most of the time it happens because the MySQL .dll files can't be found at run time hence my suggestion in my last post.

    The current Qt documentation does.

    No you're note, however MySQL server 8 saw a change in their support for their my_bool custom type. There's a patch to support build the Qt MySQL plugin with MySQL 8.



  • Thanks for your reply.

    The documentation you linked (http://doc.qt.io/qt-5/sql-driver.html#building-the-drivers) assumes mysql is installed in c:\mysql. This is not the case for a default installation of mysql8, as it installs itself into c:\program files and c:\program files (x86). This leads me to the conclusion that the install instructions on that page are outdated.

    Do you know any instructions for building the plugin for qt5 and mysql 8?

    Cheers,
    Cedric


  • Lifetime Qt Champion

    The doc says:

    You need to get the MySQL installation files. Run SETUP.EXE and choose "Custom Install". Install the "Libs & Include Files" Module. Build the plugin as follows (here it is assumed that MySQL is installed in C:\MySQL):
    

    This simply means that it assumes that the user selected that folder to install MySQL.

    Then:

    cd %QTDIR%\qtbase\src\plugins\sqldrivers
    qmake -- MYSQL_INCDIR=C:/MySQL/include "MYSQL_LIBDIR=C:/MYSQL/MySQL Server <version>/lib/opt"
    nmake sub-mysql
    

    It shows that the build is configured to use that folder.

    If you put MySQL somewhere else, update the command accordingly to use that folder.



  • I have done the steps again:
    c:\Qt\5.11.1\Src\qtbase\src\plugins\sqldrivers>qmake -- MYSQL_INCDIR="c:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include" MYSQL_LIBDIR="c:\Program Files (x86)\MySQL\MySQL Connector C 6.1"\lib
    and
    mingw32-make

    After this, there's no mysql.dll below C:\Qt\5.11.1\Src\qtbase\src\plugins\sqldrivers (in fact, there's no mysql.dll on my entire C:\ drive)

    However, this directory is newly created:
    C:\Qt\5.11.1\Src\qtbase\src\plugins\sqldrivers\plugins\sqldrivers
    it contains the following files: (and a few extra files with sqlite in the name)
    qsqlmysql.dll
    qsqlmysqld.dll
    qsqlodbc.dll
    qsqlodbcd.dll

    Where do I put these?

    Cheers,
    Cedric


  • Lifetime Qt Champion

    @cdwijs You forgot

    mingw32-make install
    

    as shown in the documentation...



  • Thanks jsulm,

    I've just done the mingw32-make install, but my Qt program does not load the driver yet.
    I've installed Process monitor (https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) to monitor the syscalls from my application. I've done the following steps with it:
    1-run procmon.exe
    2-choose filter-reset filter
    3-run my program
    4-choose tools-process tree
    5-select my program, right click, and choose "Add process to include filter" Now only the syscalls from my program are shown.
    6)ctrl-f mysql and press F3 a couple of times. Now I see BUFFER OVERFLOW. Can this be a problem?

    CreateFile C:\Qt\5.10.1\mingw53_32\plugins\sqldrivers\qsqlmysql.dll SUCCESS Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, Write, AllocationSize: n/a, OpenResult: Opened
    QueryInformationVolume C:\Qt\5.10.1\mingw53_32\plugins\sqldrivers\qsqlmysql.dll BUFFER OVERFLOW VolumeCreationTime: 31-01-2018 09:56:48, VolumeSerialNumber: AC0C-32AB, SupportsObjects: True, VolumeLabel: WinÀ
    

    Also, I see my program searches for libmysql.dll in the following paths:

    C:\ProgramData\Oracle\Java\javapath_target_378770\LIBMYSQL.DLL
    C:\Windows\SysWOW64\libmysql.dll
    C:\Windows\libmysql.dll
    C:\Windows\SysWOW64\wbem\libmysql.dll
    C:\Windows\SysWOW64\WindowsPowerShell\v1.0\libmysql.dll
    C:\Program Files\Git\cmd\libmysql.dll
    C:\Program Files\TortoiseGit\bin\libmysql.dll
    C:\Qt\Tools\mingw530_32\bin\libmysql.dll
    C:\Program Files\PuTTY\libmysql.dll
    C:\Program Files\MySQL\MySQL Utilities 1.6\libmysql.dll
    C:\Qt\5.10.1\mingw53_32\bin\libmysql.dll
    

    Mysql.dll is present on my system: C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\lib, so I copy it into
    C:\Qt\Tools\mingw530_32\bin
    Now I see libmysql.dll being successfully loaded by my program, and the error message is gone, and after supplying the correct password, I now have a connection into my mysql database.

    Thank you all for your assistance.

    Shall I edit my opening post with the solution, place it below, or make a new post about it?

    Cheers,
    Cedric


  • Lifetime Qt Champion

    @cdwijs The solution is already at the end of this thread, just mark it as solved.



  • @cdwijs
    I'm having trouble to execute these code lines

    My cmd input:

    D:\Qt\5.11.2\Src\qtbase\src\plugins\sqldrivers
    qmake -- MYSQL_INCDIR="C:\Program Files\MySQL\MySQL Server 8.0\include" MYSQL_LIBDIR="C:\Program Files\MySQL\MySQL Server 8.0\lib"

    mingw32-make sub-mysql

    My cmd output:

    C:\Users\lucya\Desktop>D:\Qt\5.11.2\Src\qtbase\src\plugins\sqldrivers
    'D:\Qt\5.11.2\Src\qtbase\src\plugins\sqldrivers' is not recognized as an internal or external command,
    operable program or batch file.

    C:\Users\lucya\Desktop>qmake -- MYSQL_INCDIR="C:\Program Files\MySQL\MySQL Server 8.0\include" MYSQL_LIBDIR="C:\Program Files\MySQL\MySQL Server 8.0\lib"
    Usage: qmake [mode] [options] [files]

    QMake has two modes, one mode for generating project files based on
    some heuristics, and the other for generating makefiles. Normally you
    shouldn't need to specify a mode, as makefile generation is the default
    mode for qmake, but you may use this to test qmake on an existing project

    Mode:
    -project Put qmake into project file generation mode
    In this mode qmake interprets files as files to
    be built,
    defaults to *; *; *; *.ts; *.xlf; *.qrc
    Note: The created .pro file probably will
    need to be edited. For example add the QT variable to
    specify what modules are required.
    -makefile Put qmake into makefile generation mode (default)
    In this mode qmake interprets files as project files to
    be processed, if skipped qmake will try to find a project
    file in your current working directory

    Warnings Options:
    -Wnone Turn off all warnings; specific ones may be re-enabled by
    later -W options
    -Wall Turn on all warnings
    -Wparser Turn on parser warnings
    -Wlogic Turn on logic warnings (on by default)
    -Wdeprecated Turn on deprecation warnings (on by default)

    Options:

    • You can place any variable assignment in options and it will be *
    • processed as if it was in [files]. These assignments will be *
    • processed before [files] by default. *
      -o file Write output to file
      -d Increase debug level
      -t templ Overrides TEMPLATE as templ
      -tp prefix Overrides TEMPLATE so that prefix is prefixed into the value
      -help This help
      -v Version information
      -early All subsequent variable assignments will be
      parsed right before default_pre.prf
      -before All subsequent variable assignments will be
      parsed right before [files] (the default)
      -after All subsequent variable assignments will be
      parsed after [files]
      -late All subsequent variable assignments will be
      parsed right after default_post.prf
      -norecursive Don't do a recursive search
      -recursive Do a recursive search
      -set <prop> <value> Set persistent property
      -unset <prop> Unset persistent property
      -query <prop> Query persistent property. Show all if <prop> is empty.
      -qtconf file Use file instead of looking for qt.conf
      -cache file Use file as cache [makefile mode only]
      -spec spec Use spec as QMAKESPEC [makefile mode only]
      -nocache Don't use a cache file [makefile mode only]
      -nodepend Don't generate dependencies [makefile mode only]
      -nomoc Don't generate moc targets [makefile mode only]
      -nopwd Don't look for files in pwd [project mode only]

    C:\Users\lucya\Desktop>mingw32-make sub-mysql
    mingw32-make: *** No rule to make target 'sub-mysql'. Stop.


  • Lifetime Qt Champion

    @lucaynnofrota said in Cant connect to mysql database: QMYSQL driver not loaded:

    D:\Qt\5.11.2\Src\qtbase\src\plugins\sqldrivers

    This is not a command but a directory!
    Please change to

    cd D:\Qt\5.11.2\Src\qtbase\src\plugins\sqldrivers
    

    then

    qmake -- MYSQL_INCDIR="C:\Program Files\MySQL\MySQL Server 8.0\include" MYSQL_LIBDIR="C:\Program Files\MySQL\MySQL Server 8.0\lib"
    


  • @jsulm

    Thanks for reply but I made a mistake. I removed CD on publication. But I have executed the correct code.


  • Lifetime Qt Champion

    @lucaynnofrota If you get
    "'D:\Qt\5.11.2\Src\qtbase\src\plugins\sqldrivers' is not recognized as an internal or external command,
    operable program or batch file."
    it means that you're trying to execute it. So, are you really sure you did

    cd D:\Qt\5.11.2\Src\qtbase\src\plugins\sqldrivers
    

    ?



  • @jsulm
    Yeah.

    0_1542017602132_ebe34f6b-8996-4fca-ac11-4ede9bca52e1-image.png

    I'm using this code in .bat file!



  • Does anyone succeed with MySQL and Qt under Windows? I believe that nobody reaches the DB. So! no MySQL connection with Qt? Those who give their help didn't really try, I wonder.



  • @realmodus
    No idea what you're talking about.

    @jsulm
    Your

    cd D:\Qt\5.11.2\Src\qtbase\src\plugins\sqldrivers

    I suspect this didn't work for OP as it needs to be cd /d D:\... to make the D: drive the current drive for the subsequent qmake command to be on the right drive, else it'll still be on C:?


  • Lifetime Qt Champion

    @JonB You're right I didn't think about the drive



  • we had the same driver nod loaded issue. we fixed by switch compiler as 32bit from originally 64bit to compile application in Qt. Hope this help. some of our machine is 32bit machine.



  • @cdwijs I wish to information you that I have been following the steps you took to build QMySQL driver for Qt 5.13.0 though. However, I got lost at the point you gave three (3) steps you took to get qmake identify mysql driver because at that point my qmake could not identify the driver:

    1. Download and install https://downloads.mysql.com/archives/get/file/mysql-connector-c-6.1.11-win32.msi

    2. Add C:\Qt\Tools\mingw530_32\bin and C:\Qt\5.10.1\mingw53_32\bin to the path

    3. Open cmd.exe, and enter the following commands:

    4. Are there some other things you did which, perhaps, you did not mention on the steps?

    5. In step 2 of your procedure, you said you added C:\Qt\Tools\mingw530_32\bin and C:\Qt\5.10.1\mingw53_32\bin to the path. Did you mean path of system variable?

    I installed MySQL 8.016 community edition and used the same c++ connector, 6.1 32-bit you used.

    Followings are the commands I used but qmake could detect MySQL source driver:
    cd C:\Qt\Qt5.13.0\5.13.0\Src\qtbase\src\plugins\sqldrivers
    qmake -- MYSQL_INCDIR=C:\Program~Files~(x86)\MySQL\MySQL~Connector~C~6.1\include "MYSQL_LIBDIR=C:\Program~Files~(x86)\MySQL\MySQL~Connector~C~6.1\lib\opt"

    Can you help where I got it wrong?

    Cheers,

    Heman.


  • Lifetime Qt Champion

    @heman said in Cant connect to mysql database: QMYSQL driver not loaded:

    Are there some other things you did which, perhaps, you did not mention on the steps?

    "mingww32-make install" after successful build is missing.

    You should not set your PATH globally, do it in the cmd.exe window where you build.
    These paths looks strange:
    "C:\Program~Files~(x86)\MySQL\MySQL~Connector~C~6.1\include "MYSQL_LIBDIR=C:\Program~Files~(x86)\MySQL\MySQL~Connector~C~6.1\lib\opt""
    Use complete paths with escaped spaces. Even better would be to install MySQL stuff in a directory without spaces.



  • I get it now. It works.
    I might have included some kind of atrocities who knows? However, these are the steps I took:

    1. I installed MySQL community edition
    2. I installed mysql connector c 6.1
    3. I created a .bat file with the following commands: C:\Windows\System32\cmd.exe /E:ON /V:ON /K C:\Qt\Qt5.13.0\5.13.0\mingw73_32\bin\qmake.exe
      SET _ROOT=C:\Qt\Qt5.13.0
      SET PATH=C:\Qt\Qt5.13.0\5.13.0\mingw73_32\bin;C:\Qt\Qt5.13.0\Tools\mingw730_32\bin;%PATH%
    4. I run cd C:\Qt\Qt5.13.0\5.13.0\Src\qtbase\src\plugins\sqldrivers
    5. I run qmake -- MYSQL_INCDIR="C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include" MYSQL_LIBDIR="C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\lib"
      mingw32-make
      ming32-make install
    6. And lastly, I copied libmysql.dll from C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\lib to C:\Qt\Qt5.13.0\Tools\mingw730_32\bin


  • @cdwijs said in Cant connect to mysql database: QMYSQL driver not loaded:

    Hi All,

    I'm one step closer to my goal, I can now build the plugin. I cannot yet connect to my database.
    Steps I've taken:

    1. Download and install https://downloads.mysql.com/archives/get/file/mysql-connector-c-6.1.11-win32.msi
    2. Add C:\Qt\Tools\mingw530_32\bin and C:\Qt\5.10.1\mingw53_32\bin to the path

    Hi,
    I am struggling with the same issue, where exactly did you add C:\Qt\Tools\mingw530_32\bin and C:\Qt\5.10.1\mingw53_32\bin to?



  • @hobbyProgrammer I've added them to the PATH. On widows7, you can find that setting here:
    start->control panel->system and security->system->Advanced system settings->Advanced->Environment Variables->System variables->Path->Edit...

    You can see the current value of the path variable by start->run->cmd and the command:
    echo %PATH%



  • @cdwijs thanks, but unfortunately it didn't work for me :(


  • Lifetime Qt Champion

    @hobbyProgrammer Did you log out and log in after changing PATH?



  • @jsulm open the cmd again or log out as a computer user?


  • Lifetime Qt Champion

    @hobbyProgrammer Log out as user and login again, then check in terminal as @cdwijs suggested.



  • @hobbyProgrammer
    In the time it takes to wait for an answer, and in order to be simply confident everything sees the new environment variable, isn't it just quicker to completely log out & in or even reboot and then you know for sure where you are?!



  • This post is deleted!


  • Hello,

    I have gone through the same issue. there are 2 libmysql.dll libraries version. One for 32 and the other for 64 bits.

    These 2 files are both available inhere :
    https://www.dll-files.com/libmysql.dll.html

    I advise you to do the following.

    • create a folder in the C drive and name it as you wish and set the PATH to include that folder.

    • Step number 2, reload your system.

    • Step number 3 copy one of the 2 files libmysql.dll in that folder and try to run your binary if this doesnt work then try the second one.

    This should work!

    have a good day!


  • Lifetime Qt Champion

    @Back2coding downloading .dlls from 3rd party website like that is usually a bad idea. You do not know what might lurk in there.


Log in to reply