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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: После сборки драйвера для MySQL "sqlbrowser" работает, а моя прога - нет.  (Прочитано 4453 раз)
malor
Гость
« : Октябрь 10, 2013, 11:57 »

Собрал драйвер для MySQL по инструкции How to enable MySQL Support in Qt SDK for Windows [ieatbinary].

Код
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
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #1 : Октябрь 10, 2013, 12:07 »

как вариант не цепляется плагин, положи плагин в папку sqldrivers рядом с бинарником.
Записан
malor
Гость
« Ответ #2 : Октябрь 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", но всё равно не изменило ситуацию.
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #3 : Октябрь 10, 2013, 13:19 »

Тогда так, насколько я вижу в тебя проверка на драйвер проходит хорошо.

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

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

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

Код:
QSqlQuery query(db);
Записан
malor
Гость
« Ответ #4 : Октябрь 10, 2013, 13:32 »

Заработало. Спасибо!
Записан
izhack
Гость
« Ответ #5 : Октябрь 23, 2013, 12:10 »

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

Точно такой же случай.
ecspertiza огромное спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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