Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Если ошибка соединения - закрыть приложение. Как это сделать? [D7, XP]


Dron2 ©   (2008-05-06 22:01:00) 

Уважаемые мастера!
Имеется СУБД. При возникновении ошибки соединения (по тем или иным причинам) с БД появляется несколько системных сообщений. Как сделать чтобы появлялось толко мое сообщение, например - "Ошибка соединения" и программа закрывалась?


Dron2   (2008-05-07 19:47:00) [1]

Огромное всем спасибо!!!
Соединил ответы Юрия Зотова и EGA23. Все заработало в лучшем виде!! Вы просто супер мастера!


Ega23   (2008-05-07 10:00:00) [2]


> А реализация метода TDMpas.LoginOK хде? :)


У Юры Зотова...  :))))


Рамиль   (2008-05-07 09:55:00) [3]


> Ega23 ©   (07.05.08 09:47) [10]

А реализация метода TDMpas.LoginOK хде? :)


Ega23   (2008-05-07 09:47:00) [4]


program .....;

uses
 .....
var hnd:THandle;
ss:string;

begin
 ss:=ExtractFileName(paramstr(0) );
 hnd:=CreateMutex(nil, false, PChar(ss) );
 if GetLastError = ERROR_ALREADY_EXISTS then
 begin
  Beep(100,200); //MessageBeep ->in WinProcs
  ReleaseMutex(hnd);
  Exit;
 end;

 Application.Initialize;

 Application.CreateForm(TDMpas, DMpas); // Создание датамодуля

 if not DMpas.LoginOK then
  begin
     DMpas.Free;
     DMpas:=nil;
     ReleaseMutex(hnd);
     Exit;
  end;

 Application.CreateForm(TFMain, FMain); // Создание главной формы

 Application.Run;
end.


Юрий Зотов   (2008-05-07 09:44:00) [5]


program Project1;

uses
 Forms,
 Unit1 in 'Unit1.pas' {Form1},
 Unit2 in 'Unit2.pas' {DataModule1: TDataModule};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TDataModule1, DataModule1);
 if not DataModule1.ConnectionError then
 begin
   Application.CreateForm(TForm1, Form1);
   Application.Run
 end
end.

===========================================

unit Unit2;

interface

uses
 SysUtils, Classes, Dialogs;

type
 TDataModule1 = class(TDataModule)
   procedure DataModuleCreate(Sender: TObject);
 private
   FConnectionError: boolean;
 public
   property ConnectionError: boolean read FConnectionError;
 end;

var
 DataModule1: TDataModule1;

implementation

{$R *.dfm}

procedure TDataModule1.DataModuleCreate(Sender: TObject);
begin
 try
   // Здесь - код соединения с БД. При ошибке возбуждаем исключение:
   raise Exception.Create('Ошибка соединения с БД');
 except
   on E: Exception do
   begin
     FConnectionError := True;
     ShowMessage(E.Message);
   end
 end
end;

end.


Рамиль   (2008-05-07 09:02:00) [6]


> >Application.Terminate
> тоже пробовал. не работает.

Не может не работать, ты просто не знаешь как оно работает.

У тебя точно в Design time все коннекты закрыты?


Dron2   (2008-05-07 07:52:00) [7]

>korneley ©   (06.05.08 22:43) [4]

>Обрабатывать исключения на этапе подключения, естесственно.
Try except это мне понятно. Беру участок кода где осуществляется соединение, а что написать после except чтобы завершить программу?
>Kolan ©   (07.05.08 00:10) [5]
>Application.Terminate
тоже пробовал. не работает.

>Германн ©   (07.05.08 01:24) [6]
>А зачем соединение осуществлять "в datamodule"?
Так ведь в datamodule все компоненты содинения с БД. Я всегда так делаю. Это неправильно?


Германн   (2008-05-07 01:24:00) [8]


> Dron2 ©   (06.05.08 22:22) [2]
>
> Соединение с БД осуществляется в datamodule, a он  создается
> раньше чем главная форма. Как поступить?
>

А зачем соединение осуществлять "в datamodule"?


Kolan   (2008-05-07 00:10:00) [9]

Aoolication.Terminate


korneley   (2008-05-06 22:43:00) [10]

Суецид приложения - halt(Code).

> Dron2 ©   (06.05.08 22:22) [2]
> Соединение с БД осуществляется в datamodule, a он  создается
> раньше чем главная форма. Как поступить?

 Обрабатывать исключения на этапе подключения, естесственно.


Dron2   (2008-05-06 22:36:00) [11]

Иначе говоря нужно прервать процесс создания форм и закрыть приложение если появилась ошибка соединения, без выдачи служебных сообщений об ошибке.


Dron2   (2008-05-06 22:22:00) [12]

Соединение с БД осуществляется в datamodule, a он  создается раньше чем главная форма. Как поступить?


Anatoly Podgoretsky   (2008-05-06 22:18:00) [13]

> Dron2  (06.05.2008 22:01:00)  [0]

Правильно не так, правильно убрать твое Супер сообщение.
А приложение можно закрыть, если закрыть главную форму.


Наверх

Титульная страница Поиск, карта сайта Написать письмо