2011-03-01 112 views
17

我正在使用VS2008 & QT插件来制作我的应用程序。制作软件包时,我正在我得到错误的应用程序后:QSQLITE驱动程序未加载 - 放置qt数据库驱动程序插件的位置

QSqlDatabase: QSQLITE driver not loaded 
QSqlDatabase: available drivers: 
Database error: QSqlError(-1, "Driver not loaded", "Driver not loaded") 
QSqlError(-1, "Driver not loaded", "Driver not loaded") 

我已经加入了qsqlite.dll到我的包&也改变了LIBPATH。但我仍然得到这个错误。如何解决这个问题。

我的代码::

QStringList str; 
str.append("."); 
a.setLibraryPaths(str); 
a.addLibraryPath("./sqldrivers/"); 

//a.addLibraryPath("."); 

qDebug()<<"my library path : "<<a.libraryPaths(); 

QLibrary sqlib("qsqlite4.dll"); 
sqlib.load(); 
qDebug()<<"my library loaded"<<sqlib.isLoaded(); 

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
qDebug()<<"Database error:"<<db.lastError(); 

db.setDatabaseName("vimukti1234"); 
qDebug()<< db.lastError(); 

db.open(); 
QSqlQuery query; 
+0

我现在能够成功地在VS中建立。并且我也在制作驱动程序包,但仍然不能在其他系统中工作的数据库 – 2011-03-01 09:38:17

回答

30

驱动程序需要被放置在“sqldrivers”,而不是在同一目录下的可执行文件(它们被加载运行时,和Qt寻找他们“sqldrivers” )。 我们安装的应用程序之一的典型结构是这样的:

.: 
total 26616 
-rwxr-xr-x 1 root root 2245632 Sep 29 03:53 AlvaEditor.exe 
-rwxr-xr-x 1 root root 2335232 Sep 29 03:53 QtCore4.dll 
-rwxr-xr-x 1 root root 8421376 Sep 29 03:53 QtGui4.dll 
-rwxr-xr-x 1 root root 199168 Sep 29 03:53 QtSql4.dll 
-rwxr-xr-x 1 root root 306688 Sep 29 03:53 libctemplate.dll 
-rwxr-xr-x 1 root root 26624 Sep 29 03:53 qgif4.dll 
-rwxr-xr-x 1 root root 28672 Sep 29 03:53 qico4.dll 
-rwxr-xr-x 1 root root 200704 Sep 29 03:53 qjpeg4.dll 
-rwxr-xr-x 1 root root 222720 Sep 29 03:53 qmng4.dll 
-rwxr-xr-x 1 root root 439808 Sep 29 03:53 qsqlite4.dll 
-rwxr-xr-x 1 root root 21504 Sep 29 03:53 qsvg4.dll 
-rwxr-xr-x 1 root root 287232 Sep 29 03:53 qtiff4.dll 
drwxr-xr-x 2 root root 4096 Sep 29 03:53 sqldrivers 

./sqldrivers: 
total 432 
-rwxr-xr-x 1 root root 439808 Sep 29 03:53 qsqlite4.dll 
+0

+1谢谢谢谢谢谢谢谢谢谢!整个晚上我都很惊讶。 – 2012-06-26 21:08:39

+0

这对我也有帮助。忘记我必须包括sqldrivers和花了几年想知道为什么我的发布建设者不工作。干杯+1 :) – T3CHN0CR4T 2013-09-26 04:12:08

+0

我还是不明白,sqldrivers应该放在哪里? – Liviu 2017-08-06 14:43:47

0

请先尝试:

qDebug() << QSqlDatabase::drivers(); 

检查可用的驱动程序。

3

那么,函数:addDatabase(“QSQLITE”);有两个参数,第一个是司机,第二个是你连接的名称,(与QString传递)

现在,请尝试以下操作:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "SQLITE"); 

它为我工作,所以我想它会为你工作。 (假设SQLite是你安装的驱动程序中)

您可以通过以下检查SQLITE:

qDebug () << QSqlDatabase :: Drivers () ; 

祝你好运!

Zaher J.G.

相关问题