Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / [QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set) / 10 сообщений из 10, страница 1 из 1
10.04.2013, 20:03
    #38220981
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set)
QT 4.8. сервер -- MySQL. Драйвер QT для MySQL прямой, не через ODBC.
( QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); )
ОС -- линукс, но это не важно.

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

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
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("SEVERITY") );
    // ...
    msg_data.setHeaderData( 0, Qt::Horizontal, QObject::tr("MSG") );
    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);
}



Всё остальное проверено, если использовать

Код: plaintext
1.
query.prepare("select * from MSG");



-- всё работает, если наоборот две строки ниже -- фиг.
Оно даже набор данных не печатает, там печать вставлена.

Видимо, что-то совсем не так, что-то совсем неправильно.
Оно (QT и драйвер для MySQL) вообще это делать умеет ?
...
Рейтинг: 0 / 0
10.04.2013, 20:22
    #38220999
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set)
MasterZiv,

А если так?
Код: plaintext
1.
query.prepare("SELECT getLastMsg( ? )")
...
Рейтинг: 0 / 0
10.04.2013, 20:24
    #38221001
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set)
Anatoly Moskovsky,

Так ошибка синтаксиса будет. Ну, попробую...
...
Рейтинг: 0 / 0
10.04.2013, 20:25
    #38221002
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set)
Код: plaintext
1.
getLastMsg() failed:  "FUNCTION loggy.getLastMsg does not exist QMYSQL: Unable to execute query"
...
Рейтинг: 0 / 0
10.04.2013, 20:27
    #38221004
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set)
MasterZiv,

А, это процедура, а не функция.
А как она должна это резалтсет вернуть?
...
Рейтинг: 0 / 0
10.04.2013, 20:34
    #38221006
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set)
Предыдущий вопрос снимается.

Нашел в инете что например для перла
авторMySQL stored procedures that produce datasets need you to use Perl DBD::mysql 4.001 or later.

Т.е. в драйвере специально надо делать поддержку для процедур возвращающих резалтсеты.
Возможно Qt-шный еще не умеет.
...
Рейтинг: 0 / 0
10.04.2013, 20:35
    #38221007
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set)
...
Рейтинг: 0 / 0
10.04.2013, 20:46
    #38221015
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set)
Anatoly Moskovsky
>> А, это процедура, а не функция.
>> А как она должна это резалтсет вернуть?[/quot]
Код: sql
1.
2.
3.
4.
CREATE PROCEDURE resultset
AS
SELECT * FROM SomeTable;
GO



MasterZiv
поддержка хранимых процедур в Qt отвратительная, объём документации особенно впечатляет
за мускул не скажу, для ODBC они рекомендуют устанавливать setForwardOnly( true )
...
Рейтинг: 0 / 0
10.04.2013, 20:50
    #38221018
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set)
egorychза мускул не скажу, для ODBC они рекомендуют устанавливать setForwardOnly( true )

Ставил, выключал -- всё едино.
С SELECT-ом это просто вообще не работает.
...
Рейтинг: 0 / 0
11.04.2013, 13:56
    #38221768
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set)
Вот ано что, Михалыч:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    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';
    }



ТАК работает. Как в первом посте -- нет.
Нельзя использовать для вызова хранимой процедуры подготовленный запрос. По крайней мере для MySQL.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / [QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set) / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]