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

Вниз

Обработка ошибок ADO   Найти похожие ветки 

 
chexum   (2003-07-02 15:53) [0]

У меня на таблице висит триггер на обновление и хранимая процедура, которая делает обновление в таблице.
И в триггере и в процедуре выполняется RAISERROR.
Если запустить процедуру в Query Analyzer, то он выводит результат обоих RAISERROR. Усли запустить из Delphi (ADOStoredProc), то выводится сообщение только первого RAISERROR.
Подскажите, как получить список всех ошибок?

На всякий случай код:

CREATE TRIGGER u_test ON dbo.test
FOR UPDATE
AS
BEGIN
RAISERROR ("error in trigger u_test", 16, 1)
END


CREATE PROCEDURE sp_test AS
BEGIN
UPDATE test SET test=""
IF (@@ERROR <> 0) RAISERROR ("error in procedure sp_test", 16, 1)
END


procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
try
ADOStoredProc.ExecProc;
except
for i := 0 to AdoConnection.Errors.Count-1 do
ShowMessage(AdoConnection.Errors[i].Description);
end;
end;


Если выполнить в QA, то получаю:
Server: Msg 50000, Level 16, State 1, Procedure u_test, Line 5
error in trigger u_test

(3 row(s) affected)

Server: Msg 50000, Level 16, State 1, Procedure sp_test, Line 4
error in procedure sp_test


 
sniknik ©   (2003-07-02 15:59) [1]

есть список ADOConnection1.Errors[] но не всегда заполняется, при локальных курсорах список не передается.


 
chexum   (2003-07-02 16:15) [2]

to sniknik
> есть список ADOConnection1.Errors[]
Я в клиенте просматриваю Errors, но там только первая ошибка.
> при локальных курсорах список не передается
ты имеешь ввиду CursorLocation = clUseClient?


 
sniknik ©   (2003-07-02 16:31) [3]

> ты имеешь ввиду CursorLocation = clUseClient?
ага, поставь везде clUseServer. поэксперементируй.


 
chexum   (2003-07-02 17:08) [4]

Поэкспеременитровал. Результат тот же :(
Какие еще идеи будут?


 
sniknik ©   (2003-07-02 18:09) [5]

но одну ошибку видиш? значит почти правильно :о))

попробуй для каждого рекордсетя получать список (возможно они в разных возвращаются)
типа


Recordset: _Recordset;
V: OleVariant;
begin
st:= RichEdit1.Lines.GetText;

Recordset:= ADOConnection1.Execute(st);
while not (stOpen in ADOConnection1.State) do;

for i:= 0 to ADOConnection1.Errors.Count-1 do
Memo1.Lines.Add(ADOConnection1.Errors[i].Description);

Recordset:= Recordset.NextRecordset(V);
for i:= 0 to ADOConnection1.Errors.Count-1 do
Memo1.Lines.Add(ADOConnection1.Errors[i].Description);


и так до тех пор пока NextRecordset не вернет ошибку (коней рекордсетам)


 
sniknik ©   (2003-07-02 18:10) [6]

:))) коней = конец (а то ускачут нафиг :о))))


 
chexum   (2003-07-03 10:10) [7]

NextRecordset сразуже вернул ошибку. Выходит, только один рекордсет есть?
и еще вопрос:
while not (stOpen in ADOConnection1.State) do;
Для чего это надо?


 
sniknik ©   (2003-07-03 12:35) [8]

> NextRecordset сразуже вернул ошибку. Выходит, только один рекордсет есть?
смотря какая ошибка. вобще то если множественный рекордсет поддерживается (MSSQL) и их там несколько ошибки быть не должно (это я ошибся :-(, у меня разные провайдеры и обрабатываю "в общем" nil в except присваиваю дальше по нему проверка) в случае с MSSQL просто на возврат nil надо проверку ставить.


> while not (stOpen in ADOConnection1.State) do;
> Для чего это надо?
ждет пока запрос не завершится, (при серверном курсоре или асинхронном запросе, лутше конечно событие обрабатывать.)

попробуй (если события не возникают то курсор не тот)

procedure TForm1.ADOConnection1InfoMessage(Connection: TADOConnection;
const Error: Error; var EventStatus: TEventStatus);
begin
Memo1.Lines.Add(Error.Description);
end;

procedure TForm1.ADOConnection1ExecuteComplete(Connection: TADOConnection;
RecordsAffected: Integer; const Error: Error;
var EventStatus: TEventStatus; const Command: _Command;
const Recordset: _Recordset);
begin
Memo1.Lines.Add(Error.Description);
end;



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

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

Наверх




Память: 0.49 MB
Время: 0.025 c
3-77793
Empleado
2003-07-01 16:38
2003.07.24
ADO и Treading Model (в Мидасе)


1-77903
SVN17
2003-07-11 15:18
2003.07.24
Обработчик сообщений


8-78000
Deus
2003-03-31 03:39
2003.07.24
Как реализовать Magic Wand?


9-77704
Antichacker
2003-01-31 10:21
2003.07.24
Существует ли какая-либо документация по GLScene?(Eng)


1-77913
jjiura
2003-07-09 23:22
2003.07.24
Подскажите Grid?