我用Qt / C ++编写了一个软件。我需要在Windows 7(64位)上部署它,这也是我开发软件的主机。
问题是我的软件可以与开发的机器上的sqlite数据库进行交互,但是当我尝试在其他机器上部署我的软件时,它无法与那里的数据库进行交互。我也尝试使用“以管理员身份运行”,但它没有帮助。我也尝试使用兼容模式。
数据库位于C:\Users\username\Desktop\db1.sqlite
本地,因此我的软件无需网络或互联网即可正常运行。
我还在我的软件中添加了QtGui4
,QtCore
和QtSql4
dll。
有人可以指出这里可能出现的问题吗?
答案 0 :(得分:7)
是的,所以在提供解决方案之前,有几件事需要讨论,即:
1)当您在Windows机器上开发软件并且它像魅力一样工作时,但在您部署软件的机器上却没有,首先要检查的是依赖关系。它们都运送得好吗?
我该怎么去检查呢?那么,这就是免费提供dependency walker的目的。您必须在部署软件的机器上运行;换句话说,在部署之后。如果在那里工作,请不要在开发机器上运行它。好,这是关于调试的,所以让我们得到Qt特定的......
2)您正在使用QtSql模块来处理Qt应用程序中的数据库交互。但是,主要的动态库,又名。 QtSql4.dll是关于抽象功能的。也就是说,所有Qt代码都不处理特定的驱动程序本身。
你可以问为什么这样做?原因相对简单,因为QtSql模块提供了一个抽象接口,应该可以在不重建和重新部署软件的情况下动态更改数据库存储机制。如果最终用户有一天决定使用另一个数据库怎么办?没有这个是不可能的。
是的,我们正在接近这里称为插件架构的通用设计原则。 Qt项目有关于它的文档here。现在,我们非常接近解决方案,所以让我们更进一步到最后。
3)这可能是太久了;不读" part:当您部署应用程序时,您还需要让最终用户拥有插件。这意味着,您需要在此上下文中发送两种类型的sqls,QtSql4.dll以及特定的驱动程序插件。你显然错过了后来的。因此,准备发货。但是第二个,对吗?好的,所以你似乎正在使用sqlite和Qt 4,所以你需要获得sqlite Qt 4驱动程序。
您可以自己查看Qt SQL数据库驱动程序:
根据您使用的sqlite版本,您有两种选择:
基本上,如果你必须这样做,你就可以自己构建驱动程序:
cd %QTDIR%\src\plugins\sqldrivers\sqlite
qmake "INCLUDEPATH+=C:/SQLITE/INCLUDE" "LIBS+=C:/SQLITE/LIB/SQLITE3.LIB" sqlite.pro
nmake
一旦你拥有了那个dll,我相信如果你已经在Windows上使用该程序你已经做了,将qsqlite4.dll
$ QTDIR \ plugins \ sqldrivers复制到应用程序旁边的sqldrivers
目录中,可执行文件。它将被自动拾取,然后Qt没有任何麻烦,除非你手动弄乱你不应该做的路径。
4)话虽这么说,这是一种完全通用的方法,所以如果用你需要的sqlite替换sqlite,这将适用于任何SQL类型。
答案 1 :(得分:1)
您还应将qsqlite4.dll
放在名为sqldrivers
的目录中,同时放置应用程序可执行文件的发行版。