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

时间:2015-04-09 22:08:47

标签: mysql database qt connect

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

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

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

我正在使用:

  • mysql server 5.5.36
  • workbench 6.0
  • Qt Creator 5.4.0

我也尝试过静态构建我的应用程序,但是我没有理解这样做的过程。

如果你们中的任何一个Qt众神可以帮助我,我将不胜感激。

4 个答案:

答案 0 :(得分:1)

我终于找到了问题并解决了它。

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

解决方案:我不得不从我的开发机器上复制libmysql.dll并将它放在目标机器上的C:\ Windows中(我注意到我的目标机器上的libmysql.dll的大小比我在我的机器上使用的那个小)开发机器) 由于某种原因,程序仅在开发机器中的libmysql.dll出现在目标机器的C:\ Windows中时才会运行

此解决方案应修复任何“未加载驱动程序”或“未加载QMySQL驱动程序”(等)错误。感谢大家的帮助,再次感谢@Macro

答案 1 :(得分:0)

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

PS:我之前没有看到nnb的评论。我认为他说的与我的答案相同

答案 2 :(得分:0)

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

qsqlmysql.dll

上的

http://www.dependencywalker.com/

这将帮助您找出遗漏的内容,当您发现它时,您可能需要修改系统路径或安装缺少的DLL。

答案 3 :(得分:0)

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

问题是,当您在Qt中执行应用程序时,如果您将驱动程序(libmysql.dll)放在正确的Qt文件夹中,它将找到所需的dll来加载驱动程序( Qt / path_to_compiler / bin ),在我的情况下: C:\ Qt \ 5.9.1 \ msvc2017_64 \ bin 。但是当您尝试执行已部署的可执行文件时,它无法找到它。如果你将dll粘贴到 C:\ Windows 中,你会发现问题已经解决,正如@Nelioussness所说。但这不是解决方案,因为它不适用于不同的计算机。

如果您以前没有这样做,只需转到MySQL安装文件夹并查找文件 libmysql.dll 。就我而言,它位于 C:\ Program Files \ MySQL \ MySQL Server 5.7 \ lib 中。找到后,将其复制到发布文件夹,与可执行文件完全相同。当我将它放在'sqldriver'文件夹中时,它对我来说不起作用,只需将它放在外面,然后放在.exe

旁边就可以解决所有问题。

希望这会有所帮助:)