Q&A

  • db연결시 에러발생 선점하는 방법...
항상 질문만을 일삼는 초보개발자 입니다.
이번에 개발하는 프로그램은 자체 서버에 접속되어 작업을 하다가
한 프로그램에서는  발생되는 자료를 자체 서버 뿐만아니라 다른쪽(다른지역) 서버의 테이블에도 저장하는 프로그램을 만들고 있습니다.
다른지역서버에 연결을 할 수 없을때 발생하는 에러를 선점하여 일련의 작업을 처리하려 하는데 아래와 같이 해도 에러문을 선점 할수 없어 이렇게 도움을 청합니다.

OnActivate event에 다음과 같이 코딩을 했지만
여전히 에러메세지와 함께 프로그램이 종료가 되버리네요.ㅠ.ㅠ
(에러발생 상황은 아이피를 다르게 주어서 서버에연결할 수없는 상황을 만들었습니다, 에러메세지는 '호스트 확장명이 존재하지 않습니다...'이고요)
서버라인이 안정적이지 못해서 꼭 처리해야 할 부분인데 미치겠네요...

  Try
    if not DataBase1.Connected then
      DataBase1.Connected := True;
  Except
    ON E: Exception do
    begin
       ShowMessage('서버에 연결 할 수 없습니다...');
      DataBase1.Connected := false;
    end;
2  COMMENTS
  • Profile
    Delphi Kim 2003.02.26 06:12
    이러면 어떨까요!

    다른 쪽 서버쪽에 Ping을 쏴서 안가면 에러처리를 하시면 될 듯 하군요!

    델파이 컴포넌트 있는 ICMP 컴포넌트를 사용해 보세요
    var
    PingList : String;

    procedure TForm1.ICMPReply(ASender: TComponent;
      const ReplyStatus: TReplyStatus);
    var
      sTime: string;
    begin
      If (ReplyStatus.MsRoundTripTime = 0) then
      sTime := '<1'
      Else
      sTime := '=';
      PingList := Format('%d ',[ReplyStatus.BytesReceived]);
    end;

    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      k: integer;
      ping1 : String;
    begin
      ICMP.OnReply := ICMPReply;
      ICMP.ReceiveTimeout := 500;
      ping1 := '192.1.1.1';

      try
      ICMP.Host := ping1;
      For k := 1 To 2 Do
      Begin
      ICMP.Ping;
      Application.ProcessMessages;
      End;
      Except
      Begin
      ICMP.Ping;
      Application.ProcessMessages;
      End;
      End;

      If Copy(PingList,1,1) <> '0' Then
      Begin
        DM.Form_DBS.Connected := True;
        Edit1.Text := '접속가능';
        Edit1.Font.Color := Clblue;
      End
      Else
      Begin
        DM.Form_DBS.Connected := False;
        Edit1.Text := '접속불능';
        Edit1.Font.Color := ClRed;
      End;
    end;

    procedure TForm1.ICMPReply(ASender: TComponent;
      const ReplyStatus: TReplyStatus);
    var
      sTime: string;
    begin
      If (ReplyStatus.MsRoundTripTime = 0) then
      sTime := '<1'
      Else
      sTime := '=';
      PingList := Format('%d ',[ReplyStatus.BytesReceived]);
    end;




  • Profile
    김건림 2003.02.26 21:28