Конференция "Базы" » Stream and AdoCommand [D7, MSSQL]
 
  • Ega23 © (28.07.08 12:43) [40]

    > Спасибо за помощь, думаю не последний раз написал ;)


    Не за что, удачи!
  • Anatoly Podgoretsky © (28.07.08 13:01) [41]
    > sniknik  (28.07.2008 12:14:36)  [36]

    На размере ехе скажется как раз один AdoCommand - не в лучшую сторону конечно.
  • Viod © (29.07.08 10:05) [42]
    Ко вчерашнему спрору о проверке внутри процедуры или в делфи:
    Допустим хранимая процедура получает параметром идентификатор записи. Смотрит есть ли эта запись
    if EXISTS(SELECT... WHERE Idn=@idn)

    и удаляет запись и возвращает 0. Если записи нет, то возвращает -1.
    Как мне в этом случае оставить проверку на стороне приложения? В смысле как это сделать более-менее коротко и красиво?
  • Ega23 © (29.07.08 10:16) [43]
    Способ 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

  • Viod © (29.07.08 12:54) [44]
    Спс.
  • sniknik © (29.07.08 13:32) [45]
    > удаляет запись и возвращает 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;



    все. и зачем сложности с процедурами? не нужна она тут.
 
Конференция "Базы" » Stream and AdoCommand [D7, MSSQL]
Есть новые Нет новых   [134473   +28][b:0][p:0.001]