powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / опять параметры TADOStoredProc
31 сообщений из 31, показаны все 2 страниц
опять параметры TADOStoredProc
    #32120137
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Ситуация следующая:
MsSql 6.5, COM+(Delphi7).
Есть работающее приложение, в котором есть определенный в дизайн-тайме компонент TADOStoredProc, с кучей входных параметров и двумя выходными.
Так все работает отлично:
Код: plaintext
1.
2.
3.
4.
5.
      ....
      ADOStoredProc1.ExecProc;
      ....
      FNumber := ADOStoredProc1.Parameters.ParamValues['@Number'];
      Fid := ADOStoredProc1.Parameters.ParamValues['@id'];

Требуется добавить еще один выходной параметр (все параметры строковые), после добавления которого начинают творится следующие чудеса:
Код: plaintext
1.
2.
3.
4.
5.
6.
      ....
      ADOStoredProc1.ExecProc;
      ....
      FNumber := ADOStoredProc1.Parameters.ParamValues['@Number']; //  1 
      Fid := ADOStoredProc1.Parameters.ParamValues['@id']; //  2 
      FEMail := Parameters.ParamValues['@EMail']; //  3 

в строке 2 ADOStoredProc1 возвращает null (генерится ошибка),
в строке 3 ADOStoredProc1 возвращает значение параметра @Number(!)
в строке 1 возвращается абсолютно левое значение.
причем в query anilyzer все работает как надо - все параметры на своих местах..
пересоздание ADOStoredProc1 ничего не дает - глюк остается.
подскажите в чем тут может быть дело,
заранее спасибо!
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120139
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А параметры в дезайн тайм задаешь или нет.
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120143
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
параметры задаются в дизайн-тайме, а их значения в ран-тайме
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120147
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Профайлером вызов смотрел, все ли правильно уходит с клиента.
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120168
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, в профайлере все верно, делал Ctrl-C Ctrl-V в query anilyzer - все ок
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120172
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чудеса прям. Ну а в рантайм попробуй перед заданием параметрам значений сделать Refresh для коллекции параметров. И ничего у тебя там, ну где три точечки, больше не делается между ЕхесProc и чтением значений параметров.
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120181
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
там где три точки я комментарил - глюки остаются, попробую Refresh
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120225
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
FEMail := Parameters.ParamValues['@EMail']; //  3 

не указано ADOStoredProc1. Может здесь что-то зарыто?
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120260
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да нет :-), это я тут просто добавть забыл, у меня в коде
with ADOStoredProc1 do begin
то все внутри
end;
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120263
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Процедуру можешь показать?
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120266
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как увеличивал количество параметров - руками? или обновил все данные по процедуре? (т.е. выбрал заново ее - параметры должны автоматом встать)
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120273
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так то она здоровая, в принципе могу только нужные места вырезать, но есть ли смысл - она точно работает, я в query anilyzer проверял.
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120277
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to AVL: обновлял автоматом, т.е. выбрал по новой процедуру;
также грохал ADOStoredProc1 и создавал заново для обновленной процедуры - все-равно глюки остаются.
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120278
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Може и зря я это спросил, но хоть как параметры объявлены покажи и где выходным значения присваиваешь.
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120282
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно по-пробывать АДОКомманд или АДОквери. Если не получится, то глюк, если получится - то какая-то путаница(не ту процедуру выбираешь, не на том сервере, не того оунера и т.д.)
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120287
_Александр_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если этот третий параметр убрать, что - опять все нормально?
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120289
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
CREATE PROCEDURE MyProc
....
@Number VarChar( 10 ) =null output,
....
@id Char( 8 ) = null output,
....
@EMail VarChar( 254 ) = null output,
....
AS
set nocount on
....

set @Number=''
set @id=''
set @EMail=''
....
 -- получаем следующий номер
 
update Parameters set @Number=Value, Value=case when CONVERT(int, Value)>= 999  then '1' else CONVERT(VarChar, CONVERT(int, Value)+ 1 ) end where Name='LastNumber'
....
 -- Здесь идут вызовы с другого сервака
 
    select @SQLcmd=@ServerName+'.'+@DataBaseName+'.dbo.MyProc2'
    exec @Ret=@SQLcmd
        ....
	@Number=@Number,
	....

    select @SQLcmd=@ServerName+'.'+@DataBaseName+'.dbo.MyProc3'
    exec @Ret=@SQLcmd @EMail output
    if @EMail is null
      set @EMail=''
