Как следует из названия, у меня есть эта проблема в течение нескольких дней. Моя программа прекрасно работает в режиме отладки на QtCreator, но как только я выбираю режим выпуска, я получаю проблему с незакрепленным драйвером sql (я только запускал его на Windows 10). Я считаю, что мой .pro файл написан правильно (QT + = sql написано).
Я перепробовал большинство вещей, которые мог:
Как я уже сказал, проблема возникает только при развертывании, поэтому мне интересно, есть ли что-то, что я должен был добавить в свой файл .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). Так что сейчас я использую открытие и закрытие базы данных каждый раз, когда я ее использую. Можно ли как-то объявить глобальную базу данных (держать ее открытой все время)? Я использую это довольно интенсивно.
Да, вы можете открыть свою базу данных один раз а затем просто использовать статические публичные методы 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
если необходимо.
Других решений пока нет …