Russian Qt Forum

Qt => Базы данных => Тема начата: urivskay от Февраль 07, 2017, 16:25



Название: Qt 5.8 и MySQL драйвер
Отправлено: urivskay от Февраль 07, 2017, 16:25
Добрый день. Прежде чем, обратиться к вам за помощью, я перечитала кучу статей, о том как собрать драйвер Mysql для Qt под Windows. Много раз пробовала, но никак не получается у меня собрать этот драйвер. Подскажите, пожалуйста, в чём может быть проблема ? Ниже описаны действия, которые я проделала:
1) скачала qt-opensource-windows-x86-mingw530-5.8.0.exe. При установке добавила галочку, установить исходники.
2) скачала mysql-5.5.23-win32.msi с сайта http://www.mysql.ru/download/ и установила. Установка была в папку C:\Program Files (x86)\MySQL\MySQL Server 5.5. После установки я скопировала папку MySQL и положила в корень диска C, заменив пробелы в имени папки нижним подчеркиванием.
3) в переменную среды Path добавила:
    C:\MySQL\MySQL_Server_5_5;
    C:\Qt\Qt5.8.0\5.8\mingw53_32\bin;
    C:\Qt\Qt5.8.0\5.8\mingw53_32\lib;
    C:\MySQL\MySQL_Server_5_5\lib;
    C:\Qt\Qt5.8.0\Tools\mingw530_32\bin
4) Запустила Qt 5.8 for Desktop (MinGW 5.3.0 32 bit).exe и выполнила в нём следующие команды:
    set mysql=C:\MySQL\MySQL_Server_5_5
    cd C:\Qt\Qt5.8.0\5.8\Src\qtbase\src\plugins\sqldrivers\mysql
    qmake "INCLUDEPATH+=%mysql%\\include" "LIBS+=-L%mysql%\\lib\\ -lmysql" -o Makefile mysql.pro
    mingw32-make

Пошла сборка, но завершается не успешно. В выводе я не вижу ошибок, но сборка заканчивается странной строчкой: Leaving directory 'C:/Qt/Qt5.8.0/5.8/Src/qtbase/src/plugins/sqldrivers/mysql'
В папке C:\Qt\Qt5.8.0\5.8\Src\qtbase\src\plugins\sqldrivers\mysql не появилось .dll файлов.
Повторный вызов команды mingw32-make выводит странные ошибки. Я прилагаю скриншот с ошибками.
Пожалуйста, помогите, разобраться в чём причина не успешной сборки и что мне делать ?


Название: Re: Qt 5.8 и MySQL драйвер
Отправлено: ViTech от Февраль 07, 2017, 16:49
А где-нибудь в "C:\Qt\Qt5.8.0\5.8\mingw53_32\bin" нужной dll не появилось? Или в "C:\Qt\Qt5.8.0\5.8\mingw53_32\plugins\sqldrivers\"? В Qt 5.8 пути могут быть другие, пишу по аналогии Qt 5.6.


Название: Re: Qt 5.8 и MySQL драйвер
Отправлено: urivskay от Февраль 07, 2017, 16:52
Появилось! Я нашла "105-й" мануал по тому как собрать драйвер MySQL. Сделала всё как в нём описано и нашла собранные файлы!
Ссылка на мануал, который мне помог https://wiki.belykh.me/wiki/index.php/Сборка_драйвера_MySQL_для_Qt
Уже проверила в проекте, соединение с БД успешно устанавливается, и никаких ошибок больше не сыпется. Всем спасибо за внимание!


Название: Re: Qt 5.8 и MySQL драйвер
Отправлено: urivskay от Февраль 07, 2017, 17:17
Возник ещё вопрос. Как мне через Qt приложение соединиться с удаленным сервером mysql ? Через phpMyAdmin на хостинге, я успешно захожу в свою базу. Но вот через приложение не удается соединиться... Я так понимаю дело наверное в ssl соединение, которое должно использоваться при подключении к базе. Кто сталкивался, подскажите,пожалуйста, как вы этого добились ?
Приведу мой простенький код:
Код:
#include "mainwindow.h"
#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("mysql87.1gb.ru");
    db.setDatabaseName("имя базы");
    db.setUserName("пользователь");
    db.setPassword("пароль");
    db.setConnectOptions();
    if (db.open())
       qDebug() << "OKKKKK!";
    else qDebug() << "Failed to connect to root mysql admin";

    return a.exec();
}


Название: Re: Qt 5.8 и MySQL драйвер
Отправлено: PimenS от Февраль 07, 2017, 19:31
Причин отказа может быть несколько.

1. На сервере запрещены внешние соединения с базой.
2. Для внешнего соединения определен не стандартный порт соединения.

Цитировать
db.setHostName("mysql87.1gb.ru");
    db.setDatabaseName("имя базы");
    db.setUserName("пользователь");
    db.setPassword("пароль");

Какой вы порт используете?

это с чего бы я начал проверять.


Название: Re: Qt 5.8 и MySQL драйвер
Отправлено: ssoft от Февраль 07, 2017, 19:39
Неплохо бы еще воспользоваться методом lastError(), и соответствующими методами QSqlError

Код
C++ (Qt)
QString databaseText () const;
QString driverText () const;
QString text () const;
 

и др.


Название: Re: Qt 5.8 и MySQL драйвер
Отправлено: vebmaster от Февраль 09, 2017, 13:44
вместо сборки соей libmysql.dll лучше возьмите уже готовую, я брал из дистрибутива OpenServer: OpenServer\modules\database\MySQL-5.7\lib\


Код:
if ( ! db.open() ) {
        qDebug() << db.lastError();
        qDebug() << "! Mysql Error" << "Cannot open database:" << db.lastError().text();
        return false;
}


Название: Re: Qt 5.8 и MySQL драйвер
Отправлено: urivskay от Февраль 09, 2017, 13:59
Спасибо все за ответы! Всё дело оказалось в том, что на рабочем компьютере у меня были закрыты порты. И поэтому я не могла соединиться с внешней базой. Сейчас всё в порядке)
P.S. Про OpenServer впервые слышу. Посмотрю. Спасибо)