....
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120291
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
CREATE PROCEDURE MyProc
....
@Number VarChar( 10 ) =null output,
....
@id Char( 8 ) = null output,
....
@EMail VarChar( 254 ) = null output,
....
AS
set nocount on
....

set @Number=''
set @id=''
set @EMail=''
....
 -- получаем следующий номер
 
update Parameters set @Number=Value, Value=case when CONVERT(int, Value)>= 999  then '1' else CONVERT(VarChar, CONVERT(int, Value)+ 1 ) end where Name='LastNumber'
....
 -- Здесь идут вызовы с другого сервака
 
    select @SQLcmd=@ServerName+'.'+@DataBaseName+'.dbo.MyProc2'
    exec @Ret=@SQLcmd
        ....
	@id=@id output,
	....

    select @SQLcmd=@ServerName+'.'+@DataBaseName+'.dbo.MyProc3'
    exec @Ret=@SQLcmd @EMail output
    if @EMail is null
      set @EMail=''
....
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120294
_Александр_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что такое

@Number=@Number
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120298
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to _Александр_:
если его убрать только в дельфе, а в процедуре оставить - глюки продолжаются, а если убрать и из ХП - все работает ок
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120301
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слушай, тут на форуме по SQL Server проскакивал топик про проблемы вызова ХП на линкед серверах. Может это каким-нибудь боком влияет.
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120303
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to _Александр_:
второй вариант процедуры правильный
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120308
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помоему проблема тут не в SQL Server, .. сам то запрос ведь нормально выполняется, тут что-то должно быть с TADOStoredProc не ладно, хотя про линкеды тоже посмотрю
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120315
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to _Александр_
Код: plaintext
1.
2.
3.
4.
5.
6.
    select @SQLcmd=@ServerName+'.'+@DataBaseName+'.dbo.MyProc2'
    exec @Ret=@SQLcmd
          ....
          @id=@id output,  -- часть списка параметров вызываемой процедуры
 
          ....
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120323
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не написал, что проблемы были именно привызове через TADOStoredProc. Но там явно вызывалась процедура с удаленного сервера, а у тебя внутри вызов. Может это к делу и не относиться. А в своей проге ты SETов ни каких не устанавливаешь. Бредовая конечно мысль, но просто мыслей больше нет.
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120329
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
re: можно по-пробывать АДОКомманд или АДОквери
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120340
_Александр_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TADOStoredProc, с кучей входных параметров и двумя выходными

Может там копать. Сравни свойства этого третьего параметра с двумя
первыми в части типов данных и т.п..
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120653
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне непонятно, эти три параметра возвращаются дополнительно к возвращаемому датасету или они одни только и нужны?

Если нужны только они, то возвращайте данные через select.
Т.е. в конце процедуры должно стоять
select @Number,@id,@EMail


Так же рекомендуется (Борландом) НЕ ПОЛЬЗОВАТЬСЯ никакими компонентами, кроме ADOCommand и ADODataset.
В Вашем случае, используйте TADOCommand c CommandType=cmdStoredProc.
==========
Я не первый раз вижу вопрос с проблемами с выходными параметрами. Плюньте Вы на них. ВСЕГДА возврашайте select'ом.
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32120706
SGrigori
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй удалить все параметры в дизайнере и создать их заново. Возможно Delphi помнит количество или очередность параметров. Если совсем ничего не получится, очисти элемент и пересоздай все заново. ( Для этого элемента )
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32121669
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем огромное спасибо, заработал следующий вариант:
отказ от выходных параметров в ADOStoredProc1 и получение их через select @Number, @id, @EMail.
ADOStoredProc1.Refresh ничего не дает, глюк остается.
...
Рейтинг: 0 / 0
опять параметры TADOStoredProc
    #32121670
alex_j
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Cat2:
только они и нужны
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / опять параметры TADOStoredProc
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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