![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сообщение RAISERROR из ХП показать пользователю на экране?
vv_fran © (2011-05-23 12:09:00)Как сообщение RAISERROR из ХП показать пользователю на экране? У меня SQL Server, Делфи и UniDac компоненты.
В ХП:
IF (@N IS NULL)
BEGIN
SET @N = 0;
RAISERROR('Такого кода нет!',1,1);
END ELSE BEGIN
......
Polevi (2011-05-25 17:27:00) [1]sql server начиная с 2005 версии поддерживает конструкции BEGIN TRY, BEGIN CATCH, и ф-ии ERROR_NUMBER(), ERROR_MESSAGE(), etc
Ega23 (2011-05-23 13:30:00) [2]
> будут критиковать сейчас, и правильно сделают. Жду.
raiserror хорош для жесткого отката транзакции, как внутри ХП, так и на клиенте.
В остальных случаях лично я по методу Влада пользовался.
OW (2011-05-23 13:04:00) [3]будут критиковать сейчас, и правильно сделают. Жду.
(юзаю не комманд, а квери. Пусть бульдозеро-экскаватор, но все же и бульдозер и экскаватор
и привык :) )
далее пишу все свои процедуры как 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 (2011-05-23 12:33:00) [4]
try
ADOCommand.Execute;
except on E: Exception do
ShowMessage(E.Message);
end;
?