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

Вниз

Если ошибка соединения - закрыть приложение. Как это сделать?   Найти похожие ветки 

 
Dron2   (2008-05-06 22:01) [0]

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


 
Anatoly Podgoretsky ©   (2008-05-06 22:18) [1]

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

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


 
Dron2 ©   (2008-05-06 22:22) [2]

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


 
Dron2 ©   (2008-05-06 22:36) [3]

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


 
korneley ©   (2008-05-06 22:43) [4]

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

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

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


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

Aoolication.Terminate


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


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

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


 
Dron2 ©   (2008-05-07 07:52) [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 09:02) [8]


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

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

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


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


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.


 
Ega23 ©   (2008-05-07 09:47) [10]


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:55) [11]


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

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


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


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


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


 
Dron2 ©   (2008-05-07 19:47) [13]

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



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

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

Наверх




Память: 0.5 MB
Время: 0.018 c
2-1210225173
AndrewG
2008-05-08 09:39
2008.06.01
Винт


2-1209915866
223001
2008-05-04 19:44
2008.06.01
здравствуйте уважаемые мастера


8-1181025343
karton
2007-06-05 10:35
2008.06.01
Как правильно рисовать с GetDC(0)


15-1208497739
Дмитрий С
2008-04-18 09:48
2008.06.01
Большой ресурс. Правильно ли?


2-1210656268
Matveih1
2008-05-13 09:24
2008.06.01
Как правильно зарегестрировать класс.