Q&A

  • Re: Re: 승추니님의 답변에 추가...
안녕하세요. 델초봅니다.



제 생각으로는 승추니님께서 설명하신 내용 중 ApplicationOnException에서

처리를 하는 것이 좋을 것 같습니다.

try....except... 처리는 각각의 쿼리에 대해 작업을 해야 하는 불편이 있기때문이죠.

또한 어떤 종류의 에라인지 알기 위해서 try....except....에서도 에러메세지를

구해 표시를 해야 하니까요..



제가 지금 개발중인 프로그램 중 예외처리하는 부분입니다.

참고하세요..

메인폼에 코딩을 하시고, 에러메세지를 얻기 위해서는

uses절에 BDE를 선언하셔야 합니다.



public

{ Public declarations }

procedure AppException(Sender: TObject; E: Exception);



// DB 예외처리

procedure TFrmMain.AppException(Sender: TObject; E: Exception);

begin

if E is EDBEngineError then

with E as EDBEngineError do

begin

case Errors[0].ErrorCode of

DBIERR_KEYVIOL : ShowMessage('중복 자료 !');

DBIERR_REQDERR : ShowMessage('필드 값 필요 !');

DBIERR_OPTRECLOCKFAILED : ShowMessage('이미 변경된 자료 !');

end;

end;

if (Database.InTransaction) then

begin

if pos('Update',E.Message) > 0 then

ShowMessage('자료 변경을 실패했습니다 !')

else

ShowMessage(E.Message);

Database.Rollback;

end;

end;





그럼...



승추니 wrote:

> 김광철 wrote:

> > 존재하지 않는 Table을 Open하려고 하면 Error가 발생하면서,

> >

> > 프로그램이 다운되어버립니다.

> >

> > 존재하지 않는 Table을 접근하는 경우, 에러처리를 해줄수 있는 방법이

> >

> > 있을까요?

> >

> > query1.SQL.add('SELECT * from test');

> >

> > query1.open <- 이걸 하면 에러가 나더군요.

> >

> > test라는 table은 존재하지 않는 Table이구요. DB 오픈시 에러처리 방법을

> >

> > 알고 싶습니다.

>

> -------------------------------------------------

>

> 원하시는 답변인지는 몰겠지만여..^^"

>

> try..except뒤에 에러처리를 하심 젤루 무난하구여.

>

> 또다른 방법으로.

>

> Application이나 ApplicationEvents컴포넌트의 OnException에서

>

> EDBEngineError를 호출하여 워떠한 에러인지 알 수 있슴니다.

>

> 즐푸하세여..^^"

>

0  COMMENTS