Возвращение значений из Stored procedure

ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
ru_alex
Ветеран
Сообщения: 333
Зарегистрирован: 21 Сентябрь 2005, 11:05
Откуда: Нижний Новгород
Контактная информация:

Возвращение значений из Stored procedure

Сообщение ru_alex »

Всем привет!
Есть хранимка, которая обрабатывает данные базы, в том числе заносит и изменяет данные, хотелось бы после добавления записи вернуть в программу идентификатор новой записи. Прочитал про OUTPUT параметры, в Management Studio все работает на ок.
А можно ли решить проблему через prop:sql?

MyFile{prop:sql}='Declare @Param Int EXEC MyProc (@Param OUTPUT) SELECT @Param'
вроде не катит.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

FILE,DRIVER

Сообщение Andrew™ »

судя по доке это делается так:

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

MyVar LONG

 CODE

PUSHBIND

BIND('MyVar',MyVar)
MyFile{PROP:SQL} = 'CALL SelectRecordsProcedure (&MyVar[OUT])'

 POPBIND
ru_alex
Ветеран
Сообщения: 333
Зарегистрирован: 21 Сентябрь 2005, 11:05
Откуда: Нижний Новгород
Контактная информация:

Сообщение ru_alex »

Андрей, спасибо.
Именно то что нужно.

Только нарисовалась одна проблема, а именно:

Stored proc:

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

CREATE PROCEDURE [dbo].[MyProc]
@Param1 varchar(60) output
AS
BEGIN
select @Param1 = @Param1 + 'RET'
END

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

Param1   CSTRING(61)

   code
   ...  
      bind('Param1',Param1)
      MyFile{prop:sql}='CALL dbo.qqq (Param1 [INOUT])'
      if errorcode()
         message(fileerrorcode()&'  '&fileerror())
      else
         stop('ok   '&Param1)
      end
      unbind('Param1')
в message ошибка 22001 'String data, right truncation'
при использовании long параметров все ок, так же работает если использовать вместо одного параметра [INOUT] связку двух параметров [IN] и [OUT]

Кто нибудь знает в чем затык?
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

ru_alex писал(а): MyFile{prop:sql}='CALL dbo.qqq (Param1 [INOUT])'
& не увидел данного симбола у параметра, хотя думаю что это просто опечатка, поэкспериментируй с типом параметра, STRING попробуй, может идёт переполнение на результат, расширь переменную

честно скажу, что разбираться этой проблемой мне в лом, FILE,DRIVER при разработке клиент серверный приложений на Clarion не юзаю


ЗЫ
я бы в начале ХП выставил бы

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

SET NOCOUNT ON
Последний раз редактировалось Andrew™ 01 Ноябрь 2006, 12:36, всего редактировалось 1 раз.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Сообщение Дед Пахом »

Попробуй

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

CREATE PROCEDURE [dbo].[MyProc] 
@Param1 varchar(60) output 
AS 
BEGIN 
select @Param1 = RTRIM(@Param1) + 'RET' 
END
С уважением, ДП
Ответить