Q&A

  • DBengine error처리 어떻게 하나요? 도와주세요 ^^
델파이로 입력화면을 짜는데

구체적으로

보험 기준을 입력하는 화면에서 기준년도를 넣고 각 항목의 기준을 넣어야 하는데

기준년도가 primary key로 설정(DB상에)이 되어 있습니다.

테스트를 해보다 보니까 primary key로 설정된 기준년도(edit)에 이미 기준으로 등록된 기준년도를 넣으면 델파이에서 제공한 에러 메세지가 뜨던군요.

(지금 제가 설명을 잘 하고 있는지 모르겠어요..죄송 죄송)



exception class EDBEngineError with message 'Key vialation.

ORA-00001:무결성 제약 조건(INSA.PK_T1004001)에 위배됩니다.'



이런 에러 메세지를 제가 원하는 에러 메세지로 바꾸고 싶은데 어떻게 해야 되나요?

어는 부분에 에러 메세지를 넣어야 할 지도 모르겠고..

책에 에러 상황 처리라는 부분을 읽어 봐도 잘 모르겠어요.



아시는 분 어는 부분에 어떻게 처리해야 하는지 알려주세요.

부탁드립니다.



그럼 모두를 수고하세여~~







3  COMMENTS
  • Profile
    문홍철 2000.06.10 21:50
    const

    eKeyViol = 9729; //Key값 중복

    eNotNull = 9732; //eRequiredFieldMissing이 원래 상수명

    var

    iDBIError : integer;

    sDBIError : string;



    begin

    DataBase1.StartTransaction; //데이터베이스에 트랜잭션 걸구여 이미 걸려있는지

    //확인해도 좋구요

    try

    여기서 지지고 볶는다.; //필요한 작업을 한다.

    DataBase1.Commit; //정상적이면 DB에 반영

    except

    on E : EDBEngineError do //비정상일때

    begin

    DataBase1.Rollback; //다 뱃어내고 철자가 맞나..?



    //내가 원하는 메세지는 보여준다.

    //에러 코드에 따라..

    //실행환경에서는 이메세지가 나옴

    //디버깅에서는 처음은 원래메세지 두번째는 이메서지가 나옴

    //그말이 그말인가.?

    iDBIError := (E as EDBEngineError).Errors[0].ErrorCode;

    sDBIError := (E as EDBEngineError).Errors[0].Message;



    if(iDBIError = eKeyViol) then

    begin

    Application.MessageBox('중복되는 레코드가 있습니다...!', '저장실패',

    mb_OK + mb_IconError);

    end

    else

    begin

    Application.MessageBox(PChar(IntToStr(iDBIError) + ' : ' +

    sDBIError + #13 + '저장 오류입니다...!'), '저장실패',

    mb_OK + mb_IconError);

    end;

    EXIT; 다음으로 안가게 빠져나옴..



    end;

    end;

    end;

    저는 이렇게 사용합니다.

    도움이 되었으면..!

  • Profile
    타락천사 2000.06.10 21:17
    안녕하세여.. 타락임다..^^



    왠쥐, 갈쳐 주고 싶네여..ㅠㅠ



    질문 내용은 이해하겠는데 몰 하겠다는건지 모르겠군여..ㅠㅠ



    에러 메세지를 무시하고 화면에 뜨지 않는 방법을 물었나여?



    아님, 에러메세지를 ..님이 원하는 에러 메세지로 바꾸고싶나여?



    아님, 에러메세지를 예외로 만들구 싶나여? ^^



    피곤하지만, ..님 질문은 꼭! 자세히 대답해 드릴께여..^^



    글구 에러나는 라인도 같이 보여주세여..ㅠㅠ



    왕초보 타락천사..^_____^



    델빠리초보 wrote:

    > 델파이로 입력화면을 짜는데

    > 구체적으로

    > 보험 기준을 입력하는 화면에서 기준년도를 넣고 각 항목의 기준을 넣어야 하는데

    > 기준년도가 primary key로 설정(DB상에)이 되어 있습니다.

    > 테스트를 해보다 보니까 primary key로 설정된 기준년도(edit)에 이미 기준으로 등록된 기준년도를 넣으면 델파이에서 제공한 에러 메세지가 뜨던군요.

    > (지금 제가 설명을 잘 하고 있는지 모르겠어요..죄송 죄송)

    >

    > exception class EDBEngineError with message 'Key vialation.

    > ORA-00001:무결성 제약 조건(INSA.PK_T1004001)에 위배됩니다.'

    >

    > 이런 에러 메세지를 제가 원하는 에러 메세지로 바꾸고 싶은데 어떻게 해야 되나요?

    > 어는 부분에 에러 메세지를 넣어야 할 지도 모르겠고..

    > 책에 에러 상황 처리라는 부분을 읽어 봐도 잘 모르겠어요.

    >

    > 아시는 분 어는 부분에 어떻게 처리해야 하는지 알려주세요.

    > 부탁드립니다.

    >

    > 그럼 모두를 수고하세여~~

    >

    >

    >

  • Profile
    유레카 2000.06.10 20:01
    DB에서 primary Key는 유일한 값으로 정해야 하는데 아래와 같은 Key vialation(키 충돌이라고 하는)에러는 이 유일성에 위배가 된다는 메시지죠. P.K로 설정하신값이 유일성을 지원하지 않는 다는말입니다..

    그 테이블에서 유일한 값이 되는 필드를 P.k로 설정하면 해결될 겁니다..

    도움이 되길..



    델빠리초보 wrote:

    > 델파이로 입력화면을 짜는데

    > 구체적으로

    > 보험 기준을 입력하는 화면에서 기준년도를 넣고 각 항목의 기준을 넣어야 하는데

    > 기준년도가 primary key로 설정(DB상에)이 되어 있습니다.

    > 테스트를 해보다 보니까 primary key로 설정된 기준년도(edit)에 이미 기준으로 등록된 기준년도를 넣으면 델파이에서 제공한 에러 메세지가 뜨던군요.

    > (지금 제가 설명을 잘 하고 있는지 모르겠어요..죄송 죄송)

    >

    > exception class EDBEngineError with message 'Key vialation.

    > ORA-00001:무결성 제약 조건(INSA.PK_T1004001)에 위배됩니다.'

    >

    > 이런 에러 메세지를 제가 원하는 에러 메세지로 바꾸고 싶은데 어떻게 해야 되나요?

    > 어는 부분에 에러 메세지를 넣어야 할 지도 모르겠고..

    > 책에 에러 상황 처리라는 부분을 읽어 봐도 잘 모르겠어요.

    >

    > 아시는 분 어는 부분에 어떻게 처리해야 하는지 알려주세요.

    > 부탁드립니다.

    >

    > 그럼 모두를 수고하세여~~

    >

    >

    >