Q&A

  • IB 에러처리가 안되요.. (try.. except...)
인터베이스를 사용하고 BDE필요없이 IBExpress컴포넌트들을 사용합니다.

그런데 예외상황처리를 하려고 하니 원하는 메시지박스가 뜨질 않네요

그냥 지나가 버립니다.

에러 발생시점은 unique한 필드에 중복 값을 넣었을때 메시지를 뿌려주려고 하거든요...

이것을 어떻게 해결 해야할지...

참고로 uses절에 IB 추가시켰습니다.



uses IB;

.

.

.



try

query1.ApplyUpdates;

except on EIBInterBaseError do

begin

showmessage('중복에러');

end;

end;







4  COMMENTS
  • Profile
    코스엑스 2001.10.04 22:34
    초보 wrote:

    > 인터베이스를 사용하고 BDE필요없이 IBExpress컴포넌트들을 사용합니다.

    > 그런데 예외상황처리를 하려고 하니 원하는 메시지박스가 뜨질 않네요

    > 그냥 지나가 버립니다.

    > 에러 발생시점은 unique한 필드에 중복 값을 넣었을때 메시지를 뿌려주려고 하거든요...

    > 이것을 어떻게 해결 해야할지...

    > 참고로 uses절에 IB 추가시켰습니다.

    >

    > uses IB;

    > .

    > .

    > .

    >

    > try

    > query1.ApplyUpdates;

    > except on EIBInterBaseError do

    > begin

    > showmessage('중복에러');

    > end;

    > end;

    >

    익셉션 메세지가 틀린것 같군여.. Duplicate uniq key writing 에대한

    에러리턴 및 익셉션 메세지를 알아야 합니다.

    중복체크는 업데잇하시기전에 미리체크하시는방법이

    좋을듯 싶군요.



  • Profile
    초보 2001.10.04 22:50
    답변에 감사드립니다... ^^

    우선 님께서 Duplicate uniq key writing 에대한

    에러리턴 및 익셉션 메세지를 알아야 한다고 하셨는데 어디서 알 수 있죠?

    그리고 try except 구문에 더 추가해야할 부분이 있나요?

    한가지 더 업데이트 하기전에 중복 체크를 먼저 하라고 하셨는데

    테이블에 같은 값이 있는지 셀렉트 해보구 중복여부를 판단하라는 말씀이신지..?

    저는 DB에 unique 제약을 주고 실제 업데이트시에 에러를 바로 캐치해서 메시지 뿌려주려고 하거든요...

    다시한번 초보에게 상세한 답변을 주시면 감사하겠습니다.









    코스엑스 wrote:

    > 초보 wrote:

    > > 인터베이스를 사용하고 BDE필요없이 IBExpress컴포넌트들을 사용합니다.

    > > 그런데 예외상황처리를 하려고 하니 원하는 메시지박스가 뜨질 않네요

    > > 그냥 지나가 버립니다.

    > > 에러 발생시점은 unique한 필드에 중복 값을 넣었을때 메시지를 뿌려주려고 하거든요...

    > > 이것을 어떻게 해결 해야할지...

    > > 참고로 uses절에 IB 추가시켰습니다.

    > >

    > > uses IB;

    > > .

    > > .

    > > .

    > >

    > > try

    > > query1.ApplyUpdates;

    > > except on EIBInterBaseError do

    > > begin

    > > showmessage('중복에러');

    > > end;

    > > end;

    > >

    > 익셉션 메세지가 틀린것 같군여.. Duplicate uniq key writing 에대한

    > 에러리턴 및 익셉션 메세지를 알아야 합니다.

    > 중복체크는 업데잇하시기전에 미리체크하시는방법이

    > 좋을듯 싶군요.

    >

  • Profile
    코스엑스 2001.10.05 00:02
    초보 wrote:

    > 답변에 감사드립니다... ^^

    > 우선 님께서 Duplicate uniq key writing 에대한

    > 에러리턴 및 익셉션 메세지를 알아야 한다고 하셨는데 어디서 알 수 있죠?

    > 그리고 try except 구문에 더 추가해야할 부분이 있나요?

    > 한가지 더 업데이트 하기전에 중복 체크를 먼저 하라고 하셨는데

    > 테이블에 같은 값이 있는지 셀렉트 해보구 중복여부를 판단하라는 말씀이신지..?

    > 저는 DB에 unique 제약을 주고 실제 업데이트시에 에러를 바로 캐치해서 메시지 뿌려주려고 하거든요...

    > 다시한번 초보에게 상세한 답변을 주시면 감사하겠습니다.



    일단 익셉션을 캐치하고 무슨 익셉션인지 알아야 겠져...

    EIBinterbaseError 는 모든 에러를 리턴합니다..이것가지고는

    키바이올레이션인지.. 다른 에러인지 모릅니다.

    IB 에러에 대한건 IBErrorCodes.pas 에 정의 돼어있구여..

    키바이올레이션은 SQLCode 로 -803 이더군여..

    위의 익셉션 루틴을 다시 구성해보면..

    except on E: EIBinterbaseError do

    case E.SQLCode of

    -803 : raise exception.Create('중복키군여');

    -다른SQLCode : raise exception.Create('다른 에러군여');

    else : raise exception.Create('에러났읍다');

    end;

    end;

    식으로 구성하시면 됩니다.



    미리조사하라는거는.. 다른 쿼리를 만들어서 간단한 펑션 쓰면 편합니다.

    function isDupeKey(Key : string) : boolean;

    begin

    with Query2 do

    begin

    SQL.Clear;

    SQL.Add('select pkey from mytable where pkey = ' + key);

    Open;

    Result := not EOF;

    Close;

    end;



    이런식으로 만들어서 인서트 루틴 돌리기전에

    if isDupeKey('123') then ShowMessage('중복키') else RunMyInsertRoutine;



  • Profile
    초보 2001.10.05 00:56
    님의 자세한 답변에 감사드려요...

    다시함 해보겠습니다.

    행복하세요.. ^^