Конференция "Базы" » Как сообщение RAISERROR из ХП показать пользователю на экране?
 
  • vv_fran (23.05.11 12:09) [0]
    Как сообщение RAISERROR из ХП показать пользователю на экране? У меня SQL Server, Делфи и UniDac компоненты.
    В ХП:

    IF (@N IS NULL)
    BEGIN
    SET @N = 0;
    RAISERROR('Такого кода нет!',1,1);
    END ELSE BEGIN
    ......
  • Ega23 © (23.05.11 12:33) [1]
    try
     ADOCommand.Execute;
    except on E: Exception do
     ShowMessage(E.Message);
    end;



    ?
  • OW © (23.05.11 13:04) [2]
    будут критиковать сейчас, и правильно сделают. Жду.
    (юзаю не комманд, а квери. Пусть бульдозеро-экскаватор, но все же и бульдозер и экскаватор
    и привык :) )

    далее пишу все свои процедуры как select

    IF (@N IS NULL)
    BEGIN
    Select -1 as MyRes, 'Такого кода нет' as Becouse
    return

    и в конце
    select 0 as MyRes, 'ok' as Becouse

    потом после вызова любой процедуры (а теперь всегда надо делать Open, а не Exec, т.к. все мои процедуры что-то возвращают) MyRes сравниваем с 0 и показываем/пишем в лог Becouse

    Function ExecProc(Q : tADOQuery; Var S : string): integer;
    begin
     Q.Open;
     S :=  Q.FieldByName('Becouse').AsString;
     Result := Q.FieldByName('MyRes').AsInteger;
    end;

    qQ.sql.text := 'exec MyProc';
    if ExecProc(qQ, sTmp) <> 0
      then ShowMessage(sTmp);
  • Ega23 © (23.05.11 13:30) [3]

    > будут критиковать сейчас, и правильно сделают. Жду.

    raiserror хорош для жесткого отката транзакции, как внутри ХП, так и на клиенте.
    В остальных случаях лично я по методу Влада пользовался.
  • Polevi © (25.05.11 17:27) [4]
    sql server начиная с 2005 версии поддерживает конструкции BEGIN TRY, BEGIN CATCH, и ф-ии ERROR_NUMBER(), ERROR_MESSAGE(), etc
 
Конференция "Базы" » Как сообщение RAISERROR из ХП показать пользователю на экране?
Есть новые Нет новых   [134431   +13][b:0][p:0.001]