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

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

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

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

Сообщение volodya25 » 16.10.2013 14:52:21

Создал в 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
volodya25
новенький
 
Сообщения: 10
Зарегистрирован: 03.11.2011 22:33:23
Откуда: Украина

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

Сообщение Ism » 16.10.2013 17:49:18

Вы хотите получить результат давая запрос на исполнение, процедуре некуда возвращать результат
Возможно нужно сделать функцию и сделать так
Код: Выделить всё
SQLQuery1.SQL.Add('select fifo('+inttostr(id_document)+') as Field)
SQLQuery1.Open
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

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

Сообщение EmeraldMan » 16.10.2013 18:00:49

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

Ism, во многих случаях возможностей функции просто не хватает. Бывает надо в конце выполнения вывести многострочный результат в виде таблицы. По моему, в функции так же запрещены транзакции, в процедурах их можно использовать.
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

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

Сообщение volodya25 » 16.10.2013 22:46:25

Переделать процедуру на функцию не получилось - иногда возможен многострочный результат.
Получаю ошибку "Not allowed to return a result set from a function"
Попробую обновить Lazarus и FPC.
volodya25
новенький
 
Сообщения: 10
Зарегистрирован: 03.11.2011 22:33:23
Откуда: Украина

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

Сообщение Ism » 17.10.2013 15:01:30

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

Возвращайте в виде строки с разделителями. Вообще в mysql есть временные таблицы
В zeosdbo получение из функции работает
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

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

Сообщение volodya25 » 18.10.2013 11:58:03

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


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 227

Рейтинг@Mail.ru