Error fridge driver not loaded

Ошибка - Driver not loaded Driver not loaded C++ Qt Решение и ответ на вопрос 339961

Собрал драйвер MySQL. Пытаюсь запустить простое приложение — подключиться к базе и выполнить sql — запрос. Но получаю сообщение , которое указано в заголовке.
Вот текст main.cpp

Код

#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QtSql>
#include <qsqldatabase.h>
#include <QDebug>

int main(int argc, char *argv[])
{
    QSqlQuery query;

    QApplication a(argc, argv);


    MainWindow w;
    a.addLibraryPath( "./" );

    QSqlDatabase db  = QSqlDatabase::addDatabase("QMYSQL");
    qDebug() << QSqlDatabase::drivers();

     db.setHostName("localhost");
     db.setDatabaseName("db1");
     db.setUserName("root");
     db.setPassword("Djkjlz1");

     if (!db.open()) {
             qDebug() << "Error connecting";
             return 1;
             } else {
                qDebug() << "Connected";
             }

     if(!query.isActive())
          qDebug()<< query.lastError().text();

    query.exec("SELECT name FROM region");

Вот .pro

Код

QT       += core gui

TARGET = monitor
TEMPLATE = app


SOURCES += main.cpp
        mainwindow.cpp

HEADERS  += mainwindow.h

QT += sql

FORMS    += mainwindow.ui

В отладчике получаю —

Запускается D:QTmonitor-build-desktopdebugmonitor.exe…
(«QSQLITE», «QMYSQL3», «QMYSQL»)
Connected
«Driver not loaded Driver not loaded»
QSqlQuery::exec: database not open
0

Теряюсь в догадках, может кто подскажет?

Добавлено через 9 часов 41 минуту
Поправил код так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
тировать
#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QtSql>
#include <qsqldatabase.h>
#include <QDebug>
 
 
int main(int argc, char *argv[])
{
    QSqlQuery query;
 
    QApplication a(argc, argv);
 
 
    MainWindow w;
 
    a.addLibraryPath( "./" );
 
    QSqlDatabase db  = QSqlDatabase::addDatabase("QMYSQL");
    qDebug() << QSqlDatabase::drivers();
 
 
     db.setHostName("localhost");
     db.setDatabaseName("db1");
     db.setUserName("root");
     db.setPassword("Djkjlz1");
 
     if (!db.open()) {
         qDebug() << "Error connecting";
         return 1;
     }
     else {
       qDebug() << "Connected";
    }
 
   if(!query.isActive())
          qDebug()<< query.lastError().text();
 
   QSqlQuery query( db );
    if ( !query.exec("SELECT name FROM region") ) {
        qDebug()<< query.lastError().text();
        return 1;
    }
    ...

и все заработало. Ошибка была в том, что query.isActive был до exec’а.
Спасибо!

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

Обновления Windows 10 зачастую вызывали много проблем у многих пользователей и с каждым новым накопительным обновлением их становится всё больше и больше.

Обновления Windows 10 зачастую вызывали много проблем у многих пользователей и с каждым новым накопительным обновлением их становится всё больше и больше. Например, могут возникнуть проблемы с драйверами, которые ранее никак себя не проявляли, а устройства, для которых эти драйверы предназначены, работали вполне себе штатно.

Если на Вашем устройстве с операционной системой Windows 10 возникает ошибка «драйвер не может быть загружен на этом устройстве», Microsoft утверждает, что это означает следующее: настройка целостности памяти в Windows Security предотвращает загрузку драйвера на вашем устройстве.

Корпорация Майкрософт обновила документ поддержки, предупреждая пользователей о том, что «если Вы решите продолжить использование устройства без решения проблемы драйвера, Вы можете обнаружить, что функциональность, которую поддерживает драйвер, больше не работает, что может иметь последствия от незначительных до серьезных».

Как быть в данной ситуации? Как решить проблему с драйверами в Windows 10?

Первое, что Вы должны сделать, это проверить, доступен ли новый или обновленный драйвер через Центр обновления Windows или через производителя этого драйвера. Если Вы не можете найти совместимый драйвер для решения этой проблемы, Вы можете отключить параметр целостности памяти в системе безопасности Windows, чтобы обойти сообщение об ошибке «драйвер не может загрузиться на это устройство».  

1) Перейдите в меню Пуск > Настройки > Обновление и безопасность 

2) Затем выберите Безопасность Windows > Безопасность устройства

