Q&A

  • 예외처리문제인데 꼭 좀 봐주세요....


정말로 힘드네요.. 아무리 찾아보고 해보아도 도저히 알 수가 없네요..

지금 3주째 같은 문제로 씨름 하고 있습니다. 다시 한번만 더 도와주십시요…

2가지 질문이 있는데 꼭 좀 알려 주십시요…부탁드립니다.



질문 1 .

DataBase : Paradox7

Table Field Name : Num, Card, Name….

컴포넌트 : Query1, DataSource1, UpDateSQL1. DBGrid1 등등



UpDateSQL에서 Num만 Primary Key로 설정되어 있습니다.

DataBase Table에서도 Num만 Key로 설정되어 있습니다.



Data를 DBGrid에서 직접 입력하고 삭제하고 있습니다.

필드명중 Num은 유일한 값을 가져야 합니다. (자동증가번호 아님)



저장버턴을 통해 예외처리를 하려고 합니다.



// 저장하기 버턴

procedure TForm1.Button1Click(Sender: TObject);

begin

try

with Query1 do begin

ApplyUpdates;

CommitUpdates;

Close;

Open;

end;

except on E:EDBEngineError do begin

if pos('Key Violation.',E.Errors[0].Message)>0 then

ShowMessage('중복');

Query1.CancelUpdates;

end;

end;

end;

중복데이타 입력 실행시 EDBEnginError with message 'Key violation.' 발생시킴



제 의도는 저장할 때 Num에 중복된 데이터가 입력되어 저장될 경우 메시지를 나타내고 저장 명령을 최소할려고 하는데 전혀 안되네요..



질문 2. (아주중요...***************************************)

혹시 Tap키를 통해 필드를 옮겨가는데 Num에서 Card로 넘어갈 때 위와 같은 일을 수행 할려면 (물론 저장명령은 없고 중복되면 메시지를 내고 넘어가지 않으며 중복안되면 그냥 일을 계속 수행) 어느 프로지져에서 코딩을 해야 하나요?





1  COMMENTS
  • Profile
    이희정 2001.04.04 00:41
    아기코알라 wrote:

    >

    > 정말로 힘드네요.. 아무리 찾아보고 해보아도 도저히 알 수가 없네요..

    > 지금 3주째 같은 문제로 씨름 하고 있습니다. 다시 한번만 더 도와주십시요…

    > 2가지 질문이 있는데 꼭 좀 알려 주십시요…부탁드립니다.

    >

    > 질문 1 .

    > DataBase : Paradox7

    > Table Field Name : Num, Card, Name….

    > 컴포넌트 : Query1, DataSource1, UpDateSQL1. DBGrid1 등등

    >

    > UpDateSQL에서 Num만 Primary Key로 설정되어 있습니다.

    > DataBase Table에서도 Num만 Key로 설정되어 있습니다.

    >

    > Data를 DBGrid에서 직접 입력하고 삭제하고 있습니다.

    > 필드명중 Num은 유일한 값을 가져야 합니다. (자동증가번호 아님)

    >

    > 저장버턴을 통해 예외처리를 하려고 합니다.

    >

    > // 저장하기 버턴

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > try

    > with Query1 do begin

    > ApplyUpdates;

    > CommitUpdates;

    > Close;

    > Open;

    > end;

    > except on E:EDBEngineError do begin

    > if pos('Key Violation.',E.Errors[0].Message)>0 then

    > ShowMessage('중복');

    > Query1.CancelUpdates;

    > end;

    > end;

    > end;

    > 중복데이타 입력 실행시 EDBEnginError with message 'Key violation.' 발생시킴

    >

    > 제 의도는 저장할 때 Num에 중복된 데이터가 입력되어 저장될 경우 메시지를 나타내고 저장 명령을 최소할려고 하는데 전혀 안되네요..

    >

    > 질문 2. (아주중요...***************************************)

    > 혹시 Tap키를 통해 필드를 옮겨가는데 Num에서 Card로 넘어갈 때 위와 같은 일을 수행 할려면 (물론 저장명령은 없고 중복되면 메시지를 내고 넘어가지 않으며 중복안되면 그냥 일을 계속 수행) 어느 프로지져에서 코딩을 해야 하나요?

    >

    >



    중복데이타 입력시 에러 체크는 query component의 posterror이벤트에서 해주시면 됩니다.(참고로 posterror이벤트는 중복에러이외에 다른 에러가 발생해도 이벤트가 실행됩니다.)



    EX>

    Action := daAbort;

    ShowMessage(E.Message);

    MessageBeep(MB_ICONWARNING);

    Application.MessageBox('자료가 중복되었습니다.', '데이타베이스 정보 !!!',

    MB_OK or MB_ICONWARNING);





    post이벤트에는 저장처리만 해줍니다.



    with Query1 do begin

    ApplyUpdates;

    CommitUpdates;

    Close;

    Open;

    end;



    질문2는 OnColExit이벤트에서 해보세요..