@Dogrtt
Qt/Python разработчик

Как подключиться к MySQL из Qt?

Перечитал и пересмотрел кучу материала по поводу подключения к MySQL из Qt. Версия MySQL - 5.5, Qt - 5.9.1, компилятор mingw53_32, система - Win10x64.
В C:\Qt\Qt5.9.1\5.9.1\mingw53_32\plugins\sqldrivers уже лежат qsqlmysql.dll и qsqlmysqld.dll, следовательно компилить их из исходников, смысла нет, ведь так?
Если да, то почему выскакивает пресловутый:
("C:/Qt/Qt5.9.1/5.9.1/mingw53_32/plugins", "D:/CPP/Qt/build-BlackWoodWhip-Desktop_Qt_5_9_1_MinGW_32bit-Debug/debug")
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
Error

При этом libmysql.dll и libmysql.lib из C:\Program Files\MySQL\MySQL Server 5.5\lib скопировал куда только можно и нельзя (папка проекта, папка с экзешником debug-версии, Windows, папка C:\Qt\Qt5.9.1\5.9.1\mingw53_32\plugins\sqldrivers), файлы qsqlmysql.dll и qsqlmysqld.dll, так же распихал повсюду. Вот мой PATH:
PATH

C:\Program Files\ImageMagick-7.0.6-Q16;D:\Python27\;
D:\Python27\Scripts;C:\ProgramData\Oracle\Java\javapath;
C:\Windows\system32;
C:\Windows;
C:\Windows\System32\Wbem;
C:\Windows\System32\WindowsPowerShell\v1.0\;
C:\PROGRA~2\NVIDIA~1\PhysX\Common;
D:\Programs\Git\cmd;
D:\Python27\Lib\site-packages;
D:\Python27\Lib\site-packages\PyQt5;
D:\Python27\include;
D:\Python27\libs;
D:\Programs\TortoiseSVN\bin;
D:\Go\bin;D:\Programs\nodejs\;
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
C:\Program Files (x86)\Pico Technology\PicoScope6\
;C:\Program Files (x86)\Xoreax\IncrediBuild;
C:\Qt\Qt5.9.1\5.9.1\msvc2015\bin;
C:\PROGRA~2\MICROS~2.0\VC\bin;
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools;
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.15063.0\um\x86;
C:\Qt\Qt5.9.1\5.9.1\mingw53_32\plugins\sqldrivers;
C:\Program Files\MySQL\MySQL Server 5.5\lib;
C:\Program Files\MySQL\MySQL Server 5.5\bin;

Вот PATH из QtCreator Build Environment:
PATH Build Environment

C:\Qt\Qt5.9.1\5.9.1\mingw53_32\bin;
C:\Qt\Qt5.9.1\Tools\mingw530_32\bin;
C:\Qt\Qt5.9.1\5.9.1\mingw53_32\plugins\sqldrivers;
C:\Program Files\MySQL\MySQL Server 5.5\lib;
C:\Program Files\MySQL\MySQL Server 5.5\bin;

Вот .pro файл:
.pro
QT       += core gui sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = BlackWoodWhip
TEMPLATE = app

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
        main.cpp \
        mainwindow.cpp

HEADERS += \
        mainwindow.h

FORMS += \
        mainwindow.ui

RESOURCES += \
    icons/IcoAll.qrc \
    icons/gui.qrc

CONFIG (debug, debug|release) {
    CONFIG       += console
}


Вот main.cpp , mainwindow.h и mainwindow.cpp
main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QStyleFactory>

int main(int argc, char *argv[])
{
    QStringList paths = QCoreApplication::libraryPaths();
    paths.append(".");
    paths.append("imageformats");
    paths.append("platforms");
    paths.append("sqldrivers");
    QCoreApplication::setLibraryPaths(paths);

    QApplication::setOrganizationName( "FILTR-KTV" );
    QApplication::setOrganizationDomain( "filter-tv.ru" );
    QApplication::setApplicationName( "BlackWoodWhip" );

    QApplication a(argc, argv);
    QApplication::setStyle (QStyleFactory::create ("Fusion"));
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlTableModel>


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QSqlDatabase db;
};

#endif // MAINWINDOW_H

mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QtSql>
#include <QSqlError>
#include <QSqlRecord>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    qDebug() << QApplication::libraryPaths();

    //DATABASE MySQL
    db = QSqlDatabase::addDatabase("QMYSQL", "BWW");
    db.setHostName("127.0.0.1");
    db.setDatabaseName("blackwoodwhip");
    db.setUserName("root");
    db.setPassword("root");
    if (!db.open()){
        qDebug() << "Error";
    } else {
        qDebug() << "Ok";
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}


Теперь, внимание вопрос, как быть в такой ситуации?
Я пробовал заново скомпилить из исходников .dll'ки, но напоролся на какие-то ошибки (кажется жаловался, что не значет, что такое mysql.
  • Вопрос задан
  • 3330 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Mercury13
Программист на «си с крестами» и не только
Нужны две DLL’ки: libmysql.dll в каталоге с программой, и qsqlmysql.dll в каталоге plugins/sqldrivers.
От подкаталога plugins можно избавиться, написав в программе

QApplication a(argc, argv);   // это наша программа, обычно создано автоматом
a.addLibraryPath(QCoreApplication::applicationDirPath());


От sqldrivers, насколько мне известно, так нельзя.
Ответ написан
Комментировать
@electronik777
Используй
if (!db.open()){
        qDebug() << QObject::trUtf8("Database error connect") << db.lastError().text();
    }

там увидите ошибку
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы