Russian Qt Forum

Qt => Вопросы новичков => Тема начата: useruser от Ноябрь 27, 2013, 16:29



Название: Ошибка QMYSQL driver not loaded
Отправлено: useruser от Ноябрь 27, 2013, 16:29
Код:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setPort(3306);
        db.setHostName("92.53.98.20");
         db.setDatabaseName("fr4402");
       db.setUserName("fr4402");
        db.setPassword("0123456");
        bool ok = db.open();

Пишет в дебагере
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3
QSqlQuery::exec: database not open

Какой драйвер и куда он хочет?) ОС Windows 7.
До смены хостинга такого не писал. Поменял хостинг (может другая версия mysql??-хотя и тут и там 5я) и написал эту ошибку.

Файлы libmysql.dll и libmysql.lib для этой БД mysql у меня есть.


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: kibsoft от Ноябрь 27, 2013, 17:07
http://qt-project.org/doc/qt-4.8/sql-driver.html#qmysql


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: useruser от Ноябрь 27, 2013, 17:45
В предлагаемой статье ответа на мой вопрос нет.


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: Majestio от Ноябрь 27, 2013, 18:30
Файлы libmysql.dll и libmysql.lib для этой БД mysql у меня есть.

Для использования MySQL - драйвер нужно предварительно собрать. В рамках Qt он именуется плагином. В линке, что давали ранее - есть вся инфа по сборке этого плагина (драйвера).

Судя по твоим логам - этого плагина (драйвера) у тебя нет, читай "не собирал".


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: lesav от Ноябрь 27, 2013, 18:40
Судя по твоим логам - этого плагина (драйвера) у тебя нет, читай "не собирал".

Ну не надо так категорично!
Еще такая ошибка может возникать если программа не находит нужную библиотеку libmysql.dll в %PATH%.


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: Majestio от Ноябрь 27, 2013, 18:45
Судя по твоим логам - этого плагина (драйвера) у тебя нет, читай "не собирал".

Ну не надо так категорично!
Еще такая ошибка может возникать если программа не находит нужную библиотеку libmysql.dll в %PATH%.

Безусловно. Но топикстартер упомянул "Файлы libmysql.dll и libmysql.lib для этой БД mysql у меня есть", а про плагин си сном ни духом. Вывод?


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: useruser от Ноябрь 27, 2013, 21:02
Спорить о том, что драйверы можно собирать или писать самому, я не буду.
Но тут есть 3 но:
1) С другим хостингом работало. Ничего не удалял, переустанавливал. Где драйвер? Самоудалился? Загадка.)
2) База данных и на старом и на новом хостинге MySQL 5. Какая 5 (версия) - не смотрел. А QT работает с этой БД-так  написано в статье.
3) Собирать или писать драйвер под одну из самых распостраненных в мире баз данных, установленную на любом хостинге, входящую в LAMP любого линукса, для систем Windows или Linux -это "не есть правильно". А для Windows систем -абсурд.
Для таких, типовых задач, драйвер должен быть. И в большинстве сред разработки он есть, либо его можно скачать.


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: Majestio от Ноябрь 27, 2013, 21:18
Спорить о том, что драйверы можно собирать или писать самому, я не буду.
Но тут есть 3 но:
1) С другим хостингом работало. Ничего не удалял, переустанавливал. Где драйвер? Самоудалился? Загадка.)
2) База данных и на старом и на новом хостинге MySQL 5. Какая 5 (версия) - не смотрел. А QT работает с этой БД-так  написано в статье.
3) Собирать или писать драйвер под одну из самых распостраненных в мире баз данных, установленную на любом хостинге, входящую в LAMP любого линукса, для систем Windows или Linux -это "не есть правильно". А для Windows систем -абсурд.
Для таких, типовых задач, драйвер должен быть. И в большинстве сред разработки он есть, либо его можно скачать.

А Б И С Ь Н Я Ю  ;D

1) Драйвера MySQL в поставке Qt в собранном виде нет, так решили. Нужно собирать самому.
2) Qt работает уверенно с MySQL.
3) Рассуждение неправильное! Хотите драйвер MySQL - получите. Для этого найдите его исходник в поставке, скомпилируйте, соберите в DLL, положите в нужное вам место ... ну и все.

Давай твой драйвер компилировать и подключать, ланна? :)


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: Alex Custov от Ноябрь 27, 2013, 21:23
1) С другим хостингом работало. Ничего не удалял, переустанавливал. Где драйвер? Самоудалился? Загадка.)

Ты не привёл полную иерархию файлов и каталогов твоей программы, мы не знаем был он у тебя вообще или нет.

2) База данных и на старом и на новом хостинге MySQL 5. Какая 5 (версия) - не смотрел. А QT работает с этой БД-так  написано в статье.

