Russian Qt Forum

Qt => Базы данных => Тема начата: codenameRazuka от Октябрь 25, 2015, 14:48



Название: qt driver not loaded
Отправлено: codenameRazuka от Октябрь 25, 2015, 14:48
Здравствуйте. Понимаю, что данная проблема обсуждалась несколько раз, но всё же, не могли бы вы дать пошаговые инструкции как начать работу с базами данных в QT? Интересует взаимодействие с СУБД MySQL.

ОС Windows (7 x64 bit), Qt версии 5.5 (устанавливал через инсталлятор). Использую IDE Qt Creator.

Мои действия:
1. Создаю консольное приложение
2. В .pro файл дописываю QT += sql
3. В main.cpp пишу:

Код:
#include <QCoreApplication>
#include <QApplication>
#include <QtSql>
#include <QtWidgets>
#include <QtGui>
#include <QSqlDatabase>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
       db.setHostName("localhost");
       db.setDatabaseName("mydb");
       db.setUserName("root");
       db.setPassword("123asd");
       bool ok = db.open();

    return a.exec();
}

При запуске, в консольном окне, получаю:

QMySQL driver not loaded
available drivers: QSQLITE QMYSQL QMYSQL QMUSQL3 QOBDC QPSQL QPSQL7

Примеры из /Examples/sql также не работают. Сама MySQL установлена. Файл libmysql.dll (а так же libmysql.lib) в папку с exe файлом программы кидал -- не помогает.

Пробовал собирать драйвер по инструкциям в документации (вот как тут: http://doc.qt.io/qt-4.8/sql-driver.html), но и так не получается: выводит, что не может найти файл mysql.pro -- я как понял, это потому, что я собирал Qt не из исходных файлов.

Так всё же, какие есть способы заставить Qt работать c MySQL и как обойти ту самую "driver not loaded"?

И ещё вопрос (глупый, возможно) -- есть ли возможность заставить Qt работать с уже созданной БД, например, через скрипт MySQL? Какие (условно говоря) инструменты и механизмы для этого следует использовать?


Название: Re: qt driver not loaded
Отправлено: Bepec от Октябрь 25, 2015, 17:10
1) собрать драйвер с исходников.
2) скопировать в папку plugins (ну или по идее он сам скопирует)
3) пользоваться.


Название: Re: qt driver not loaded
Отправлено: Old от Октябрь 25, 2015, 17:57
1) собрать драйвер с исходников.
2) скопировать в папку plugins (ну или по идее он сам скопирует)
3) пользоваться.
А разве драйвер не собран? Вон он в выводе фигурирует.

codenameRazuka вам нужны клиентские библиотеки MySQL. Загрузите их с сайта mysql. Обратите внимание на битность библиотек (32/64 бита) и выберите те, которые соответствуют битности вашей венды.


Название: Re: qt driver not loaded
Отправлено: codenameRazuka от Октябрь 25, 2015, 18:33
Что-то не пойму, что значит "клиентская библиотека"? Имеется в виду Connector C++(Connector C и др)?


Название: Re: qt driver not loaded
Отправлено: Old от Октябрь 25, 2015, 19:34
Что-то не пойму, что значит "клиентская библиотека"? Имеется в виду Connector C++(Connector C и др)?
Попробуйте поставеть это http://dev.mysql.com/downloads/installer/, думаю там все будет. И dll-библиотеки mysql должны быть доступны по стандартным путям.


Название: Re: qt driver not loaded
Отправлено: Bepec от Октябрь 25, 2015, 20:20
Ошибся, не углядел версию куте.


Название: Re: qt driver not loaded
Отправлено: codenameRazuka от Октябрь 25, 2015, 20:50
Переустановил Qt, пытаюсь собрать драйвер. Но теперь другая проблема:

