[QT] набор данных из хранимой процедуры

 
0
 
C++
ava
MasterZiv | 10.04.2013, 19:55
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");

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

Видно что-то вообще не так...
Comments (6)
ava
Guinness | 11.04.2013, 07:29 #
Было бы хорошо код хранимой процедуры посмотреть. Вы её из mysql консоли запускали, работала?
ava
MasterZiv | 11.04.2013, 10:37 #
Цитата (Guinness @ 11.4.2013,  07:29)
Было бы хорошо код хранимой процедуры посмотреть. Вы её из mysql консоли запускали, работала?

Я же написал.

Цитата


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



ava
Guinness | 11.04.2013, 11:02 #
Я к чему спросил, Вы туда параметр передаете. А в запросе никаких параметров не нужно.
MySQL работает удаленно?
Может у Вас нет привилегий на определенные операции, которые есть в хранимой процедуре?
ava
MasterZiv | 11.04.2013, 13:04 #
Цитата


Я к чему спросил, Вы туда параметр передаете. А в запросе никаких параметров не нужно.

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 у Вас всегда к первой колонке применяется.



Это не важно, об этом -- позже. Чё-то оно показывает и в таком виде -- и ладно.
ava
Guinness | 11.04.2013, 14:11 #
К несчастью, на работе у меня нет исходников, с которыми я работал с MySQL, приду посмотрю в чем у нас различия, ибо у меня все прекрасно работало.

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

Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit