在采用QT5 编写SQL相关程序时,执行的时候出现sql driver not loaded的情况。
采用如下语句:
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
qDebug() << db.lastError();
出错提示是:
QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
QSqlError("", "Driver not loaded", "Driver not loaded")
但是提示明明是各种数据库都支持,实际尝试的时候只有QSQLITE,QODBC支持,其余的都有问题。
解决办法网上挺多的,各种都是重新编译SQL库,或者加环境变量,用depends walker等;后来采用depends walker才解决了问题。
其实就是dll之间互相引用出了问题,注意检查下面几点,都通过了应该都能解决。
1. 程序执行采用哪里的库,即PATH问题,很多时候你认为系统应该找得到的地方,其实人家并没有找到那个目录。例如在QT目录下,有好几个地方都有sqldrivers的目录,其实最后系统根本没有找到这些地方,而是找到了mingw492_32/bin目录下了
2. 32bit库和64bit库必须对应
3. depends walker可以先看看没问题的dll,例如QSQLITE,看他们找到和没找到那些库;然后再定位目标库(本例:qsqlpsql.dll)需要哪些库,一个个复制到编译器或者运行环境里面。在此例中,搜索的顺序从qsqlpsql.dll -> libpq.dll ->libintl-8.dll->libiconv-2.dll; 最后干脆把所有的dll一并Copy到d:\Qt\Qt5.5.1\5.5\mingw492_32\bin\就成功了。