Программа не видит драйвер MySQL
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.175] |
|
|
Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
Программа не видит драйвер MySQL
|
|
|
|
|
Здравствуйте!
Программа не видит qsqlmysqld.dll. Подскажите, пожалуйста, что делать? Ложил и в system32, и рядом с exe, но всеровно не видит. ![]() ![]() 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" ... |
|
Сообщ.
#2
,
|
|
|
|
|
Сообщ.
#3
,
|
|
|
|
|
Сообщ.
#4
,
|
|
|
|
В Винде нет стандарта, где лежат библиотеки, поэтому тут скорее всего драйвер mysql не был установлен, поэтому надо запустить установщик Qt и отследить установку, так как библиотека qsqlmysqld.dll принадлежит Qt, в частности его модулю поддержки SQL.
|
|
Сообщ.
#5
,
|
|
|
|
Цитата YuriyRusinov @ В Винде нет стандарта, где лежат библиотеки, поэтому тут скорее всего драйвер mysql не был установлен, поэтому надо запустить установщик Qt и отследить установку, так как библиотека qsqlmysqld.dll принадлежит Qt, в частности его модулю поддержки SQL. Что значит "отследить установку"? Прикреплённая картинка
|
|
Сообщ.
#6
,
|
|
|
|
раскрой подраздел Qt, там надо посмотреть разделы с модулем QtSQL
|
|
Сообщ.
#7
,
|
|
|
|
Цитата YuriyRusinov @ раскрой подраздел Qt, там надо посмотреть разделы с модулем QtSQL Вообще нет раздела с модулем QtSQL. И упоминания SQL вообще ни в одно разделе нету. |
|
Сообщ.
#8
,
|
|
|
|
Похоже 1 из обязательных разделов не выделен, так как кнопка "Далее" недоступна.
|
|
Сообщ.
#9
,
|
|
|
|
Цитата YuriyRusinov @ Похоже 1 из обязательных разделов не выделен, так как кнопка "Далее" недоступна. Потому что qt 6.10.2 уже установлен. |
|
Сообщ.
#10
,
|
|
|
|
OK, документация к Qt говорит, что для подключения MySQL к Qt надо запустить установщик из командной строки
![]() ![]() C:\Qt\6.0.0\Src\configure.bat -sql-mysql -- -DMySQL_ROOT="C:\mysql-8.0.22-winx64" |
|
Сообщ.
#11
,
|
|
|
|
Цитата YuriyRusinov @ OK, документация к Qt говорит, что для подключения MySQL к Qt надо запустить установщик из командной строки ![]() ![]() C:\Qt\6.0.0\Src\configure.bat -sql-mysql -- -DMySQL_ROOT="C:\mysql-8.0.22-winx64" ![]() ![]() 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> |
|
Сообщ.
#12
,
|
|
|
|
Амигос, приветствую!
Развидьте всё, что вы тут написали Почему не видит драйвера 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) И только после этого приступить к установке Установка в документации описана как последовательность команд: ![]() ![]() 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 |
|
Сообщ.
#13
,
|
|
|
|
Цитата Majestio @ .. ![]() ![]() 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", - это временная папка будет? |
|
Сообщ.
#14
,
|
|
|
|
да.
|
|
Сообщ.
#15
,
|
|
|
|
Цитата YuriyRusinov @ В Винде нет стандарта, где лежат библиотеки Это так, на всякий случай - читать тут. |
|
Сообщ.
#16
,
|
|
|
|
mysql-8.0.22-winx64 - это MySQL Community Server?
А если он уже установлен? |
|
Сообщ.
#17
,
|
|
|
|
Тогда нужно к нему подкручивать Qt, с указанным выше путем.
|
|
Сообщ.
#18
,
|
|
|
|
Теперь требуеться файл libmysql.dll. С интернета можно скачать?
|
|
Сообщ.
#19
,
|
|
|
|
вполне, если подходит под версию.
|
|
Сообщ.
#20
,
|
|
|
|
Цитата DDim1000 @ Теперь требуеться файл libmysql.dll. С интернета можно скачать? Да нет же, это должно быть в "глубинах" установленного MySQL сервера. Посмотри там в bin-папке, там должно быть. И папка эта должна быть доступна в PATH. |
|
Сообщ.
#21
,
|
|
|
|
Теперь требуеться qsqlmariadbd.dll. Откуда ее взять?
|
|
Сообщ.
#22
,
|
|
|
|
Цитата DDim1000 @ Теперь требуеться qsqlmariadbd.dll. Откуда ее взять? А вот это , похоже уже, на плагин QT драйвера БД. На прошлых шагах ты, вроде, компилячил дрова для MySQL, а не для MariaDB (как я советовал). Поэтому проблема, и непонятная. Поиск её, думаю, лучче начать с того, что: 1) Попробовать, как я советовал, скачать "MariaDB C Connector" и на его основе перекомпилячить драйвер 2) Или искать инструментарий поиска зависимостей DLL, но это самый сложный путь - там даже если найдешь зависимость, то не понятно как её решить Свой MySQL сервер оставляй. Качай коннектор к марии-db. И на основе его собирай новый драйвер. А там посмотрим. |
|
Сообщ.
#23
,
|
|
|
|
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" Что ни так? |
|
Сообщ.
#24
,
|
|
|
|
Все,драйвер настроен!
Теперь другой вопрос. Как обойти требования поддержки протокола SSL? MySQL open failed: "TLS/SSL error: SSL is required, but the server does not support it QMYSQL: Unable to connect" |
|
Сообщ.
#25
,
|
|
|
|
Попробуй что-то типа:
![]() ![]() 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!"; } |
|
Сообщ.
#26
,
|
|
|
|
Вот так заработало.
![]() ![]() db.setConnectOptions("MYSQL_OPT_SSL_VERIFY_SERVER_CERT=FALSE"); |