QtSql应用程序无法在已部署的计算机上运行

-1 c++ windows sqlite qt qtsql

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

问题是我的软件可以与开发的机器上的sqlite数据库进行交互,但是当我尝试在其他机器上部署我的软件时,它无法与那里的数据库进行交互.我也尝试使用"以管理员身份运行",但它没有帮助.我也尝试使用兼容模式.

数据库位于本地C:\Users\username\Desktop\db1.sqlite,因此我的软件无需网络或互联网即可正常运行.

我还在软件中包含了QtGui4,QtCoreQtSql4dll.

有人能指出这里可能出现的问题吗?

lpa*_*app 8

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

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
Run Code Online (Sandbox Code Playgroud)

一旦你有了这个dll,我确信如果你已经在Windows上运行程序,你已经做了,将qsqlite4.dll$ QTDIR\plugins\sqldrivers复制到sqldrivers你的应用程序旁边的一个目录中,即可执行文件.除非你手动弄乱你不应该做的路径,否则Qt会自动拾取然后没有任何麻烦.

4)话虽这么说,这是一种完全通用的方法,所以如果你用你需要的sqlite替换sqlite,这将适用于任何SQL类型.