我在Qt / C ++中做了一个软件。 我需要将它部署在Windows 7(64位)上,这也是我开发软件的主机。
问题是我的软件可以与开发的机器上的sqlite数据库进行交互,但是当我尝试在其他机器上部署我的软件时,它不能与数据库交互。 我试图使用“以pipe理员身份运行”,但它没有帮助。 我也尝试使用兼容模式。
数据库位于C:\Users\username\Desktop\db1.sqlite
,因此我的软件无需联网或互联网即可正常运行。
我还用我的软件包括了QtGui4
, QtCore
和QtSql4
dll。
有人能指出什么可能会出错吗?
对,在提供解决方案之前,有几件事要讨论,即:
1)当您在Windows机器上开发软件时,它的工作方式像一个魅力,但不是在您已部署软件的机器上,首先要检查的是依赖关系。 他们都正确运输?
我将如何去检查它? 那么,这是免费提供的依赖步行者的目的。 您必须在部署软件的机器上运行; 换句话说,在部署之后。 如果它在那里工作,不要在开发机器上运行它。 好,这是关于调试,所以让我们得到具体的Qt …
2)您正在使用QtSql模块来处理Qt应用程序中的良好数据库交互。 但是,主要的动态库,又名。 QtSql4.dll是关于抽象的功能。 也就是说,所有的Qt代码并不涉及具体的驱动程序本身。
你可以问为什么这样做? 原因是比较直接的,因为QtSql模块提供了一个抽象接口,应该可以在不用重建和重新部署软件的情况下即时更改数据库存储机制。 如果最终用户决定在某一天使用另一个数据库呢? 这是不可能的。
对,我们正在接近这个被称为插件架构的通用设计原则。 Qt项目在这里有关于它的文档。 现在,我们已经非常接近解决方案,所以让我们进一步走到最后。
3)这可能是“太长了;不要读”部分:当你部署你的应用程序时,你需要让最终用户也拥有插件。 这意味着,您需要在这种情况下发送两种类型的sqls,QtSql4.dll以及特定的驱动程序插件。 你显然错过了以后。 因此,准备运送。 但是,第二,对吗? 好的,所以你似乎正在使用sqlite和Qt 4,所以你将需要得到的SQLite的Qt 4驱动程序。
你可以自己在这里查看Qt SQL数据库驱动程序:
SQL数据库驱动程序
根据你正在使用的sqlite版本,你有两个选择:
QSQLITE2 SQLite版本2
QSQLITE SQLite版本3
基本上,如果你必须这样做,你将如何自己构建驱动程序:
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)这就是说,这是一个完全通用的方法,所以这将适用于任何SQL类型,如果你替换你需要的SQLite。
您还应该将qsqlite4.dll
放在一个名为sqldrivers
的目录中,以及应用程序可执行文件的发行版本中。