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

Вниз

Серьёзный вопрос: отображение текста Exception после Suspend;   Найти похожие ветки 

 
VID ©   (2004-01-02 03:04) [0]

Допустим есть хранимая процедура P1 (один выходной параметр OUT_ID), и исключение E1 (с каким-нибудь текстом):

begin
OUT_ID = -1;
Suspend;
Exception E1;
end /*Конец процедуры*/


У меня FIBPlus 4.8.0
При вызове этой процедуры методом
Select "OUT_ID" from P1 я получаю в качестве возвращаемого результата OUT_ID равный -1, но не вижу текста сообщения об ошибке!

Вызов процедуры происходит так

function CreateQ (var aIBDB:TpFIBDatabase; aSQL: string): TpFIBQuery;
begin
Result := nil;
IF aIBDB = nil then Exit;
result:= TpFIBQuery.Create(aIBDB);
result.options:=[qoStartTransaction];
result.database:=aIBDB;
Result.Transaction:=aIBDB.DefaultTransaction;
result.SQL.Text:=aSQL;
Result.GoToFirstRecordOnExecute := True;
result.tag:=Integer(result);
end;

// а вот сам вызов
With CreateQ(IBDB, "Select "OUT_ID" from P1") do
try
try
ExecQuery;
Transaction.CommitRetaining;
ShowMessage(FieldByName["OUT_ID"].AsString);
Except
on E:Exception do ShowMessage(E.Message);
end;
finally
Free;
end;


Т.е. по логике вещей, я должен был увидеть сообщение об ошибке!

Что интересно в IBExpert при выполнении такого же запроса, средствами его SQL-редактора, всё работает корректно: возвращается результат ХП, а также отображается сообщение об ошибке.

Что и как надо сделать что бы была возможность отображения текста Exception после вызова Suspend; ?


 
kaif ©   (2004-01-03 01:00) [1]

Может быть дело в однократности Fetch ?
Может быть попробовать:
try
ExecQuery;
Fetch; //что-то в этом духе. Я с FIB не работал...
Transaction.CommitRetaining;
ShowMessage(FieldByName["OUT_ID"].AsString);
Except
on E:Exception do ShowMessage(E.Message);
end;

Хотя странно это все.


 
VID ©   (2004-01-04 14:25) [2]

В-общем... проблема была действительно сложной, пришлось на два часа впасть в транс :) зато потом всё-таки нашёл выход из довольно-таки паршивой ситуации.

А вообще вот что скажу: Когда в TpFIBDataSet (fibplus 4.8.0) в Insert-SQL пишешь такой скрипт:
Select "OUT_ID" FROM INSERTTOTABLE1(:F1, :F2, :F3);
то возвращается именно ПЕРВАЯ строка результатов этого запроса.

А Ведь действительно, для того что бы появился текст EXCEPTION надо после выполнения запроса реализовать fetch. Т.е. в TpFIBQuery конечно нет метода fetchall но его аналогом может быть код

while not eof do next;

и таким образом код должен выглядеть так

try
ExecQuery;
Transaction.CommitRetaining;
ShowMessage(FieldByName["OUT_ID"].AsString);
While not EOF do Next; //Для того что бы дело дошло до появления текста EXCEPTION.
Except
on E:Exception do ShowMessage(E.Message);
end;


Лично я склонен считать такую реализуцию Select-запросов в INSERT-SQL глюком. Может быть в 5х версиях фибов это исправлено, а может они и не считают это ошибкой...

Так или иначе проблема решена. Всем спасибо за внимание.



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

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

Наверх




Память: 0.47 MB
Время: 0.011 c
3-93380
sashok
2003-12-30 11:12
2004.01.29
Локальные базы данных


4-93732
voe
2003-11-22 03:10
2004.01.29
Запуск exe файла...


7-93704
Balkon
2003-11-13 10:01
2004.01.29
Как определить коорд. видимой части экрана, не закрытой Taskbar?


14-93647
sapsi
2003-12-31 14:29
2004.01.29
Запрет работы приложения


9-93318
inc-viz
2003-07-11 19:43
2004.01.29
Продвинутые спрайты..Delphix