델파이로 입력화면을 짜는데
구체적으로
보험 기준을 입력하는 화면에서 기준년도를 넣고 각 항목의 기준을 넣어야 하는데
기준년도가 primary key로 설정(DB상에)이 되어 있습니다.
테스트를 해보다 보니까 primary key로 설정된 기준년도(edit)에 이미 기준으로 등록된 기준년도를 넣으면 델파이에서 제공한 에러 메세지가 뜨던군요.
(지금 제가 설명을 잘 하고 있는지 모르겠어요..죄송 죄송)
exception class EDBEngineError with message 'Key vialation.
ORA-00001:무결성 제약 조건(INSA.PK_T1004001)에 위배됩니다.'
이런 에러 메세지를 제가 원하는 에러 메세지로 바꾸고 싶은데 어떻게 해야 되나요?
어는 부분에 에러 메세지를 넣어야 할 지도 모르겠고..
책에 에러 상황 처리라는 부분을 읽어 봐도 잘 모르겠어요.
아시는 분 어는 부분에 어떻게 처리해야 하는지 알려주세요.
부탁드립니다.
그럼 모두를 수고하세여~~
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;
저는 이렇게 사용합니다.
도움이 되었으면..!