안녕하세요. 델초봅니다.
제 생각으로는 승추니님께서 설명하신 내용 중 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를 호출하여 워떠한 에러인지 알 수 있슴니다.
>
> 즐푸하세여..^^"
>