Ошибка при вызове хранимой процедуры MySQL

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
volodya25
новенький
Сообщения: 10
Зарегистрирован: 03.11.2011 22:33:23
Откуда: Украина

Ошибка при вызове хранимой процедуры MySQL

Сообщение volodya25 »

Создал в MySQL хранимую процедуру:

Код: Выделить всё

CREATE PROCEDURE fifo (in id_inp BIGINT, OUT Ret_code int)
....

Процедура успешно отрабатывает если запускать ее из консоли или phpmyadmin.
При попытке вызвать ее из программы на Lazarus получаю сообщение об ошибке.
Procedure fifo can`t return a result set in the given context.
Код:

Код: Выделить всё

 SQLQuery1.Active:=false; SQLQuery1.SQL.Clear;
   SQLQuery1.SQL.Add('CALL fifo('+inttostr(id_document)+',@result)');
   SQLQuery1.ExecSQL;

Пробовал SQLQuery1.open - пишет, что открывать можно только select запросы.
По результатам гугления добавил в mysql50connection.params

Код: Выделить всё

CLIENT_MULTI_STATEMENTS=true
CLIENT_MULTI_RESULTS=true

Не помогло. не дает запускать вообще никакие хранимые процедуры. Запросы на выборку и обновление работают.
Никто не встречал подобного? Как лечить?
Спасибо.

Использую:
libmysql.so.14
fpc 2.6.0
Lazarus SVN 2013-03-05 GTK2
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Вы хотите получить результат давая запрос на исполнение, процедуре некуда возвращать результат
Возможно нужно сделать функцию и сделать так

Код: Выделить всё

SQLQuery1.SQL.Add('select fifo('+inttostr(id_document)+') as Field)
SQLQuery1.Open
Аватара пользователя
EmeraldMan
постоялец
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород
Контактная информация:

Сообщение EmeraldMan »

До недавнего времени, действительно SQLQuery1.Open на запрос CALL, возвращяемой значения процедуры, выдавал ошибку.
Точно не помню с какой версии все заработало. В Lazarus 1.0.8 и FPC 2.6.2 - данной проблемы уже нет. В более поздних так же должно работать.

Ism, во многих случаях возможностей функции просто не хватает. Бывает надо в конце выполнения вывести многострочный результат в виде таблицы. По моему, в функции так же запрещены транзакции, в процедурах их можно использовать.
volodya25
новенький
Сообщения: 10
Зарегистрирован: 03.11.2011 22:33:23
Откуда: Украина

Сообщение volodya25 »

Переделать процедуру на функцию не получилось - иногда возможен многострочный результат.
Получаю ошибку "Not allowed to return a result set from a function"
Попробую обновить Lazarus и FPC.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

volodya25 писал(а):Переделать процедуру на функцию не получилось - иногда возможен многострочный результат.
Получаю ошибку "Not allowed to return a result set from a function"
Попробую обновить Lazarus и FPC.

Возвращайте в виде строки с разделителями. Вообще в mysql есть временные таблицы
В zeosdbo получение из функции работает
volodya25
новенький
Сообщения: 10
Зарегистрирован: 03.11.2011 22:33:23
Откуда: Украина

Сообщение volodya25 »

Установил ZeosDBO и все заработало.
Всем спасибо. Вопрос закрыт.
Ответить