Qt sqlite проблема при развертывании: драйвер не загружен

Как следует из названия, у меня есть эта проблема в течение нескольких дней. Моя программа прекрасно работает в режиме отладки на QtCreator, но как только я выбираю режим выпуска, я получаю проблему с незакрепленным драйвером sql (я только запускал его на Windows 10). Я считаю, что мой .pro файл написан правильно (QT + = sql написано).

Я перепробовал большинство вещей, которые мог:

  • windeployqt.exe.
  • Переместить плагины в подпапку sqldrivers в исполняемую папку, содержащую все sqldrivers, предоставленные путем установки Qt, а также в исполняемую папку Qt5Sql.dll
  • Я также попытался использовать файл sqlite3.dll, предоставленный веб-сайтом sqlite, и переместить его в одну (проверенную по одному) исполняемую папку и подпапку sqldrivers.

Как я уже сказал, проблема возникает только при развертывании, поэтому мне интересно, есть ли что-то, что я должен был добавить в свой файл .pro.
У меня не установлена ​​программа sql на моей ОС Windows. Если это проблема, о которой я думаю, мне было бы интересно, как заставить мою программу использовать плагины из подпапки sqldrivers.

Ошибки:

QSqlDatabase: QSQLITE driver not loaded
QSqlDatabase: available drivers:
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins
QSqlQuery::exec: database not open

РЕДАКТИРОВАТЬ: Мне удалось это исправить. Проблема возникла из-за того, чего я не ожидал. Я использовал глобальные переменные, и одна из них была моей базой данных, я понял это, снова прочитав ошибку, так как казалось, что база данных была загружена до первых строк main.cpp (в #include). Так что сейчас я использую открытие и закрытие базы данных каждый раз, когда я ее использую. Можно ли как-то объявить глобальную базу данных (держать ее открытой все время)? Я использую это довольно интенсивно.

0

Решение

Да, вы можете открыть свою базу данных один раз а затем просто использовать статические публичные методы QSqlDatabase учебный класс:

QSqlDatabase my_db = QSqlDatabase::addDatabase("QSQLITE");
my_db.setDatabaseName("my_db_name.sqlite");

if(my_db.open())
{
my_db.exec("create table person (id int primary key, ""firstname varchar(20), lastname varchar(20))");
}
else
{
qDebug() << my_db.lastError().text();
}

А потом в другом месте:

QSqlDatabase db = QSqlDatabase::database();

if(db.isOpen())
{
qDebug() << "Wow";
db.exec("insert into person values(101, 'Danny', 'Young')");
}

Увидеть QSqlDatabase::addDatabase(), и использовать параметр connectionName если необходимо.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]