I built a qt application that connects and queries a database using mysql . it works perfectly fine on my development computer (the computer with Qt Creator on it). but when I deploy it using windeployqt.exe and run it on another computer it doesn't connect to the database for some odd reason.
Note that I do have a working database (mysql as well) on the other computer (the one that fails to connect to the database)
I'm not sure what to do, I tried using addLibraryPaths but it didn't work (I'm not even sure if I did it correctly).
I'm using :
mysql server 5.5.36
workbench 6.0
Qt Creator 5.4.0
I also tried looking into statically building my application but I failed to understand the procedures in doing so.
I would greatly appreciate it if any of you Qt gods could help with this.
i finally found the problem and solved it.
problem: for some reason the target computer wasnt recognizing or reading libmysql.dll in C:\Windows ,and thanks to #Marco i used db.LastError and got my application to display the error , it was "Driver not Loaded Driver not Loaded" which meant that there was something wrong with libmysql.dll (note i copied this dll from MySql folder installed on the target machine )
Solution : i had to copy libmysql.dll from my development machine and place it in C:\Windows on the target machine (i noticed that libmysql.dll on my target machine was smaller in size than the one i used on my development machine)
for some reason the program only operates when the libmysql.dll from the development machine is present in C:\Windows in the target machine
this solution should fix any "Driver not loaded" or "QMySQL driver not loaded "(etc) errors . thanks everyone for trying to help , thanks again #Macro
I assume you built your application in release mode instead of debug mode.
If you have libmysql.dll and qsqlmysql.dll alongside your executable. Create a directory/folder and name it sqldrivers. Place qsqlmysql.dll in the directory you created and deploy it alongside your executable.
PS: I didn't see nnb's comment earlier. I think he's saying the same thing as my answer
From the comment we have cleared that there is a problem loading the driver, I am confident that you have the put qsqlmysql.dll in the correct place, as you have used the deploying utility, so I suspect that the problem is qsqlmysql.dll needs another dll that cannot be found in the system path.
I suggest that you run this tool:
http://www.dependencywalker.com/ on the qsqlmysql.dll
That will help you finding out what is missing, when you find that out, you will probably have to modify the system path or to install a dll that is missing.
I know this thread is old, but I've been having the same issue, and the solution was very easy (once you know).
The problem is that when you execute your application inside Qt, it will find the needed dll to load the drivers (libmysql.dll) if you located it in the correct Qt folder (Qt/path_to_compiler/bin), in my case: C:\Qt\5.9.1\msvc2017_64\bin. But when you try to execute the deployed executable, it is not able to find it. You will notice that the problem is solved if you paste the dll in C:\Windows, as #Nelioussness said. But that's not the solution, as it won't work in a different computer.
Just go to MySQL installation folder and look for the file libmysql.dll if you didn't do it before. In my case, it was located in C:\Program Files\MySQL\MySQL Server 5.7\lib. Once you find it, copy it to your release folder, exactly at the same level as the executable. It didn't work for me when I put it inside 'sqldriver' folder and everything was solved by just putting it outside, next to the .exe
Hope this helps :)
Related
I see that this has been a problem for many users, way back. I have read and tried most of the tips from these questions and answers without success. My connection works well on the development PC ("devPC"). The problem starts when I attempt to run it on a PC without Delphi installed. I think the problem is that it looks for libmysql.dll in the same directory as it was found on devPC. I have put this libmysql.dll in the same folder as the EXE file and also have the INI files for FireDac there. Anyone who knows how I get the the program to look for this .DLL at the right folder? Can I change this somewhere? The error message is:
Loading driver MySQL ...
Error: [FireDAC][Phys][MySQL]-314. Cannot load vendor library
[C:\Users\sjubu\Documents\Embarcadero\Studio\Projects\Win32\Debug\libmysql.dll]. The specified module was not found.
Hint: check it is in the PATH or application EXE directories, and has x86 bitness.
Before anyone marks this a duplicate, please read to the end, as none of the many similar questions helped.
I've just installed Delphi Community Edition and MySql (recommended download from this link) on Windows 11, but am having trouble connecting Delphi to MySql.
I used MySql Workbench to create a new connection, and created a new database with a table and some sample data.
If I start Delphi and create a new Windows VCL project, then choose Tools -> FireDAC Explorer, then try to expand the connection, I get an error "Cannot load vendor library [libmysql.dll, libmariadb or libmysqld.sll]"
I'm assuming that only libmysql.dll is relevant to me, as I don't use Maria, and don't have the other DLL anywhere on my system. I used sigcheck to check that I indeed have a 64-bit version of the DLL.
I have the same error if I use the Data Explorer in Delphi itself.
I read a lot of questions here about this exact error, but all of the ones I've seen suggest one of two things, neither of which apply here...
Add the DLL's location to the PATH environment variable - I have libmysql.dll in the C:\Program Files\MySQL\MySQL Server 8.0\lib folder, and have added that to my PATH environment variable, but it didn't help. I restarted Delphi, but no joy. I even added a TEdit to my form in Delphi, with the following code...
Edit1.Text := GetEnvironmentVariable('PATH');
This confirmed that I had set the environment variable correctly.
Copy the DLL to the project's bin folder. I tried this as well, and it didn't make any difference. However, as I haven't got as far as trying to connect my code to MySql, I didn't expect this to help. I can't even get Delphi itself to connect.
Anyone any ideas? I know there are a lot of questions about this error, but none of them worked for me.
Thanks
Please check the rest of the error message. Sometimes it specifies the bitness of the DLL you need. It's easy to miss that bit and get the wrong version.
I think MySql comes with a 64-bit DLL, but for some reason I never worked out, Delphi seems to need a 32-bit version. I had to search around and download one from a 3rd-party site, which I don't like, but it did work.
Excuse me, I would like to ask about how can I connect Delphi with MYSQL with ZeosLib. I already know the steps but I can't get it yet cause when I change the Properties in ZConnection where Connection = True, it can't. And this is the message
By the way, my OS actually Linux Ubuntu and I have to use VirtualBox to work on it.
So if there's somebody know this, I'm begging you guys to help me.
You need to download the dynamic link library that the error message is referencing. The following link https://dev.mysql.com/downloads/windows/installer/8.0.html takes you to MySQL Download page for the latest version of MySQL 8.0.13, or go to this page if you are on a 5.X version https://dev.mysql.com/downloads/installer/
Download the appropriate file 32bit or 64 bit and install it. Find the installed libMySQL.dll and put that file in the same directory as the executable being created by Delphi
You may instead set the Zeos Connection Component's Library Location property to the directory that the dll is located in.
I have got a similar project and I used this link:
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Connect_to_MySQL_Server_(FireDAC)
and it's working.
But if you mean : set the "connection := true" in designtime, you have to use the platform assistant under the linux as well.
I'm working on Win10 64bit with Qt5.10.1, VS2017, MySql 8.0(64it). Everything is fine in my computer. After I deploy my application on other computers, a error message "Driver not load" pop up.
I have checked many forums including two posts in stackoverflow, [Qt][QMYSQL] Deployed app - Driver not loaded
Deploying qt mysql application
But it doesn't work for me. The following are the dll files in my folder:
qsqlmysql.dll is included in the folder sqldrivers.
All of the platform, software, SDK are 64 bit. can anyone help me? thanks.
Thanks everyone who answer my question. I tried many methods and almost give up. I never used MySQL before and this time I choose the newest MySql 8.0.12. I ignore the procedure and post the solution directly:
Beside libmysql.dll and qsqlmysql.dll, other two *.dll files are also necessary (but no solution I searched refers to them): libeay32.dll and ssleay32.dll, they are located at MySql/bin/. For my computer, they are contained in the system path, while for other computers that do not install MySql, they lack these two. Thus, we need to copy them to the package as well.
For anyone who encounter the same problem, for example using the newest MySql 8.0, you can try this method.
I created a simple program in Visual Studio. I made an installer and I tried to install it on my computer (the one I used to create the program) and when I run it, it works fine. Now the problem is, when I installed it on a different pc (it doesn't have visual studio) and run the program, it shows this error.
I browsed on existing questions here in SO and all I found are same errors DURING PROGRAM CREATION. More like they are not yet finished with the program. My problem is how to fix this error WHEN RUNNING IT ON A DIFFERENT PC AFTER INSTALLATION. Could someone please help me? Thanks. :)
It seems that you don't export MySql.Data.dll in your project.
Have you check if that file is in the install folder in the computer in which it is not working?
In this case you have to set the Copy Local properties to True. See details here