Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];

Вниз

Обработка ошибок 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.009 c
1-77910
Khloo
2003-07-10 12:19
2003.07.24
Как создать отчёт из таблицы для печати...


1-77917
FiendAndre
2003-07-10 10:34
2003.07.24
Перекодировка текста win-to-dos


14-78134
Alexey
2003-07-09 10:20
2003.07.24
Web Server


1-77995
Юрий Федоров
2003-07-11 14:14
2003.07.24
Проверка, абстрактный ли метод


3-77726
McSimm2
2003-06-30 10:00
2003.07.24
---|Ветка была без названия|---





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский