powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / RETURN всегда 0 ?
11 сообщений из 11, страница 1 из 1
RETURN всегда 0 ?
    #32044372
harrytv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При выходе из SP в Delphi у StoredProc ptResult всегда = 0.
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT @x= 1 
SELECT @y= 2 
IF @x < @y
BEGIN
     RASERROR ('x<y'',  16 ,  1 )
     RETURN @y
END


Если
Код: plaintext
1.
2.
3.
SELECT @x= 1 
SELECT @y= 2 
RETURN @y
END

получаю @y
Почему так?
...
Рейтинг: 0 / 0
RETURN всегда 0 ?
    #32044405
~Bazul~
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так попробуй

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT @x= 1 
SELECT @y= 2 
IF @x < @y
BEGIN
     RASERROR ('x<y'',  16 ,  1 )
     RETURN @y
END
 ELSE RETURN  0  
...
Рейтинг: 0 / 0
RETURN всегда 0 ?
    #32044434
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получив RAISERROR, Дельфи генерит исключение, а это означает, что текущая обработка обрывается и начинает выполняться ближайший код обработки исключения. Говоря другими словами, после RAISERROR, Дельфи уже не пытается ничего получить из OUTPUT хранимой процедуры, в том числе и значение RETURN, так как занято другими вещами.
...
Рейтинг: 0 / 0
RETURN всегда 0 ?
    #32044480
Oleg_Martynov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда-то специально проверял. Результат (мой):
Да, всегда 0, если использовать BDE (TStoredProc). Если использовать ADO (TADOStoredProc) - работает, как ожидается. Т.к. это имеет место во всех версиях Дельфи - скорее всего, "особенность" взаимодействия BDE с MS SQL.
Удачи!
...
Рейтинг: 0 / 0
RETURN всегда 0 ?
    #32044651
harrytv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо.
Может перейти на ADO?. Правда год назад пробовал работать с ним. Написал тест - вызов в цикле SP заполняющую таблицу (10000 записей), получилось в 2
раза медленее чем с BDE.Верно ли это?
...
Рейтинг: 0 / 0
RETURN всегда 0 ?
    #32044656
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это:

Получив RAISERROR, Дельфи генерит исключение, а это означает, что текущая обработка обрывается и начинает выполняться ближайший код обработки исключения. Говоря другими словами, после RAISERROR, Дельфи уже не пытается ничего получить из OUTPUT хранимой процедуры, в том числе и значение RETURN, так как занято другими вещами.

справедливо для любого механизма подключения. Хотя на ADO перейти, конечно, стоит по-любому.
...
Рейтинг: 0 / 0
RETURN всегда 0 ?
    #32044734
harrytv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dankov
Взялся за ADO. Как только добавляю в параметры ADOStoredProc pdReturnValue - получаю exception too many argyments ... ,без него все ОК, но где мой RETURN ???
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE PROCEDURE Update_Men
  @men_id         INT =  0 ,
  @tabnumber    INT =  0 ,
  @f	          VARCHAR( 30 ),
  @i	          VARCHAR( 30 ),
  @o	          VARCHAR( 30 ),
  @tarif             DECIMAL( 9 , 2 ) =  0 ,
  @class            INT =  0 
AS
  RETURN  100  
END

В Delphi
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with  ADOStoredProc1 do
 try
   ProcedureName:='Update_Men';
   Parameters.Clear;
   Parameters.CreateParameter('@men_id',ftInteger,pdInput, 32 , 0 );
   Parameters.CreateParameter('@tabnumber',ftInteger,pdInput, 32 , 0 );
   Parameters.CreateParameter('@F',ftString,pdInput, 32 , 0 );
   Parameters.CreateParameter('@I',ftString,pdInput, 32 , 0 );
   Parameters.CreateParameter('@O',ftString,pdInput, 32 , 0 );
   Parameters.CreateParameter('@tarif',ftFloat, pdInput, 32 , 0 );
   Parameters.CreateParameter('@class',ftInteger, pdInput, 32 , 0 );
   Parameters.CreateParameter('result', ftInteger, pdReturnValue,  32  , 0 );
....     

В чем дело,что-то я к вечеру отупел малость :-)
...
Рейтинг: 0 / 0
RETURN всегда 0 ?
    #32044739
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавлять его не надо...
после execute - cmd.Parameters("return_value").....
...
Рейтинг: 0 / 0
RETURN всегда 0 ?
    #32044741
harrytv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Мир не без добрых людей :-)
...
Рейтинг: 0 / 0
RETURN всегда 0 ?
    #32044742
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сегодня мы вам...
завтра наоборот....
удачи....
ЗЫ... правда дельфи я не знаю... и не люблю паскаль...
но это так... к слову...
...
Рейтинг: 0 / 0
RETURN всегда 0 ?
    #32044937
harrytv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако,нужно его создавать ручками, только стоять он должен ПЕРВЫМ
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / RETURN всегда 0 ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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