3) В разделе «Изоляция ядра» выберите «Сведения об изоляции ядра» 

4) Отключите настройку целостности памяти, если она еще не включена

5) Перезагрузите компьютер для вступления измененных параметров в силу

Несовместимые драйверы оказались своего рода проклятием для Windows 10, но похоже что компания, по крайней мере, наконец-то начала признавать эти проблемы и предлагать обходные пути вместо того, чтобы оставлять пользователей в поисках решений.

рекомендации

-17% на RTX 4070 Ti в Ситилинке

3080 дешевле 70 тр — цены снова пошли вниз

Ищем PHP-программиста для апгрейда конфы

3070 Gainward Phantom дешевле 50 тр

13700K дешевле 40 тр в Регарде

16 видов <b>4070 Ti</b> в Ситилинке — все до 100 тр

3070 Ti дешевле 60 тр в Ситилинке

3070 Gigabyte Gaming за 50 тр с началом

Компьютеры от 10 тр в Ситилинке

3070 дешевле 50 тр в Ситилинке

MSI 3050 за 25 тр в Ситилинке

3060 Gigabyte Gaming за 30 тр с началом

13600K дешевле 30 тр в Регарде

4080 почти за 100тр — дешевле чем по курсу 60

-19% на 13900KF — цены рухнули

12900K за 40тр с началом в Ситилинке

RTX 4090 за 140 тр в Регарде

3060 Ti Gigabyte за 42 тр в Регарде

Ранее уже сообщалось о том, что очередное обновление Windows 10 сломало спящий режим и понизило частоту кадров в играх. То ли ещё будет!

Этот материал написан посетителем сайта, и за него начислено вознаграждение.

В процессе использования Qt для работы с базой данных MySQL после использования Qt для написания кода для подключения к базе данных MySQL во время компиляции и отладки выдается сообщение об ошибке QSqlDatabase: драйвер QMYSQL не загружен, что означает, что приложению Qt не удается подключиться к базе данных MySQL. Ошибка показана на рисунке ниже:

