最近弄一个数据管理系统,最后遇到的问题是:执行release,然后windeployqt打包后,在本机能完美的运行,可是到了其他电脑后,就会显示连接不上数据库。
那么狠显然,就是数据库的驱动问题。
要解决这个问题,我们可以有如下几种方法:
1.在release文件夹下新建plugins文件夹,然后将qt安装目录下的/plugins/sqldrivers拷贝至此
而后,在main.cpp中加入如下代码:
QApplication::addLibraryPath("./plugins");
重新编译,发布即可。
********这里要非常注意,因为我就犯了这个错误,必须得保证qsmysql.dll是可用的,那么可能你会问了,既然之前能运行,那么为什么会出错。
如果你的电脑里存在几个qsqmysql.dll文件呢,你该选哪个呢?这个就只有试了,别无他法,或者就是你能很准确的知道这个.dll文件就是可以运行的。如果不确定的话,就导网上下载一个就ok了,如果是新手,我建议你自己动手编译一下,虽然在QT5.3之后就自带了数据库驱动,但是他缺乏了依赖关系吧,于是,没办法,接着更新,5.6我没用过,不知道有没有解决了这个问题。
2.在不重新编译的情况下,在exe同级目录下新建plugins目录,同样将sqldrivers拷贝过去。
而后,新建qt.conf文件,内容如下:
[Paths]
Plugins=./plugins
这里即指定了插件库的位置,还有的前辈说,可以不用新建plugins目录,只需将.dll复制过来,直接新建qt.conf文件为空就可以了,这样就默认指定了插件在当前目录。
3.其实我觉得,上面的都是废话,有了windeployqt这个强大方便的工具以后,我们直接windeployqt就行了,它会自动帮我们做这些事,但是,它复制过来的.dll不一定是可用的。这里就需要自己去实验是不是对的了。还有就是我们需要在exe同级目录下加入libmysql.dll文件,这是mysql自带的,在mysql目录下的lib/plugins可以找到,可能会有所不同,大概就这样吧。
***另外,如果libmysql.dll与qsqmysql.dll不匹配的话会出现内存溢出的情况。
好了,就说这么多了,如果有问题,欢迎大家提出来。