-
Amir (07.03.12 14:18) [0]DELPHI7, ADO, MSSQL2000
Имеется хранимая процедура в
которой выполняется циклическая обработка данных
Declare crxxx cursor
....
fetch next xx, xx
while @@FETCH_STATUS = 0
....
if условие 1
RAISERROR ('Ошибка', 16, 1)
fetch next xx, xx
end
Вопрос :
Как выгрузить все сообщения об ошибках на клиент ?
если использовать код:
var
list : TStrings;
i: integer;
begin
list := TStringList.Create;
with ADOcommand do
try
commandtext = 'EXEC ХП'
execute
except
for i := 0 to ADOConnection.Errors.Count - 1 do
list.Add (ADOConnection.Errors[i].Description);
end
end;
возвращается только первый RAISERROR, а их может быть несколько
ADOCommand.ExecuteOptions := [eoAsyncExecute] - на клиент возвращается 0 строк
ADOCommand.ExecuteOptions := [eoAsyncFetch] - на клиент возвращается 1 строка -
попробуй поставь серверный курсор... не помню где, давно занимался. или поищи старое, приводил тут код как то. способов больше чем 1.
-
Amir (07.03.12 16:02) [2]пробовал ставить в ADOConnection серверый курсор - не помогло
нашел такой вот код:
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
ra: OleVariant;
rs: _Recordset;
str: String;
begin
str :=
"print ""proba pera1"""#10#13+
"print ""proba pera2"""#10#13+
"print ""proba pera3""";
rs := ADOConnection1.Execute(str);
repeat
for i:=0 to ADOConnection1.Errors.Count-1 do
ShowMessage(ADOConnection1.Errors.Item[i].Description);
if rs <> nil then
rs := rs.NextRecordset(ra);
until (rs = nil);
end;
- также выводится 1 сообщение, а при запуске ХП из Query Analizer их 4,
а как отловить сообщения со степенью серьезности 1 ? :
RAISERROR ('Ошибка', 1, 1) -
> нашел такой вот код:
а полностью ветку прочитать и осмыслить?
http://www.delphimaster.net/view/3-1106639334
там есть, что и куда.