На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: Majestio
  
> Программа не видит драйвер MySQL
    Здравствуйте!
    Программа не видит qsqlmysqld.dll.
    Подскажите, пожалуйста, что делать?

    Ложил и в system32, и рядом с exe, но всеровно не видит.

    ExpandedWrap disabled
      int main(int argc, char* argv[])
      {
          qDebug() << "main: start";
          QGuiApplication app(argc, argv);
       
          qDebug() << "Доступные драйверы:" << QSqlDatabase::drivers();
          qDebug() << "main: QGuiApplication created";
            
          //...
      }


    Вывод:

    Цитата
    ...
    "QtQuickSchool.exe" (Win32). Загружено "C:\Windows\System32\ntmarta.dll". Загрузка символов отключена параметром включения и исключения.
    "QtQuickSchool.exe" (Win32). Загружено "C:\Windows\System32\Windows.UI.Immersive.dll". Загрузка символов отключена параметром включения и исключения.
    Доступные драйверы: QList("QIBASE", "QSQLITE", "QMIMER", "QOCI", "QODBC", "QPSQL")
    main: QGuiApplication created
    "QtQuickSchool.exe" (Win32). Выгружено "C:\Windows\System32\twinapi.appcore.dll"
    "QtQuickSchool.exe" (Win32). Выгружено "C:\Windows\System32\WindowManagementAPI.dll"
    ...
    Сообщение отредактировано: DDim1000 -
      Вероятно драйвер должен быть там, где лежат плагины к Qt

      Прикреплённая картинка
      Прикреплённая картинка


      Добавлено
      как-то
      ExpandedWrap disabled
        C:\Qt<твоя версия>\msvc<версия>\...\plugins\sqldrivers\
        Папку bin нужно добавлять в "переменны среды window": D:\Programming\Qt\6.10.2\msvc2022_64\bin

        Добавлено
        Цитата YuriyRusinov @
        Вероятно драйвер должен быть там, где лежат плагины к Qt

        В папке с установленном Qt вообще нет файла qsqlmysqld.dll.
        Прикреплённая картинка
        Прикреплённая картинка
        Сообщение отредактировано: DDim1000 -
          В Винде нет стандарта, где лежат библиотеки, поэтому тут скорее всего драйвер mysql не был установлен, поэтому надо запустить установщик Qt и отследить установку, так как библиотека qsqlmysqld.dll принадлежит Qt, в частности его модулю поддержки SQL.
            Цитата YuriyRusinov @
            В Винде нет стандарта, где лежат библиотеки, поэтому тут скорее всего драйвер mysql не был установлен, поэтому надо запустить установщик Qt и отследить установку, так как библиотека qsqlmysqld.dll принадлежит Qt, в частности его модулю поддержки SQL.

            Что значит "отследить установку"?
            Прикреплённая картинка
            Прикреплённая картинка
              раскрой подраздел Qt, там надо посмотреть разделы с модулем QtSQL
                Цитата YuriyRusinov @
                раскрой подраздел Qt, там надо посмотреть разделы с модулем QtSQL

                Вообще нет раздела с модулем QtSQL. И упоминания SQL вообще ни в одно разделе нету.
                  Похоже 1 из обязательных разделов не выделен, так как кнопка "Далее" недоступна.
                    Цитата YuriyRusinov @
                    Похоже 1 из обязательных разделов не выделен, так как кнопка "Далее" недоступна.

                    Потому что qt 6.10.2 уже установлен.
                      OK, документация к Qt говорит, что для подключения MySQL к Qt надо запустить установщик из командной строки
                      ExpandedWrap disabled
                        C:\Qt\6.0.0\Src\configure.bat -sql-mysql -- -DMySQL_ROOT="C:\mysql-8.0.22-winx64"
                        Цитата YuriyRusinov @
                        OK, документация к Qt говорит, что для подключения MySQL к Qt надо запустить установщик из командной строки
                        ExpandedWrap disabled
                          C:\Qt\6.0.0\Src\configure.bat -sql-mysql -- -DMySQL_ROOT="C:\mysql-8.0.22-winx64"

                        ExpandedWrap disabled
                          Microsoft Windows [Version 10.0.19045.6456]
                          (c) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.
                           
                          C:\Windows\system32>d:
                           
                          D:\>cd D:\Programming\Qt\6.10.2\Src
                           
                          D:\Programming\Qt\6.10.2\Src>configure.bat -sql-mysql -- -DMySQL_ROOT="C:\mysql-8.0.22-winx64"
                          "cmake" не является внутренней или внешней
                          командой, исполняемой программой или пакетным файлом.
                          "cmake" не является внутренней или внешней
                          командой, исполняемой программой или пакетным файлом.
                          Не удается найти D:\Programming\Qt\6.10.2\Src\config.tl.opt
                           
                          D:\Programming\Qt\6.10.2\Src>
                          Амигос, приветствую!

                          Развидьте всё, что вы тут написали :lol:

                          Почему не видит драйвера MySQL?

                          Потому, что начиная с примерно с Qt 6.0-6.1 этот драйвер, как и некоторые другие, исключили из официальной поставки. Причина - проблемы с лицензированием.
                          На странице официальной документации это описано так:

                          Цитата
                          Due to the practicalities of dealing with external dependencies, only the SQLite plugin is shipped with binary builds of Qt. Binary builds of Qt for Windows also include the ODBC and PostgreSQL plugin. To be able to add additional drivers to the Qt installation without re-building all of Qt, it is possible to configure and build the qtbase/src/plugins/sqldrivers directory outside of a full Qt build directory. Note that it is not possible to configure each driver separately, only all of them at once. Drivers can be built separately, though.

                          Что делать?

                          Собирать самостоятельно. Опять же, в документации об этом написано в подразделе "How to Build the QMYSQL Plugin on Windows".

                          Если по шагам, то:

                          1) Установить MySQL web installer или MariaDB C Connector (думаю это лучше)
                          2) Проверить наличие установленных и доступных в PATH утилит cmake и ninja (этого нет в документации, но подразумевается)
                          3) И только после этого приступить к установке

                          Установка в документации описана как последовательность команд:

                          ExpandedWrap disabled
                            mkdir build-sqldrivers
                            cd build-sqldrivers
                            qt-cmake -G Ninja <qt_installation_path>\Src\qtbase\src\plugins\sqldrivers -DCMAKE_INSTALL_PREFIX=<qt_installation_path>\<platform> -DMySQL_ROOT="C:\mysql-8.0.22-winx64"
                            cmake --build .
                            cmake --install .

                          Тут подразумевается, что была произведена ранее установка полной версии MySQL 8.0.2. Но если ранее ставили "MariaDB C Connector", то в -DMySQL_ROOT, естественно, будет другой путь.
                          The END :lol:
                            Цитата Majestio @
                            ..
                            ExpandedWrap disabled
                              mkdir build-sqldrivers
                              cd build-sqldrivers
                              qt-cmake -G Ninja <qt_installation_path>\Src\qtbase\src\plugins\sqldrivers -DCMAKE_INSTALL_PREFIX=<qt_installation_path>\<platform> -DMySQL_ROOT="C:\mysql-8.0.22-winx64"
                              cmake --build .
                              cmake --install .

                            ...

                            А папка "build-sqldrivers", - это временная папка будет?
                            Сообщение отредактировано: DDim1000 -
                              да.
                                Цитата YuriyRusinov @
                                В Винде нет стандарта, где лежат библиотеки

                                Это так, на всякий случай - читать тут.
                                  mysql-8.0.22-winx64 - это MySQL Community Server?
                                  А если он уже установлен?
                                    Тогда нужно к нему подкручивать Qt, с указанным выше путем.
                                      Теперь требуеться файл libmysql.dll. С интернета можно скачать?
                                        вполне, если подходит под версию.
                                          Цитата DDim1000 @
                                          Теперь требуеться файл libmysql.dll. С интернета можно скачать?

                                          Да нет же, это должно быть в "глубинах" установленного MySQL сервера. Посмотри там в bin-папке, там должно быть. И папка эта должна быть доступна в PATH.
                                            Теперь требуеться qsqlmariadbd.dll. Откуда ее взять?
                                              Цитата DDim1000 @
                                              Теперь требуеться qsqlmariadbd.dll. Откуда ее взять?

                                              А вот это , похоже уже, на плагин QT драйвера БД. На прошлых шагах ты, вроде, компилячил дрова для MySQL, а не для MariaDB (как я советовал). Поэтому проблема, и непонятная. Поиск её, думаю, лучче начать с того, что:

                                              1) Попробовать, как я советовал, скачать "MariaDB C Connector" и на его основе перекомпилячить драйвер
                                              2) Или искать инструментарий поиска зависимостей DLL, но это самый сложный путь - там даже если найдешь зависимость, то не понятно как её решить

                                              Свой MySQL сервер оставляй. Качай коннектор к марии-db. И на основе его собирай новый драйвер. А там посмотрим.
                                                1) Установил "MariaDB C Connector";
                                                2) Из папки bin скопировал файл libmariadb.dll;
                                                3) Сделал копию файла libmariadb.dll и переиминовал ее в libmysql.dll.

                                                Тепер в Output пишится:

                                                Цитата
                                                qt.sql.qsqldatabase: QSqlDatabase: can not load requested driver 'QMYSQL', available drivers: QIBASE QSQLITE QMIMER QMARIADB QMYSQL QOCI QODBC QPSQL
                                                MySQL open failed: "Driver not loaded Driver not loaded"


                                                Что ни так?
                                                  Все,драйвер настроен!
                                                  Теперь другой вопрос. Как обойти требования поддержки протокола SSL?

                                                  MySQL open failed: "TLS/SSL error: SSL is required, but the server does not support it QMYSQL: Unable to connect"
                                                    Попробуй что-то типа:

                                                    ExpandedWrap disabled
                                                          QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
                                                       
                                                          db.setHostName("your-mysql.example.com");
                                                          db.setPort(3306);
                                                          db.setDatabaseName("your_database");
                                                          db.setUserName("your_user");
                                                          db.setPassword("your_password");
                                                       
                                                          QString options =
                                                              "MYSQL_OPT_SSL_MODE=REQUIRED;"          // или VERIFY_CA / VERIFY_IDENTITY
                                                              "SSL_CA=/path/to/ca-cert.pem;";         // обязательно указать, если сервер требует проверки
                                                       
                                                          // Может потребоваться иногда
                                                          // options += "SSL_CERT=/path/to/client-cert.pem;"
                                                          //                  "SSL_KEY=/path/to/client-key.pem;";
                                                       
                                                          db.setConnectOptions(options);
                                                       
                                                          if (!db.open()) {
                                                            qDebug() << "Ошибка подключения:" << db.lastError().text();
                                                            qDebug() << "Детали драйвера:"    << db.lastError().driverText();
                                                            qDebug() << "Детали БД:"          << db.lastError().databaseText();
                                                          } else {
                                                            qDebug() << "Успешно подключились с SSL!";
                                                          }
                                                      Вот так заработало.
                                                      ExpandedWrap disabled
                                                        db.setConnectOptions("MYSQL_OPT_SSL_VERIFY_SERVER_CERT=FALSE");
                                                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                                      0 пользователей:


                                                      Рейтинг@Mail.ru
                                                      [ Script execution time: 0,0667 ]   [ 20 queries used ]   [ Generated: 17.03.26, 22:17 GMT ]