(http://oi58.tinypic.com/aemtq8.jpg)

В чём может быть проблема? Сначала ругался на отсутствие mysql.h, ну я и перетащил папку MySQL Server 5.7 в корень и изменил имя на более короткое MySQL.


Название: Re: qt driver not loaded
Отправлено: Old от Октябрь 25, 2015, 20:57
Не надо ничего пересобирать. Драйверу qmysql требуются dll-библиотеки самого mysql. Как только он сможет их загрузить, он будет работать.


Название: Re: qt driver not loaded
Отправлено: codenameRazuka от Октябрь 25, 2015, 21:01
В таком случае, что мне следует сделать для того, чтобы он смог эти файлы загрузить? Может, нужно что-то в файле .pro проекта указать (нигде об этом не написано)?


Название: Re: qt driver not loaded
Отправлено: Old от Октябрь 25, 2015, 21:10
Найдите библиотеку libmysql.dll и положите в любую директорию прописанную в %PATH% или рядом с экзешником.


Название: Re: qt driver not loaded
Отправлено: codenameRazuka от Октябрь 25, 2015, 21:14
Да я вроде так и так делал, эффекта нету. Есть ещё идеи?


Название: Re: qt driver not loaded
Отправлено: Old от Октябрь 25, 2015, 21:21
Да я вроде так и так делал, эффекта нету. Есть ещё идеи?
Битность библиотек mysql равна битности венды?
Есть для венды свободная программа показывающая, зависимые библиотеки для указанного бинарник, название не помню, но на форуме она периодически упоминается. Посмотрите ей, чего не хватает драйверу qmysql.dll.


Название: Re: qt driver not loaded
Отправлено: Old от Октябрь 25, 2015, 21:24
Вот. http://www.dependencywalker.com/


Название: Re: qt driver not loaded
Отправлено: codenameRazuka от Октябрь 25, 2015, 21:30
Хм, а где мне следует искать этот самый qmysql.dll? Что-то в поиске проводник не находит...


Название: Re: qt driver not loaded
Отправлено: Old от Октябрь 25, 2015, 21:31
Хм, а где мне следует искать этот самый qmysql.dll? Что-то в поиске проводник не находит...
А куда вы mysql устанавливали?


Название: Re: qt driver not loaded
Отправлено: codenameRazuka от Октябрь 25, 2015, 21:38
Хм, а где мне следует искать этот самый qmysql.dll? Что-то в поиске проводник не находит...
А куда вы mysql устанавливали?
В Program Files и устанавливал.


Название: Re: qt driver not loaded
Отправлено: Old от Октябрь 25, 2015, 21:40
Вот там и ищите. :)
Она где-то в .../mysql/lib/opt должна быть.


Название: Re: qt driver not loaded
Отправлено: codenameRazuka от Октябрь 25, 2015, 21:43
Вот там и ищите. :)
Она где-то в .../mysql/lib/opt должна быть.
Нет, ничего там такого нету.


Название: Re: qt driver not loaded
Отправлено: Old от Октябрь 25, 2015, 21:45
Поищите в интернете где скачать mysql.dll нужной вам битности. Вроде, нужна только она.


Название: Re: qt driver not loaded
Отправлено: codenameRazuka от Октябрь 25, 2015, 21:52
Ещё такой вопрос. У меня 64 битная ОС, однако я использую компилятор mingw, который (вроде бы) 32-х битный, в этом может быть проблема?
И ещё раз, чтобы всё корректно работало, необходимо, чтобы и ОС, и MySQL с библиотеками, и сборка Qt (с компилятором в т.ч.) были одинаковой битности?


Название: Re: qt driver not loaded
Отправлено: gil9red от Октябрь 25, 2015, 22:04
Ещё такой вопрос. У меня 64 битная ОС, однако я использую компилятор mingw, который (вроде бы) 32-х битный, в этом может быть проблема?
И ещё раз, чтобы всё корректно работало, необходимо, чтобы и ОС, и MySQL с библиотеками, и сборка Qt (с компилятором в т.ч.) были одинаковой битности?

Если ос 64, то можно и 32 битные использовать программы/библиотеки
Но MySQL, Qt, компилятор должны иметь одинаковую битность


Название: Re: qt driver not loaded
Отправлено: codenameRazuka от Октябрь 26, 2015, 00:30
ППЦ. Поставил на ноутбук сборку (Qt 5.5) для MS Visual Studio 2013 x64 (там стоит компилятор MS Visual Studio 15, как и на стационарном компьютере, но чуть более ранний), скопировал ту самую библиотеку из папки с MySQL (там версия 5.6) в папку с exe файлом, и всё идеально просто работает, ничё самому собирать не надо. В общем, попробую завтра установить заново MySQL 32-х битный и Qt с mingw -- надеюсь, всё получится.


Название: Re: qt driver not loaded
Отправлено: codenameRazuka от Октябрь 26, 2015, 14:30
В общем, поставил сборку с компилятором mingw и скачал MySQL Server 5.6 32-х битный (т.е. ОС 64 бит, компилятор и библиотеки 32 бита, по поводу разрядности самого Qt не уверен), и тот минимальный пример, что был представлен в заглавном сообщении темы, работает.  Надеюсь, это означает, что проблема решена.  :)