Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.10;
Скачать: CL | DM;

Вниз

TADOQuery+output параметры   Найти похожие ветки 

 
Maverick ©   (2006-07-06 11:35) [0]

Здравствуйте!
Мастера, порулите вопрос. Как правильно обозначть output параметр в TADOQuery?
Что имеется в виду:
например надо вернуть id последний вставленной записи. поэтому в свойстве ADOQuery.SQL  пишу так
........................................
DECLARE @id integer
INSERT INTO table(field)
VALUES (:field)
SET @id=SCOPE_IDENTITY()
........................................
:field - input параметр

как павильно присвоить output параметру :id значение @id ?

можно конечно написать:
........................................
SELECT @id as "id"
...................................
и быть счастливым,
но хочется вернуть output параметр


 
Ega23 ©   (2006-07-06 11:42) [1]


> можно конечно написать:
> ........................................
> SELECT @id as "id"
> ...................................
> и быть счастливым,
> но хочется вернуть output параметр
>


Лучше написать именно так.
Причём даже так:

DECLARE @id integer
Set NoCount ON
INSERT INTO table(field)
VALUES (:field)
Set NoCount OFF
Select Result=SCOPE_IDENTITY()


А ещё лучше оформить это дело хранимаой процедурой и вызывать уже её.


 
Ega23 ©   (2006-07-06 11:44) [2]


> Ega23 ©   (06.07.06 11:42) [1]
>
>


Точнее, Declare тут вообще не надо...


 
Maverick ©   (2006-07-06 11:51) [3]

>Ega23 ©   (06.07.06 11:42) [1]
ок, спасибо.
кстати, по поводу хранимых процедур...естественно это удобнее, быстрее и т.д.(обычно так всегда и делаю), но вот что меня всегда смущало:
есть некая система со своей логикой, там куча процедур обеспечивающих логику системы...и есть клиентское приложение (мониторинг, некая тулза для управления), для него надо писать кучу маленьких процедур часто из одного insert"a или select"a...хотя наверно это тема для отдельного топика
что думаете?


 
Ega23 ©   (2006-07-06 11:59) [4]

Я обычно делаю так.

Есть какая-то сущность. Например - сотрудник.
Создаю процедуру S_Persons, объявляю параметр @ActNam varchar(32).
А дальше

Declare @Result int
Set @Result=0
Set NoCount ON

if @ActNam="ADD"
begin
  Insert into Persons (....) Values (.....)
  Select @Result=@@IDENTITY
  Goto Fin
end

if @ActNam="UPD"
begin
  Update Persons Set ...
    where PersID=@PersID;
  Select @Result=PersID
  Goto Fin
end

if @ActNam="DEL"
begin
  Delete Persons where PersID=@PersID
  Select @Result=PersID
  Goto Fin

end

if @ActNam="SEL"
begin
  Set NoCount OFF
  Select * from Persons (тут ещё куча таблиц может быть прилинкована)
    Order By ...
  Goto Fin
end

:FIN
set nocount off;
return(@result);
GO


Таким образом на каждую сущность получаем свою процедуру, отвечающую за полную работу с этой сущностью.


 
Maverick ©   (2006-07-06 12:09) [5]

>Ega23 ©   (06.07.06 11:59) [4]
один из вариантов...но глобально проблемы не решает, т.к. и сущностей может быть много и select"ов по ним, но за мысль спасибо :)


 
Ega23 ©   (2006-07-06 13:03) [6]


> т.к. и сущностей может быть много и select"ов по ним,


Ну, для разных Select"ов - разные ActNam.
Просто я уже давно придерживаюсь правила, что у клиента не должно быть прямых вызовов SQL. Всё ТОЛЬКО через хп. Любые запросы, любые вставки и .т.п.
Сильно жизнь упрощает.



Страницы: 1 вся ветка

Текущий архив: 2006.09.10;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.049 c
15-1155749638
VictorT
2006-08-16 21:33
2006.09.10
Притащился от формы регистрации на форуме


3-1152195197
solenko
2006-07-06 18:13
2006.09.10
Условие на вычисляемые поля при использовании GROUP BY


3-1152097959
MsGuns
2006-07-05 15:12
2006.09.10
Как определить конец множества RecordSet - ов


15-1155559772
rimm
2006-08-14 16:49
2006.09.10
Потоки и поточные преложения...


8-1140529733
hh_speed
2006-02-21 16:48
2006.09.10
как узнать частоту кадров у AVI





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский