powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / [QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set)
10 сообщений из 10, страница 1 из 1
[QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set)
    #38220981
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
[QT]Как показать набор данных из хранимой процедуры? (Stored procedure result set)
    #38220999
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

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

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

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

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

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



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

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

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


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