항상 질문만을 일삼는 초보개발자 입니다.
이번에 개발하는 프로그램은 자체 서버에 접속되어 작업을 하다가
한 프로그램에서는 발생되는 자료를 자체 서버 뿐만아니라 다른쪽(다른지역) 서버의 테이블에도 저장하는 프로그램을 만들고 있습니다.
다른지역서버에 연결을 할 수 없을때 발생하는 에러를 선점하여 일련의 작업을 처리하려 하는데 아래와 같이 해도 에러문을 선점 할수 없어 이렇게 도움을 청합니다.
OnActivate event에 다음과 같이 코딩을 했지만
여전히 에러메세지와 함께 프로그램이 종료가 되버리네요.ㅠ.ㅠ
(에러발생 상황은 아이피를 다르게 주어서 서버에연결할 수없는 상황을 만들었습니다, 에러메세지는 '호스트 확장명이 존재하지 않습니다...'이고요)
서버라인이 안정적이지 못해서 꼭 처리해야 할 부분인데 미치겠네요...
Try
if not DataBase1.Connected then
DataBase1.Connected := True;
Except
ON E: Exception do
begin
ShowMessage('서버에 연결 할 수 없습니다...');
DataBase1.Connected := false;
end;
다른 쪽 서버쪽에 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;