Не загружен драйвер QSQLITE - где добавить плагины драйвера базы данных qt
Я использую 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;
Ответы
Ответ 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
Ответ 2
Ну, функция: addDatabase ("QSQLITE"); принимает два параметра, первый - это драйвер, а второй - имя вашего соединения (передается как QString)
Теперь попробуйте следующее:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "SQLITE");
Это сработало для меня, поэтому я думаю, что это сработает для вас. (Предполагая, что SQLITE входит в число установленных вами драйверов)
Вы можете проверить SQLITE следующим образом:
qDebug() << QSqlDatabase::drivers();
Удачи!
Захер Ю.Г.
Ответ 3
Просто добавьте DLL файл, в котором есть папка Life Platform и Driversr
так просто создайте приложение, используя инструмент windeployqt
Ответ 4
Попробуйте сначала:
qDebug() << QSqlDatabase::drivers();
проверить доступные драйверы.
Ответ 5
Платформа Linux: создайте свой источник Qt с BR2_PACKAGE_QT5BASE_SQLITE_QT=y
опцией BR2_PACKAGE_QT5BASE_SQLITE_QT=y
в файле .config
и скопируйте sqldrivers, сгенерированный в выходном пути lib/qt/plugins/sqldrivers/libqsqlite.so
в /usr/lib/qt/plugins/sqldrivers/on Целевая доска и запустить ваше приложение.
Также вы можете проверить, где и все ваши двоичные файлы/приложения ищут библиотеки и плагины, используя API "QApplication :: libraryPaths()"