【问题标题】:QSQLITE driver not loaded - where to put qt database driver plugins未加载 QSQLITE 驱动程序 - 放置 qt 数据库驱动程序插件的位置
【发布时间】:2011-07-06 07:05:31
【问题描述】:

我正在使用 VS2008 和 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;

【问题讨论】:

  • 我现在可以成功构建 VS。而且我也在制作驱动程序包,但数据库仍然无法在其他系统中运行

标签: c++ visual-studio sqlite qt


【解决方案1】:

驱动程序需要放在“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

【讨论】:

  • 还是不明白,sqldrivers应该放在哪里?
  • sqldrivers directory 应该放在与主可执行文件相同的位置。
【解决方案2】:

好吧,函数:addDatabase("QSQLITE");接受两个参数,第一个是驱动程序,第二个是你的连接名称,(作为 QString 传递)

现在,试试以下方法:

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

它对我有用,所以我想它对你有用。 (假设 SQLITE 在您安装的驱动程序中)

您可以通过以下方式检查 SQLITE:

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

祝你好运!

扎赫·J.G.

【讨论】:

    【解决方案3】:

    只需添加具有文件夹生命平台和驱动程序的dll文件

    所以只需使用windeployqt 工具构建应用程序

    【讨论】:

      【解决方案4】:

      Linux 平台: 使用.config 文件中启用的BR2_PACKAGE_QT5BASE_SQLITE_QT=y 选项构建您的Qt 源,并将输出路径lib/qt/plugins/sqldrivers/libqsqlite.so 中生成的sqldrivers 复制到目标板上的/usr/lib/qt/plugins/sqldrivers/ 并运行您的应用程序。
      您还可以使用“QApplication::libraryPaths()”API 检查所有二进制/应用程序在哪里以及所有二进制文件/应用程序查找库和插件

      【讨论】:

        【解决方案5】:

        先试试这个:

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

        检查可用的驱动程序。

        【讨论】:

          【解决方案6】:

          我遇到了同样的错误

          QSqlDatabase:未加载 SQLite 驱动程序 QSqlDatabase:可用的驱动程序:

          SQLite 驱动在QT(install_dir)&gt;6.1.3&gt;mingw81_64&gt;plugins&gt;sqldrivers&gt;qsqlite.dll

          不知道为什么,但在这之后它起作用了。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-05-17
            • 1970-01-01
            • 2013-11-08
            • 1970-01-01
            • 2014-12-17
            • 2020-08-02
            • 2016-12-02
            相关资源
            最近更新 更多