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

Вниз

Серьёзный вопрос: отображение текста 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
3-93390
pashtet
2003-12-30 14:13
2004.01.29
TtreeView


3-93356
Holy
2004-01-03 11:00
2004.01.29
Триггеры в IBase


1-93571
Term
2004-01-13 16:14
2004.01.29
Нужна документация по написанию интерпретаторов


7-93719
Владимир Березин
2003-11-10 21:49
2004.01.29
Призраки в корзине


14-93693
Nous Mellon
2004-01-06 12:22
2004.01.29
Видеоголоволомка :)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский