Главная страница
    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
1-93427
lhs7fy
2004-01-15 16:14
2004.01.29
Положение курсора над компонентом


6-93594
Micah'GF
2003-11-25 17:40
2004.01.29
socket не хочет давать сокет


1-93573
a123
2004-01-17 09:35
2004.01.29
ActionMainMenuBar


1-93500
sohat
2004-01-19 09:15
2004.01.29
как поменять кодировку в TMemo?


1-93480
maxXP
2004-01-15 17:46
2004.01.29
Как в listbox определить количество существующих элементов?





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