Работает, конечно. Через SQL плагин

3) Собирать или писать драйвер под одну из самых распостраненных в мире баз данных, установленную на любом хостинге, входящую в LAMP любого линукса, для систем Windows или Linux -это "не есть правильно". А для Windows систем -абсурд.

Пользователи Windows должны страдать Не знаю распространяется ли MYSQL плагин вместе с официальной сборкой Qt, вполне вероятно, что нет. Если нет, то не составляет труда его собрать. Писать его не нужно, естественно. Ещё можно взять готовые сборки Qt уже с этим и другими плагинами, и не париться. Например, отсюда (https://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/Qt-Builds). В Linux он собирается мейнтейнерами дистрибутивов и почти всегда присутствует.

Для таких, типовых задач, драйвер должен быть. И в большинстве сред разработки он есть, либо его можно скачать.

Qt - это не среда разработки, не путай с RAD типа Delphi.


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: lesav от Ноябрь 27, 2013, 21:34
Если ничего не делал, и отвалилось по вине хостера то для решения задачи не хватает полной картины.  У меня есть несколько вопросов.

Я так понял пользователь сидит в ОС Windows на локальной машине (не на хосте)
  • наличие драйвера в каталоге plugins/sqldrivers/qsqlmysql4.dll  (qsqlmysql.dll для Qt5)
  • наличие клиентской библиотеки libmysql.dll одноименной с MySQL сервером версией
  • клиентская библиотека должна лежать в одном каталоге с запускаемой программой

Если все на месте, проверить зависимость драйвера от сторонних библиотек. Например Dependency Walker (http://www.dependencywalker.com/)-ом

Для UNIX
  • наличие драйвера в каталоге $QT_INSTALL_PLUGINS/plugins/sqldrivers/qsqlmysql4.so
  • наличие клиентской библиотеки libmysql.so.X одноименной с MySQL сервером версией
  • Клиентская биб-ка (или ее линк) должна быть в $LD_LIBRARY_PATH  или  в  /usr/lib

Если все на месте, проверить зависимость драйвера от сторонних библиотек
команда ldd -v $QT_INSTALL_PLUGINS/plugins/sqldrivers/qsqlmysql4.so
(переменная QT_INSTALL_PLUGINS может быт не установлена, в этом случае перейти в каталог с драйвером и выполнить
ldd -v ./qsqlmysql4.so)


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: Majestio от Ноябрь 27, 2013, 21:38
Все совершенно верно на 100%.
За исключением одного - исходный код драйвера (плугина) уже есть в поставке Qt.
И работает для всех платформ. Одно "но" - он по сути "прослойка". Нужен он и специфические библиотеки MySQL (сам работаю с PostgreSQL, а там именно так).


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: Majestio от Ноябрь 27, 2013, 21:43
Если ничего не делал, и отвалилось по вине хостера то для решения задачи не хватает полной картины.  У меня есть несколько вопросов.

Я так понял пользователь сидит в ОС Windows на локальной машине (не на хосте)
  • наличие драйвера в каталоге plugins/sqldrivers/qsqlmysql4.dll  (qsqlmysql.dll для Qt5)
  • наличие клиентской библиотеки libmysql.dll одноименной с MySQL сервером версией
  • клиентская библиотека должна лежать в одном каталоге с запускаемой программой

Если все на месте, проверить зависимость драйвера от сторонних библиотек. Например Dependency Walker (http://www.dependencywalker.com/)-ом

Для UNIX
  • наличие драйвера в каталоге $QT_INSTALL_PLUGINS/plugins/sqldrivers/qsqlmysql4.so
  • наличие клиентской библиотеки libmysql.so.X одноименной с MySQL сервером версией
  • Клиентская биб-ка (или ее линк) должна быть в $LD_LIBRARY_PATH  или  в  /usr/lib

Если все на месте, проверить зависимость драйвера от сторонних библиотек
команда ldd -v $QT_INSTALL_PLUGINS/plugins/sqldrivers/qsqlmysql4.so
(переменная QT_INSTALL_PLUGINS может быт не установлена, в этом случае перейти в каталог с драйвером и выполнить
ldd -v ./qsqlmysql4.so)

Сорри ... много букваф :)

Сообщение:
Цитировать
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3
говорит о  том, что этот драйвер по какой-то причине не грузится (если он есть). Надо искать причины.


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: lesav от Ноябрь 27, 2013, 21:48
Сорри ... много букваф :)
.......
говорит о  том, что этот драйвер по какой-то причине не грузится (если он есть). Надо искать причины.

Дык а я о чем кашляю!!!   В тех моногоБакавах (http://www.prog.org.ru/index.php?topic=26068.msg186580#msg186580) заложен механизм поиска причин!




Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: Majestio от Ноябрь 27, 2013, 21:54
Дык а я о чем кашляю!!!   В тех моногоБакавах (http://www.prog.org.ru/index.php?topic=26068.msg186580#msg186580) заложен механизм поиска причин!
И самая главная ... а есть ли драйвер вааще? :)


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: SuleymanStalskiy от Май 23, 2014, 10:09
Подскажите пожалуйста.
Если QT не собран из исходников, а просто установлен из "Qt 5.3.0 for Windows 32-bit (MinGW 4.8.2, OpenGL, 734 MB)". Можно ли в таком случае уже потом собирать драйвер для MYSQL (просто скачав исходники Qt с сайта и запустив сборку драйвера) или надо обязательно собрать Qt из исходников?


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: shame от Май 23, 2014, 22:03
Можно


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: 8Observer8 от Май 30, 2014, 07:56
Имею "Qt 5.3.0 for Windows 32-bit (MinGW 4.8.2, OpenGL, 734 MB)"

Смотрите. Я выполняю команду QSqlDatabase::drivers():
Код
C++ (Qt)
#include <QSqlDatabase>
#include <QStringList>
#include <QDebug>
 
int main() {
 
   QStringList list = QSqlDatabase::drivers( );
 
   for( std::size_t i = 0; i < list.size( ); i++ ) {
       qDebug() << list[i];
   }
 
   return 0;
}
 

Выдаётся список:
Цитировать
"QSQLITE"
"QMYSQL"
"QMYSQL3"
"QODBC"
"QODBC3"
"QPSQL"
"QPSQL7"

Говорит ли это о том, что для работы с QMySQL (и для всех БД из списка) ничего дополнительно собирать и устанавливать не надо?


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: lesav от Май 30, 2014, 09:21
Это говорит только о том, что у Qt есть некие драйверы которые Вы можете использовать. Но!
Для работы драйверов нужны клиентские библиотеки (.so|.dllДалее просто клиент
QMYSQL - libmysql 
QPSQL - libpq
QOCI - установленный клиент Oracle  (это не только библиотека oci но и туева хуча  файлов библ и директорий  на ~500Мб )
QIBASE - fbclient
этот список можно продолжить.

Еще несколько важных моментов.
Вам нужен клиент той разрядности, что и Qt.
Другими словами: У вас Qt не x64. И Вам нужно подсоединиться к 64-битной БД. Не нужно использовать x64 клиента. Используйте i386

При работе с MySQL необходимо использовать клиента с версией соответствующей версии БД.
Это огромный минус, т.к. у вас пропадает возможность одновременного подсоединения к разным версиям БД.  Но использование odbc решает эту проблему.



Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: 8Observer8 от Май 30, 2014, 09:36
Спасибо! Ещё есть несколько вопросов. Правильно ли я думаю, что для использования MySQL мне надо скачать исходники клиента, собрать libmysql.a и в файле .pro написать: LIBS += "path/to/libmysql.a"?

Почему я могу использовать базу данных SQLite без проблем? Получается, что клиент поставляется в комплекте? Это единственный клиент, который поставляется вместе с Qt?


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: carrygun от Май 30, 2014, 10:26
Потому что драйвер SQLite есть в Qt из коробки. Если ты соберешь драйвер для MySQL то надо будет положить драйвер в папку с плагинами, а цепляться он будет из pro файла QT += sql, а в программе уже QSqlDatabase::addDatabase("QMYSQL");


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: 8Observer8 от Май 30, 2014, 10:40
Теперь понял! Спасибо! :)


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: lesav от Май 31, 2014, 07:58
Если QT не собран из исходников, а просто установлен ..... Можно ли в таком случае уже потом собирать драйвер для MYSQL ... ?

Ставьте Qt (в Qt 5.*.* при установке поставить галочку на Source)
И собирайте на здоровье!  Проблем быть не должно!   Qt5 в своем составе уже имеет драйвер MYSQL


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: SuleymanStalskiy от Июнь 11, 2014, 11:43
Добрый день, понимаю, что тема обсосана до блеска, но все-таки, не знаю где искать косяк.
1. Скачал qt 5.3 offline 32 bit, установил в C:\Qt
2. Скачал src 5.3. скопировал в       C:\Qt\Qt5.3.0\sourses
3. Установил MySql 6.0 32bit (путь без пробелов)
4. Прописал пути в переменной PATH для
    C:\Qt\Qt5.3.0\5.3\mingw482_32;
    C:\Qt\Qt5.3.0\5.3\mingw482_32\bin;
    C:\Qt\Qt5.3.0\5.3\mingw482_32\lib;
    C:\MySQL_Server_6_0\lib\opt;

5. выполнил
   cd C:\Qt\Qt5.3.0\sourses\qtbase\src\plugins\sqldrivers\mysql
   qmake "INCLUDEPATH+=C:/MySQL_Server_6_0/include" "LIBS+=C:/MySQL_Server_6_0/lib/opt/libmysql.lib" mysql.pro
   mingw32-make.exe
6. в директории
    C:\Qt\Qt5.3.0\sourses\qtbase\plugins\sqldrivers получил 4 файла
    libqsqlmysql.a
    libqsqlmysqld.a
    qsqlmysql.dll
    qsqlmysqld.dll

7. скопировал .dll в C:\Qt\Qt5.3.0\5.3\mingw482_32\plugins\sqldrivers
                     .a   в C:\Qt\Qt5.3.0\5.3\mingw482_32\lib    
                   libmysql.dll из C:/MySQL_Server_6_0/lib/opt/libmysql  в C:\Windows
8. .pro file добавил QT += sql;

9. запуск - ошибка
   QSqlDatabase: MYSQL driver not loaded
   QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
   QSqlError("", "Driver not loaded", "Driver not loaded")


Подскажите, куда копать дальше
И еще. Я так понимаю, что Qt "ищет" dll не там где надо (ведь файлы же скомпилированы и лежат на компьютере). Существуют ли какие-нибудь программы, с помощью которых можно проследить, где моя программа (для соединения с MySQl) "ищет" драйвер?

    


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: Serr500 от Июнь 11, 2014, 11:59
                   libmysql.dll из C:/MySQL_Server_6_0/lib/opt/libmysql  в C:\Windows
В C:\Windows\System32 для 64-битной винды,
в C:\Windows\SysWOW64 для 32-битной,
или в C:\Qt\Qt5.3.0\5.3\mingw482_32\bin.


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: SuleymanStalskiy от Июнь 11, 2014, 12:08
Скопировал  libmysql.dll из C:/MySQL_Server_6_0/lib/opt/libmysql
в C:\Windows\System32 для 64-битной винды,
и в C:\Qt\Qt5.3.0\5.3\mingw482_32\bin

не помогло


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: lesav от Июнь 12, 2014, 09:28
7. .....
                  скопировал libmysql.dll из C:/MySQL_Server_6_0/lib/opt/libmysql  в C:\Windows
Этот пункт лишний. libmysql.dll должен лежать в каталоге с вашей Qt программой, или в %QT%/bin или в %windir%/system32

Существуют ли какие-нибудь программы, с помощью которых можно проследить
есть Procmon (http://technet.microsoft.com/ru-ru/sysinternals/bb896645.aspx), он умеет все.
есть еще dependencywalker (http://www.dependencywalker.com/), который проверяет зависимости от других библиотек.  Проверьте им ваш драйвер qsqlmysql.dll


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: Bepec от Июнь 12, 2014, 12:02
Тема то хоть и обсосана и ссылок дофига, но много непонятного с последними версиями MySql. К примеру папочки opt у меня нет в MySql, как и дебажных lib :)

PS такое чуйство что всё специально запутано :D

update: ну мелкие неприятности - сейчас нет каталога opt, а имеется libmysqld.lib/libmysql.lib. :)

update: такая же проблемка - не грузит драйвер. Библиотека лежит в проекте, плагин видит. Вызывает ошибку "driver not load driver not load" :/

update: гениальная ошибка
Цитировать
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QIBASE QSQLITE QMYSQL3 QMYSQL QODBC3 QODBC

update: Finita.


Название: Re: Ошибка QMYSQL driver not loaded
Отправлено: Bepec от Июнь 12, 2014, 13:42
Второе сообщение чтоб вы предыдущие изыскания не читали.

То, что я пишу верно для Qt 4.7.2.

Что делать:
1) скачать mysql-6.0.6-alpha-win32.zip с http://www.mysql.ru/download/
2) далее по руководству - устанавливаем в папку без пробелов, прописываем пути к include.
3) в проекте прописываем пути к либкам (прямым путём, иначе запутается)
Debug: MySqlServerDir/lib/debug/libmysql.lib
Release: MySqlServerDir/lib/opt/libmysql.lib
4) собираем. У меня собралось с 1 попытки.
5) копируем получившиеся файлы в Qt***/plugins/sqldrivers/
Цитировать
qsqlmysql4.dll
qsqlmysql4.lib
qsqlmysqld4.dll
qsqlmysqld4.lib
6) после копируем из MySqlServerDir/lib/opt/libmysql.dll в папку вашего проекта (или папку, прописанную в path) и наслаждаемся работой.

Гадости:
1) официальные версии mysql с mysql.com не собираются с воплями о undefined reference.
2) после матов и отвёртки они всё таки собираются, но отказываются подключать драйвер. В списке он присутствует, но не может быть подключен.

PS ну вдруг кому полезно будет.