Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT] набор данных из хранимой процедуры 
:(
    Опции темы
MasterZiv
Дата 10.4.2013, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.1.2012

Репутация: нет
Всего: нет



QT 4.8.
Нужно получить набор данных из хранимой процедуры и отобразить его в гриде.
сервер -- MySQL, но думаю это не очень важно.
Без процедуры всё работает и показывает. 
С процедурой -- фиг.

Ключевой кусок кода:

Код

void MainWindow::init()
{
    // -- dont use this -- query.setForwardOnly(true);
    //query.prepare("select * from MSG");
    query.prepare("CALL getLastMsg( ? )");
    query.bindValue(0,"20");
    if (!query.exec())
    {
            qDebug() << "getLastMsg() failed: " << query.lastError().text();
    }

    unsigned ncols = query.record().count();
    while( query.next() )
    {
        for( unsigned i = 0; i < ncols; ++i )
        {
          if( i )
              qDebug() << " | ";
          qDebug() << query.value(i).toString();
        }
        qDebug() << '\n';
    }

    msg_data.setQuery( query );

    msg_data.setHeaderData( 0, Qt::Horizontal, QObject::tr("MSG_ID") );
    msg_data.setHeaderData( 0, Qt::Horizontal, QObject::tr("MSG_DATE") );
    msg_data.setHeaderData( 0, Qt::Horizontal, QObject::tr("USER") );
    msg_data.setHeaderData( 0, Qt::Horizontal, QObject::tr("SEVERITY") );
    msg_data.setHeaderData( 0, Qt::Horizontal, QObject::tr("MSG") );
    msg_data.setHeaderData( 0, Qt::Horizontal, QObject::tr("WK_SYSTEM_CODE") );
    msg_data.setHeaderData( 0, Qt::Horizontal, QObject::tr("WK_PROCESS_CODE") );
    msg_data.setHeaderData( 0, Qt::Horizontal, QObject::tr("WK_COMPONENT_CODE") );
    msg_data.setHeaderData( 0, Qt::Horizontal, QObject::tr("COMPONENT_INSTANCE_ID") );
    msg_data.setHeaderData( 0, Qt::Horizontal, QObject::tr("WK_OBJECT_CODE") );
    msg_data.setHeaderData( 0, Qt::Horizontal, QObject::tr("WK_OBJECT_NICKNAME") );

    ui->tableView->setModel(&msg_data);
}


Соответственно, если использовать эту строку кода,
Код

query.prepare("select * from MSG");

то всё ОК,
а если две строки ниже -- фиг, там даже набор данных не виден.
Процедура естественно отдельно от данного клиента работает, проверена. Возвращает тот же набор данных.

Видно что-то вообще не так...

PM MAIL   Вверх
Snake174
Дата 11.4.2013, 04:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 5.10.2011
Где: Miass

Репутация: нет
Всего: нет



PM MAIL   Вверх
Guinness
Дата 11.4.2013, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 21.6.2009
Где: Зеленоград

Репутация: 2
Всего: 10



Было бы хорошо код хранимой процедуры посмотреть. Вы её из mysql консоли запускали, работала?
PM MAIL   Вверх
MasterZiv
Дата 11.4.2013, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.1.2012

Репутация: нет
Всего: нет



Цитата(Guinness @ 11.4.2013,  07:29)
Было бы хорошо код хранимой процедуры посмотреть. Вы её из mysql консоли запускали, работала?

Я же написал.

Цитата

Процедура естественно отдельно от данного клиента работает, проверена. Возвращает тот же набор данных.


Добавлено через 2 минуты и 54 секунды
Цитата(Snake174 @ 11.4.2013,  04:47)
Может это поможет

Нет, не поможет.
Там вообще ничего нет по теме. Там всё только про выходные параметры, которые не поддерживаются.
PM MAIL   Вверх
Guinness
Дата 11.4.2013, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 21.6.2009
Где: Зеленоград

Репутация: 2
Всего: 10



Я к чему спросил, Вы туда параметр передаете. А в запросе никаких параметров не нужно.
MySQL работает удаленно? 
Может у Вас нет привилегий на определенные операции, которые есть в хранимой процедуре?

Ещё setHeaderData у Вас всегда к первой колонке применяется.

Это сообщение отредактировал(а) Guinness - 11.4.2013, 11:06
PM MAIL   Вверх
MasterZiv
Дата 11.4.2013, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.1.2012

Репутация: нет
Всего: нет



Цитата

Я к чему спросил, Вы туда параметр передаете. А в запросе никаких параметров не нужно.
MySQL работает удаленно? 
Может у Вас нет привилегий на определенные операции, которые есть в хранимой процедуре?


Да есть всё. Убирал я параметр, добавлял -- один хрен.
Эта сволочь просто не приемлит подготовленное выполнение вызовов хранимок.

Надо так:
Код

    QString q;
    q.sprintf( "CALL getLastMsg(%d)", 20 );
    if (!query.exec( q ) )
    {
            qDebug() << "getLastMsg() failed: " << query.lastError().text();
    }

    unsigned ncols = query.record().count();
    while( query.next() )
    {
        for( unsigned i = 0; i < ncols; ++i )
        {
          if( i )
              qDebug() << " | ";
          qDebug() << query.value(i).toString();
        }
        qDebug() << '\n';
    }




Цитата

Ещё setHeaderData у Вас всегда к первой колонке применяется.


Это не важно, об этом -- позже. Чё-то оно показывает и в таком виде -- и ладно.

Это сообщение отредактировал(а) MasterZiv - 11.4.2013, 13:05
PM MAIL   Вверх
Guinness
Дата 11.4.2013, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 21.6.2009
Где: Зеленоград

Репутация: 2
Всего: 10



К несчастью, на работе у меня нет исходников, с которыми я работал с MySQL, приду посмотрю в чем у нас различия, ибо у меня все прекрасно работало.

А с этим все нормально?
Цитата(Guinness @  11.4.2013,  11:02 Найти цитируемый пост)
MySQL работает удаленно? Может у Вас нет привилегий на определенные операции, которые есть в хранимой процедуре?


Хотя, я вот сейчас ещё раз на Ваш последний пример посмотрел, очень похоже, что хранимые процедуры я вызывал именно таким образом. Сам расставлял кавычки, где нужно и т.п.

Это сообщение отредактировал(а) Guinness - 11.4.2013, 14:22
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0826 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.