部署在另一台计算机上时,应用程序不连接到数据库

Application does not connect to database when deployed on another computer

我构建了一个使用 mysql 连接和查询数据库的 qt 应用程序。它在我的开发计算机(装有 Qt Creator 的计算机)上运行良好。但是当我在另一台计算机上使用 windeployqt.exe 和 运行 部署它时,由于某些奇怪的原因它没有连接到数据库。

请注意,我在另一台计算机(无法连接到数据库的计算机)上确实有一个工作数据库(mysql)

我不确定该怎么做,我尝试使用 addLibraryPaths 但它没有用(我什至不确定我是否正确使用)。

我正在使用:

我也尝试研究静态构建我的应用程序,但我未能理解这样做的过程。

请各位Qt大神帮忙解决一下,不胜感激。

我假设您在 发布模式 而不是 调试模式 下构建了应用程序。 如果您的可执行文件旁边有 libmysql.dllqsqlmysql.dll。创建一个 directory/folder 并将其命名为 sqldrivers。将 qsqlmysql.dll 放在您创建的目录中,并将其与可执行文件一起部署。

PS: 之前没看到nnb的评论。我觉得他说的和我的回答一样

从评论中我们已经清除了加载驱动程序时出现的问题,我相信您将 qsqlmysql.dll 放在了正确的位置,因为您已经使用了部署实用程序,所以我怀疑问题是 qsqlmysql.dll 需要另一个在系统路径中找不到的 dll。 我建议你运行这个工具:

http://www.dependencywalker.com/ 在 qsqlmysql.dll

这将帮助您找出缺少的内容,当您找到它时,您可能必须修改系统路径或安装缺少的 dll。

终于找到问题并解决了

问题:由于某种原因,目标计算机无法识别或读取 C:\Windows 中的 libmysql.dll,感谢@Marco,我使用了 db.LastError 并让我的应用程序显示错误,它是 "Driver not Loaded Driver not Loaded",这意味着 libmysql.dll 有问题(注意我从安装在目标机器上的 MySql 文件夹复制了这个 dll)

解决方案:我必须从我的开发机器上复制 libmysql.dll 并将其放在目标机器上的 C:\Windows 中(我注意到我的目标机器上的 libmysql.dll 是尺寸比我在我的开发机器上使用的小) 由于某种原因,程序仅在开发机器的 libmysql.dll 出现在目标机器

的 C:\Windows 中时运行

此解决方案应修复任何 "Driver not loaded" 或 "QMySQL driver not loaded "(等)错误。感谢大家的帮助,再次感谢@Macro

我知道这个话题已经过时了,但我一直遇到同样的问题,而且解决方案非常简单(一旦你知道)。

问题是,当您在 Qt 中执行您的应用程序时,如果您将它放置在正确的 Qt 文件夹中 ([,它将找到加载驱动程序 (libmysql.dll) 所需的 dll。 =31=]),在我的例子中:C:\Qt.9.1\msvc2017_64\bin。但是当您尝试执行已部署的可执行文件时,它无法找到它。如@Nelioussness 所说,如果将 dll 粘贴到 C:\Windows,您会注意到问题已解决。但这不是解决方案,因为它无法在不同的计算机上运行。

只需转到 MySQL 安装文件夹并查找文件 libmysql.dll 如果您之前没有这样做。在我的例子中,它位于 C:\Program Files\MySQL\MySQL Server 5.7\lib。找到它后,将其复制到 release 文件夹,与可执行文件处于同一级别。当我把它放在 'sqldriver' 文件夹中时它对我不起作用,只需将它放在外面,.exe

旁边就可以解决所有问题

希望对您有所帮助:)