("QSQLITE", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
"Driver not loaded Driver not loaded"

Среда разработки этого проекта (решения):

(1) Операционная система: Windows10

(2) Версия MySQL: 8.0MySql скачать

(3) Версия Qt: 5.14.1Qt5.14.1 скачать

(4) Версия QtCreator: 4.11.0

Проанализировать причину «QSqlDatabase: драйвер QMYSQL не загружен»

Согласно сообщению об ошибке на изображении выше, проверьте официальный документ, ссылка:https://doc.qt.io/qt-5/sql-driver.html#qmysql-for-mysql-4-and-higher,Получите соответствующую информацию следующим образом

(1) Модуль Qt SQL использует подключаемый модуль драйвера для связи с различными API баз данных.

(2) Поддерживаются следующие базы данных:

Driver name DBMS
QDB2 IBM DB2 (version 7.1 and above)
QIBASE Borland InterBase
QMYSQL MySQL (version 5.0 and above)
QOCI Oracle Call Interface Driver
QODBC Open Database Connectivity (ODBC) — Microsoft SQL Server and other ODBC-compliant databases
QPSQL PostgreSQL (versions 7.3 and above)
QSQLITE2 SQLite version 2Note: obsolete since Qt 5.14
QSQLITE SQLite version 3
QTDS Sybase Adaptive ServerNote: obsolete since Qt 4.7

Согласно сообщению об ошибке, доступны следующие драйверы: QSQLITE QODBC QODBC3 QPSQL QPSQL7, а драйвер QMYSQL отсутствует. Итак, причины проблемы с позиционированием:Отсутствие драйвера QMYSQL.

Скомпилировать драйвер MySQL

(1) Скомпилируйте драйвер

Проверьте путь установки Qt на компьютере: E: ProgramData Qt Qt5.14.1 5.14.1 mingw73_64 plugins sqldrivers подключаемый модуль sqldrivers, как показано ниже

[Не удалось передать изображение по внешней ссылке. На исходном сайте может быть механизм защиты от хотлинкинга. Рекомендуется сохранить изображение и загрузить его напрямую (img-j5HUM609-1583739250397) (C: Users AdminCode AppData Roaming Typora typora-user-images image-20200309150658854.png)]

Обнаружено, что нет подключаемого модуля драйвера, связанного с MySQL.

Исходная версия Qt5.13 не включает плагин драйвера для управления MySQL, поэтому вам нужно скомпилировать плагин самостоятельно. Процесс компиляции плагина выглядит следующим образом:

1. Используйте QtCreator, чтобы открыть проект mysql.proE:ProgramDataQtQt5.14.15.14.1Srcqtbasesrcpluginssqldriversmysql

Откройте файл проекта (исходное содержимое) следующим образом.

Модификация элемента управления выглядит следующим образом

Дайте код, скопируйте и замените самостоятельно

TARGET = qsqlmysql

HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp

#QMAKE_USE += mysql

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
# Путь - это путь к файлу заголовка Mysql (включая)
INCLUDEPATH +="E:Program FilesMySQLmysql-8.0.18-winx64include"
 # Это путь к файлу библиотеки MySQl
LIBS +="E:Program FilesMySQLmysql-8.0.18-winx64liblibmysql.lib"
 # Для облегчения поиска вы можете добавить оператор, который используется для указания местоположения скомпилированного результата
DESTDIR = ../mysql/lib/

Скомпилируйте программу после ее добавления (примечание: здесь используется бит MinGw64)

После успешной компиляцииE:ProgramDataQtQt5.14.15.14.1SrcqtbasesrcpluginssqldriversmysqlПод каталогом будет дополнительный каталог lib

2. Скопируйте эти три файла вE:ProgramDataQtQt5.14.15.14.1mingw73_64pluginssqldriversв

(2) Добавить пакет расширения MySql

Добавить пакет расширения для подключения к MySQLlibmysql.dllс участиемlibmysql.lib, Этот пакет находится в нашем каталоге установки MySqlE:Program FilesMySQLmysql-8.0.18-winx64libв;
Добавьте пакет расширения в каталог установки QtE:ProgramDataQtQt5.14.15.14.1mingw73_64binв:

Пока что Qt может подключаться к базе данных MySQL.

This topic has been deleted. Only users with topic management privileges can see it.

  • Hello everyone, this is yet another post on the dreaded error when trying to connect to a database from Qt, but a bit different.

    I am on an up-to-date Debian testing with Qt installed to /opt from the online installer.
    I am trying to write a program that connects to a database but the connection fails with error «Driver not loaded». Now, I’ve seen a lot of similar discussions but I wish to point out that this one is different from the ones that I’ve seen so far. In particular, I used to have the «regular» error due to a linking issue in libqsqlmysql.so but then I followed instruction online, recompiled it an substituted the original file.
    After that, the error message that I get changed and now my code, which reads

    db.addDatabase("QMYSQL");
    db.setDatabaseName("SomeDatabase");
    if (not db.open())
    {
        qDebug() << db.lastError().text();
    }
    

    simply prints

    "Driver not loaded Driver not loaded"
    

    I thought it was a problem with MySQL so I tried to connect to an SQLite database but to my surprise I got the same error message, meaning that there’s something wrong elsewhere.

    Since I’m on Debian, I thought I would try again using Qt from Debian’s repositories, so I installed all the missing development packages, added a Qt toolkit to QtCreator and tried again: same error.

    I know that the database is working because I also have a PyQt5 [again from Debian’s repositories] application that connects to a similar database by just

    db = QSqlDatabase.addDatabase("QMYSQL")
    db.setDatabaseName("SomeDatabase")
    

    and it works.

    What can I try next? Any clue is welcome.

  • I still think the sql plugin has some issues. Take a look what http://doc.qt.io/qt-5/qsqldatabase.html#drivers is telling you and make sure libqsqlmysql.so finds all it’s dependencies (e.g. with ldd)

  • Hi and welcome to devnet,

    To add to @Christian-Ehrlicher, this question has been asked many times already on this forum, please take the time to search through it.

  • Hi Christian, SGaist, thank you for your answers. As I mentioned in my post, I have already searched thoroughly the net for a solution, I have already re-compiled libqsqlmysql.so and calling ldd on it shows that not only does it not miss any dependency, it also links to the same libraries as the homonymous file from Debian’s repositories. In particular, it links to the installed version of libmariadbclient [Debian switched to MariaDB which is a fork of MySQL and a drop-in replacement].

    In any case, I also mentioned in my previous post that the problem is not specific to the MySQL driver, but I get the same error even if I try to use SQLite as a backend.

    What is the next thing that I can try?

  • Then start your application with the QT_DEBUG_PLUGINS environment variable set to 1. That will give you some more information about what is happening.

  • Thanks for the suggestion!
    This is the relevant output

    QFactoryLoader::QFactoryLoader() checking directory path "/opt/Qt/5.10.1/gcc_64/plugins/sqldrivers" ...
    QFactoryLoader::QFactoryLoader() looking at "/opt/Qt/5.10.1/gcc_64/plugins/sqldrivers/libqsqlite.so"
    Found metadata in lib /opt/Qt/5.10.1/gcc_64/plugins/sqldrivers/libqsqlite.so, metadata=
    {
        "IID": "org.qt-project.Qt.QSqlDriverFactoryInterface",
        "MetaData": {
            "Keys": [
                "QSQLITE"
            ]
        },
        "className": "QSQLiteDriverPlugin",
        "debug": false,
        "version": 330241
    }
    
    
    Got keys from plugin meta data ("QSQLITE")
    QFactoryLoader::QFactoryLoader() looking at "/opt/Qt/5.10.1/gcc_64/plugins/sqldrivers/libqsqlmysql.so"
    Found metadata in lib /opt/Qt/5.10.1/gcc_64/plugins/sqldrivers/libqsqlmysql.so, metadata=
    {
        "IID": "org.qt-project.Qt.QSqlDriverFactoryInterface",
        "MetaData": {
            "Keys": [
                "QMYSQL3",
                "QMYSQL"
            ]
        },
        "className": "QMYSQLDriverPlugin",
        "debug": false,
        "version": 330241
    }
    
    
    Got keys from plugin meta data ("QMYSQL3", "QMYSQL")
    
    
    loaded library "/opt/Qt/5.10.1/gcc_64/plugins/sqldrivers/libqsqlmysql.so"
    "Driver not loaded Driver not loaded"
    

    Meanwhile I have run the Qt example sqlbrowser and it does successfully connect to my MySQL local server, it shows me the database and the tables. This makes me suspect that there is an error in the code, but what could it be?

  • Debug VS Release version of the plugin ?

  • Sorry, I don’t understand the question :(
    Are you asking me to compare two different builds of the same plugin?

  • Did you build your plugin for both debug and release ?

  • need dynamic lib for mysql. For linux it’s libmysqlclient.so.16 or libmysqlclient.so.18 for your target platform.

  • @SGaist I built just one, with the default configuration. I will check which one when I get back to my home pc. What difference does it make? Could it work with one but not the other one?

    @Homer2000 I am using a shared library, except my distribution [like many others] now uses MariaDB as a replacement for MySQL, so I link to libmariadb.so or something similar

  • @Homer2000 No, by default the Qt MySQL plugin links against the MySQL client libraries.

    You can build it to use MariaDB though.

  • Ok, I found out what I was doing wrong.
    The code that I was using is

    QSqlDatabase db;
    db.addDatabase("QMYSQL");
    

    and it was giving me the error above, whereas the correct way to do it is

    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QMYSQL");
    

    and with this code it works fine.

    I don’t know why this is the case, I guess today I just learnt something new on Qt, thanks for the help everyboody!

  • @mleoni said in Cannot connect to databases, Driver not loaded error.:

    I don’t know why this is the case,

    Because QSqlDatabase::addDatabase() is a static function — no Qt magic here.

  • I see, so my mistake was letting the returned value go lost. Thanks for clarifying this!

  • Please take the time to read the QSqlDatabase documentation. It shows how to use it properly.

  • Thanks for the reference!

  • SadSido

    Гость


    Добрый день!

    Хочу поделится описанием неочевидной проблемы, с которой я столкнулся при программировании запросов к базе данных на SQLite (от типа базы данных проблема не зависит). В коде создаётся некий модуль, инкапсулирующий работу с БД. Создаётся сама база и несколько наиболее употребляемых запросов SQL:

    class CDatabaseModule
    {
    private:
          QSqlDatabase mDatabase;
          QSqlQuery      mBeginQuery;
          QSqlQuery      mCommitQuery;
    public:
          // Открытый конструктор
          CDatabaseModule( /*параметры соединения*/ )
          {
                mDatabase = QSqlDatabase::addDatabase( /*драйвер*/ );
                mDatabase.setDatabaseName( /*имя БД*/ );
                mDatabase.setUserName( /*логин*/ );
                mDatabase.setPassword( /*пароль*/ );

                // Открываем БД (с проверкой корректности)
                mDatabase.open();

                // Кешируем часто употребляемые запросы
                mBeginQuery.prepare(«BEGIN TRANSACTION;»);
                mCommitQuery.prepare(«COMMIT TRANSACTION;»);
          }
          // Далее методы обработки данных
    }

    Этот код содержит фундаментальную ошибку, поведение которой выражается в том, что все SQL-запросы к этой БД будут провалены. То есть, для любого объекта QSqlQuery к этой БД метод exec() вернёт false. Будет получен объект QSqlError с текстом driverText() = «Driver not loaded» и databaseText() = «Driver not loaded». На отлов этой ошибки может уйти много времени, но всегда приятнее изучать чужие грабли, чем наступать на свои. Итак:

    Объекты mBeginQuery и mCommitQuery создаются на стеке, а не в динамической памяти, и, поскольку в коде конструктора нет никаких указаний по поводу их инициализации, компилятор вызывает для них конструкторы по умолчанию. Класс QSqlQuery имеет конструктор без параметров: QSqlQuery(const QString& iQuery = QString(), QSqlDatabase iDB = 0). Таким образом, объекты mBeginQuery и mCommitQuery инициализируются ссылкой на базу данных до того, как было установлено соединение с базой данных. Преодолевается ошибка следующим образом:

    // …
    private:
          QSqlQuery * mBeginQuery;
          QSqlQuery * mCommitQuery;
    // …
    // в конструкторе. Теперь объекты создаются вовремя!
          mBeginQuery = new QSqlQuery();
          mBeginQuery->prepare(«BEGIN TRANSACTION;»);
          mCommitQuery = new QSqlQuery();
          mCommitQuery->prepare(«COMMIT TRANSACTION;»);
    // …
    // И не забудьте про деструктор!!
          delete mBeginQuery;
          delete mCommitQuery;

    Из всего этого мне осталось непонятным лишь только, почему ВСЕ запросы проваливались? Даже те, что были созданы после инициализации базы данных… Полагаю тут проявляется какой-нибудь побочный эффект работы с глобальными переменными QSqlDatabase…

    В-общем, надеюсь, что это кому-нибудь сэкономит время! Удачного программирования!

    Информация о системе:

    На вашем ПК работает:  

    специальное предложение

    0x2 часто может появляться из-за неправильно настроенных параметров системы или из-за нарушений в реестре Windows. Эту ошибку относительно быстро и легко исправить, если использовать PC Repair, настроенную на решение всех распространенных проблем с реестром.

    • Название ошибки: 0x2
    • Совместимо с: Windows 10, 11, 8, 7, Vista, XP
    • 0x2 появляется и начинает нарушать окно активной программы;
    • 0x2 появляется на экране;
    • Появляется сообщение ‘Обнаружена проблема, и Windows была выключена, чтобы предотвратить повреждение компьютера. Похоже, что проблема вызвана следующим файлом…’;
    • Компьютер пользователя перестает работать, выдавая ошибку 0x2 при запуске программы;
    • Windows работает плохо, медленно реагируя на команды;
    • Компьютер пользователя часто зависает

    0x2 сообщения об ошибке могут появляться из-за засорения реестра Windows и ошибочных записей несуществующих программ, поскольку пользователь обычно неправильно удаляет программное обеспечение. Другими распространенными причинами являются неправильный ввод данных, отсутствие файлов, которые были случайно удалены из реестра, что вызывает проблемы в работе системы.

    1. 1. Скачать PC Repair.
    2. 2. Установить и запустить программу.
    3. 3. Нажмите Scan Now для обнаружения ошибок и различных отклонений от оптимального уровня.
    4. 4. Нажмите Repair All для устранения каждой проблемы.


    Эта страница доступна на других языках:
    English |
    Deutsch |
    Español |
    Italiano |
    Français |
    Indonesia |
    Nederlands |
    Nynorsk |
    Português |
    Українська |
    Türkçe |
    Malay |
    Dansk |
    Polski |
    Română |
    Suomi |
    Svenska |
    Tiếng việt |
    Čeština |
    العربية |
    ไทย |
    日本語 |
    简体中文 |
    한국어

    Понравилась статья? Поделить с друзьями:
  • Error gh001 large files detected you may want to try git large file storage
  • Error gfxglyph does not name a type
  • Error gfx state red dead redemption 2
  • Error gfx state rdr 2
  • Error gfx d3d rdr 2