-
> Спасибо за помощь, думаю не последний раз написал ;)
Не за что, удачи! -
Anatoly Podgoretsky © (28.07.08 13:01) [41]> sniknik (28.07.2008 12:14:36) [36]
На размере ехе скажется как раз один AdoCommand - не в лучшую сторону конечно. -
Ко вчерашнему спрору о проверке внутри процедуры или в делфи:
Допустим хранимая процедура получает параметром идентификатор записи. Смотрит есть ли эта записьif EXISTS(SELECT... WHERE Idn=@idn)
и удаляет запись и возвращает 0. Если записи нет, то возвращает -1.
Как мне в этом случае оставить проверку на стороне приложения? В смысле как это сделать более-менее коротко и красиво? -
Способ 1.Declare @X int;
Select @X=exec S_MyProc @Id=18;
Select Result=@X;
Способ 2.
CREATE PROCEDURE s_MyProc
@ID int =-1,
@SelOut int = 1,
@Debug int =0
As
Declare @result int;
if Exists (Select ... from ... where id=@ID)
begin
Delete from ... where ID=@ID
Set @Result=0
end
else
Set Result=-1;
if @SelOut=1
Select Result=@result;
return(@result);
GO
Вызов второго варианта.
Если хочешь получить результат, то через TADODataSet.Open:exec S_MyProc @ID=...
Если не хочешь получить результат, то через TADOCommand.Execute:exec S_MyProc @ID=..., @SelOut=0 -
Спс.
-
> удаляет запись и возвращает 0. Если записи нет, то возвращает -1.
способ 3... правильный. (бредите вы этими процедурами чтоли?)
- простейший запрос в ADOCommand1, внесенный в десигне, видаdelete from ... where ID=:ID
выполнениеvar
RecAff: integer;
begin
ADOCommand1.Parameters.ParamByName('ID').Value:= ...;
ADOCommand1.Execute(RecAff);
if RecAff > 0
then //есть запись, а может и не одна (что подразумевает ID?)
else //нет записей
end;
все. и зачем сложности с процедурами? не нужна она тут.