Russian Qt Forum

Qt => Базы данных => Тема начата: malor от Октябрь 10, 2013, 11:57



Название: После сборки драйвера для MySQL "sqlbrowser" работает, а моя прога - нет.
Отправлено: malor от Октябрь 10, 2013, 11:57
Собрал драйвер для MySQL по инструкции How to enable MySQL Support in Qt SDK for Windows [ieatbinary] (http://ieatbinary.com/2011/07/11/how-to-enable-mysql-support-in-qt-sdk-for-windows/).

Код
C++ (Qt)
void TextFinder::on_findButton_clicked()
{
 
   if (!QSqlDatabase::drivers().contains("QMYSQL"))
       QMessageBox::critical(0, "Unable to load database", "This program needs the MySQL driver");
 
   QCoreApplication::addLibraryPath(QString("%1/%2")
        .arg(qApp->applicationDirPath())
        .arg("plugins"));
 
   bool ok = db.open();
 
   if (ok)
   {
       QSqlQuery query;
       query.exec("SELECT id FROM consdoc");
 
       if(query.isActive()) {
           QMessageBox::information(0,"Good Query", "Good Query.  It\'s active");
           while(query.next())
           {
               ui->textEdit->append(query.value(0).toString());
           }
       } else {
           QMessageBox::warning(0, "Bad Query", QString("Bad Query, It\'s inactive: %1").arg(query.lastError().text()));
       }
 
 
       while (query.next())
       {
           QString sID = query.value(0).toString();
           ui->textEdit->append(sID);
 
       }
 
   }
   else
   {
     QString err = db.lastError().text();
     ui->textEdit->append(err);
   }
 
}

До сборки драйвера переменная ok из строчки
bool ok = db.open();
имела значение false.

После сборки она стала true и демо-проект sqlbrowser тоже
стал отображать в выпадающем списке MySQL-драйвер.

Тем не менее, моя программа выдаёт:
Bad Query, It's inactive: Driver not loaded Driver not loaded

Содержимое файла TextFinder.pro:
Код
INI
QT       += core gui
QT += sql
 
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 
TARGET = TextFinder
TEMPLATE = app
 
SOURCES += main.cpp\
       textfinder.cpp
 
HEADERS  += textfinder.h
 
FORMS    += textfinder.ui
 
RESOURCES += \
   TextFinder.qrc

MySQL 5.5.29 / QtCreator 2.6.2 / Windows 7 SP1 64-bit


Название: Re: После сборки драйвера для MySQL "sqlbrowser" работает, а моя прога - нет.
Отправлено: ecspertiza от Октябрь 10, 2013, 12:07
как вариант не цепляется плагин, положи плагин в папку sqldrivers рядом с бинарником.


Название: После сборки драйвера MySQL `sqlbrowser` работает, а моя прога - нет.
Отправлено: malor от Октябрь 10, 2013, 12:27
Перебросил все четыре файла (две dll и две a) из папок "C:\Qt\qt-4.8.4\src\plugins\sqldrivers\mysql\release"
и "C:\Qt\qt-4.8.4\src\plugins\sqldrivers\mysql\debug" в каталог
"C:\Qt\qt-proj\TextFinder-build-Desktop-_______\debug\sqldrivers", но всё равно не изменило ситуацию.


Название: Re: После сборки драйвера для MySQL "sqlbrowser" работает, а моя прога - нет.
Отправлено: ecspertiza от Октябрь 10, 2013, 13:19
Тогда так, насколько я вижу в тебя проверка на драйвер проходит хорошо.

у тебя же не вызывается кусок

Код:
QMessageBox::critical(0, "Unable to load database", "This program needs the MySQL driver");

еще я вижу ,что у тебя есть отдельный экземпляр класса который хранит соединение с БД, в твоем случает это db. Если ты используешь такую конструкцию то и запросы тебе нужно исполнять исходя из этого экземпляра. Создание QSqlQuery в твоем случае должно выглядеть так

Код:
QSqlQuery query(db);


Название: После сборки драйвера на MySQL 'sqlbrowser' работает, а моя прога - нет.
Отправлено: malor от Октябрь 10, 2013, 13:32
Заработало. Спасибо!


Название: Re: После сборки драйвера для MySQL "sqlbrowser" работает, а моя прога - нет.
Отправлено: izhack от Октябрь 23, 2013, 12:10
еще я вижу ,что у тебя есть отдельный экземпляр класса который хранит соединение с БД, в твоем случает это db. Если ты используешь такую конструкцию то и запросы тебе нужно исполнять исходя из этого экземпляра. Создание QSqlQuery в твоем случае должно выглядеть так
Код:
QSqlQuery query(db);

Точно такой же случай.
ecspertiza огромное спасибо!