Russian Qt Forum
Ноябрь 14, 2024, 10:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Ошибка QMYSQL driver not loaded  (Прочитано 45059 раз)
shame
Гость
« Ответ #15 : Май 23, 2014, 22:03 »

Можно
Записан
8Observer8
Гость
« Ответ #16 : Май 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 (и для всех БД из списка) ничего дополнительно собирать и устанавливать не надо?
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #17 : Май 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 решает эту проблему.

Записан

8Observer8
Гость
« Ответ #18 : Май 30, 2014, 09:36 »

Спасибо! Ещё есть несколько вопросов. Правильно ли я думаю, что для использования MySQL мне надо скачать исходники клиента, собрать libmysql.a и в файле .pro написать: LIBS += "path/to/libmysql.a"?

Почему я могу использовать базу данных SQLite без проблем? Получается, что клиент поставляется в комплекте? Это единственный клиент, который поставляется вместе с Qt?
Записан
carrygun
Гость
« Ответ #19 : Май 30, 2014, 10:26 »

Потому что драйвер SQLite есть в Qt из коробки. Если ты соберешь драйвер для MySQL то надо будет положить драйвер в папку с плагинами, а цепляться он будет из pro файла QT += sql, а в программе уже QSqlDatabase::addDatabase("QMYSQL");
Записан
8Observer8
Гость
« Ответ #20 : Май 30, 2014, 10:40 »

Теперь понял! Спасибо! Улыбающийся
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #21 : Май 31, 2014, 07:58 »

Если QT не собран из исходников, а просто установлен ..... Можно ли в таком случае уже потом собирать драйвер для MYSQL ... ?

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

SuleymanStalskiy
Гость
« Ответ #22 : Июнь 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) "ищет" драйвер?

    
« Последнее редактирование: Июнь 11, 2014, 13:50 от SuleymanStalskiy » Записан
Serr500
Гость
« Ответ #23 : Июнь 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.
Записан
SuleymanStalskiy
Гость
« Ответ #24 : Июнь 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

не помогло
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #25 : Июнь 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, он умеет все.
есть еще dependencywalker, который проверяет зависимости от других библиотек.  Проверьте им ваш драйвер qsqlmysql.dll
Записан

Bepec
Гость
« Ответ #26 : Июнь 12, 2014, 12:02 »

Тема то хоть и обсосана и ссылок дофига, но много непонятного с последними версиями MySql. К примеру папочки opt у меня нет в MySql, как и дебажных lib Улыбающийся

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

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.
« Последнее редактирование: Июнь 12, 2014, 13:33 от Bepec » Записан
Bepec
Гость
« Ответ #27 : Июнь 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 ну вдруг кому полезно будет.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.142 секунд. Запросов: 23.