QtSql应用程序不能在已部署的机器上工作

QtSql application not working on the deployed machine

本文关键字:机器 工作 部署 应用程序 不能 QtSql      更新时间:2023-10-16

我用Qt/c++做了一个软件。我需要将它部署在Windows 7(64位)上,这也是我开发软件的主机。

问题是我的软件可以与开发机器上的sqlite数据库交互,但是当我试图将我的软件部署到其他机器上时,它不能与那里的数据库交互。我也试着用"以管理员的身份运行",但是没有用。我也试过使用兼容模式。

数据库位于本地C:UsersusernameDesktopdb1.sqlite,因此我的软件正常运行不需要联网或互联网。

我还将QtGui4, QtCoreQtSql4 dll包含在我的软件中。

谁能指出这里可能出了什么问题?

对,所以在提供解决方案之前,这里有几件事需要讨论,即:

1)当您在Windows机器上开发软件,并且它工作得很好,但在您部署软件的机器上却不行时,首先要检查的是依赖项。它们是否都正常运输?

我怎么去检查呢?好吧,这就是免费提供依赖项行走器的目的。你必须在部署软件的机器上运行;换句话说,部署之后。不要在开发机器上运行它,如果它可以在那里工作。很好,这是关于调试的,所以让我们获得特定的Qt…

2)你正在使用QtSql模块来处理在Qt应用程序中很好的数据库交互。然而,主动态库,即。dll是关于抽象功能的。也就是说,所有Qt代码都不处理特定的驱动程序本身。

你可能会问为什么这样做?原因相对简单,因为QtSql模块提供了一个抽象接口,所以应该可以动态地更改数据库存储机制,而无需重新构建和重新部署软件。如果最终用户有一天决定使用另一个数据库怎么办?没有这个是不可能的。

是的,我们正在接近一个通用的设计原则,它被称为插件架构。Qt项目在这里有关于它的文档。现在,我们已经非常接近解决方案了,所以让我们再向前一步。

3)这可能是"太长;不要阅读"部分":当您部署应用程序时,您将需要让您的最终用户也拥有插件。这意味着,您需要在此上下文中发布两种类型的sql, QtSql4.dll以及特定的驱动程序插件。你显然错过了后者。因此,准备好要发货的东西。那是几秒,对吧?好的,所以你似乎目前正在使用sqlite和Qt 4,所以你需要得到sqlite Qt 4驱动程序。

你可以在这里自己检查Qt SQL数据库驱动程序:

SQL Database Drivers

根据您使用的sqlite版本,您有两个选项:

QSQLITE2 SQLite version 2

QSQLITE版本3

基本上,如果你必须这样做,这就是你自己构建驱动程序的方式:

cd %QTDIR%srcpluginssqldriverssqlite
qmake "INCLUDEPATH+=C:/SQLITE/INCLUDE" "LIBS+=C:/SQLITE/LIB/SQLITE3.LIB" sqlite.pro
nmake

一旦你有了那个dll,我相信你已经这样做了,如果你的程序已经在Windows上工作了,复制qsqlite4.dll $QTDIRpluginssqldrivers到你的应用程序旁边的sqldrivers目录,可执行文件。它将被Qt自动拾取,然后没有任何麻烦,除非你手动打乱路径,你不应该这样做。

4)也就是说,这是一个完全通用的方法,所以这将适用于任何SQL类型,如果你用你需要的sqlite替换。

您还应该将qsqlite4.dll放在一个名为sqldrivers的目录中,与您的应用程序可执行文件的发布版本放在一起。