Страница 1 из 1
					
				Возвращение значений из Stored procedure
				Добавлено: 30 Октябрь 2006, 12:57
				 ru_alex
				Всем привет!
Есть хранимка, которая обрабатывает данные базы, в том числе заносит и изменяет данные, хотелось бы после добавления записи вернуть в программу идентификатор новой записи. Прочитал про OUTPUT параметры, в Management Studio все работает на ок.
А можно ли решить проблему через prop:sql?
MyFile{prop:sql}='Declare @Param Int EXEC MyProc (@Param OUTPUT) SELECT @Param' 
вроде не катит.
			 
			
					
				FILE,DRIVER
				Добавлено: 31 Октябрь 2006, 15:20
				 Andrew™
				судя по доке это делается так:
Код: Выделить всё
MyVar LONG
 CODE
PUSHBIND
BIND('MyVar',MyVar)
MyFile{PROP:SQL} = 'CALL SelectRecordsProcedure (&MyVar[OUT])'
 POPBIND
 
			 
			
					
				
				Добавлено: 01 Ноябрь 2006, 11:42
				 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]
Кто нибудь знает в чем затык?
 
			 
			
					
				
				Добавлено: 01 Ноябрь 2006, 12:30
				 Andrew™
				ru_alex писал(а):      MyFile{prop:sql}='CALL dbo.qqq (Param1 [INOUT])'
& не увидел данного симбола у параметра, хотя думаю что это просто опечатка, поэкспериментируй с типом параметра, STRING попробуй, может идёт переполнение на результат, расширь переменную
честно скажу, что разбираться этой проблемой мне в лом, FILE,DRIVER при разработке клиент серверный приложений на Clarion не юзаю
ЗЫ
 я бы в начале ХП выставил бы
 
			 
			
					
				
				Добавлено: 01 Ноябрь 2006, 12:32
				 Дед Пахом
				Попробуй 
Код: Выделить всё
CREATE PROCEDURE [dbo].[MyProc] 
@Param1 varchar(60) output 
AS 
BEGIN 
select @Param1 = RTRIM(@Param1) + 'RET' 
END