Страница 1 из 1

Открыта ли форма?

Добавлено: 31 мар 2007, 10:58
santilaas
Привет всем!!!
СУБД - Fireburd 1.5.3, язык - Delphi, средство доступа - FIBPlus

Вопрос такой: с помощью компонента pFIBErrorHandler в DataModule стараюсь обработать все ошибки БД и на некоторые из них вывести свои сообщения.
НО!!! для 2-х форм (Form1, Form2) хочу сделать, чтобы для них выполнялся свой блок try ... except и выводились свои сообщения.
Т.е., другими словами, перед тем, как выполнять проверку того, какая ошибка произошла, проверить, произошла она в Form1 или Form2 и, если ни в одной из них обработать её по-своему.
Примечание: Form1 - форма подключения, которая закрывается до загрузки главной формы, Form2 - главная форма - не закрывается до окончания работы приложения. - притом здесь все гораздо сложнее - надо, чтобы свой блок try ... except выполнялся только при OnCreate главной формы, а на все остальные события выполнялся обработчик "onFIBErrorEvent".
Притом, где-то читал, что глобальные переменные вообще лучше не использовать.
Хотя для Form1 я при её закрытии писал Form1:= nil, а в обработчике "onFIBErrorEvent" писал

Код: Выделить всё

if Form1 = nil then
 тут пошли проверки на разного рода ошибки и мои сообщения
Но как в действительности правильно и особенно как быть с формой Form2 - подскажите, плз
Заранее спасибо!

Re: Открыта ли форма?

Добавлено: 07 апр 2007, 13:33
stix-s
santilaas писал(а):Привет всем!!!
СУБД - Fireburd 1.5.3, язык - Delphi, средство доступа - FIBPlus

Притом, где-то читал, что глобальные переменные вообще лучше не использовать.
Хотя для Form1 я при её закрытии писал Form1:= nil, а в обработчике "onFIBErrorEvent" писал

Код: Выделить всё

if Form1 = nil then
 тут пошли проверки на разного рода ошибки и мои сообщения
Но как в действительности правильно и особенно как быть с формой Form2 - подскажите, плз
Заранее спасибо!
1 документацию по FIBPlus перечитать, даже на великом и могучем есть
2 если я не вру, то что мешает менять собственный обработчик исключений
например:

Код: Выделить всё

procedure TdmBase.ErrorHandlerFIBErrorEvent(Sender: TObject;
  ErrorValue: EFIBError; KindIBError: TKindIBError; var DoRaise: Boolean);
begin
 Check_SRV_Error(ErrorValue);
 DoRaise:=false;
end;