Q&A

  • 이건 혹시 델파이의 버그인듯 싶어서..


안녕하세요.

방기남(26)입니다.



다름이 아니라, 참 괴이한 현상 때문에 이렇게 글을 올립니다. 저와 같은 경험이 있으신

분이 있다면 해결방법을 알려주시면 감사하겠습니다.



사용환경 : 델파이 5 엔터프라이즈(패치 포함) + 오라클 7.3(그리고 8i)



문제는 간단합니다.



폼에 버튼을 3개 올려놓았습니다. (등록/수정/삭제)

DB관련 컴포넌트를 올렸습니다. (DataSet/Query/UpdateSQL)

DataModule은 프로젝트에 추가되어 있습니다.

DBGrid에서 직접 입력하고 수정할 수 있도록 하였고, 삭제 버튼을 누르면 바로 삭제가

되도록 하였습니다(Query.Delete; --> UpdateSQL.Apply(ukDelete);)



문제는 무엇인고하니,

여기서 1건이상의 데이터가 있을때에는 삭제가 잘 됩니다만, 단 한건의 데이터만이

존재할 때에 삭제가 안된다는 것입니다.



흠.. 체크 해봤습니다.

Query.BOF 그리고 EOF 모두가 True 가 나오더군요.(..... 데이터가 없다???)



혹시나 하는 마음에, SQL*Plus에서 확인했습니다.

SELECT *

FROM CommonCode;

하니, 데이터는 남아있더군요.



DBGrid.KeyPress 이벤트에 다음과 같은 코드로 확인하니 데이터가 존재하지 않는다는

메시지에 걸리더군요.



procedure TForm1.DBGrid1KeyPress(...);

begin

if Key = #13 then begin

if DBGrid1.SelectedIndex = DBGrid1.FieldCount -1 then begin

if (Query.BOF) or (Query.EOF) then

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ShowMessage('Empty');

~~~~~~~~~~~~~~~~~~~~~

Query.Post;

end else

DBGrid1.SelectedIndex := DBGrid1.SelectedIndex +1;

end;

end;



밑줄 그어진 부분에 사실은 걸리지 않아야 하는것은 아닌지... 한건의 데이터가 존재

하는데, BOF, EOF 다 걸린다는 것은 뭔가 문제가...



아시는분 답변 좀 부탁드릴께요. 가능하면 해결방법이 있다면 알려주셔요~ ♡....

1  COMMENTS
  • Profile
    액션가면 2001.01.31 01:45


    안녕하세여~



    TDataSet.Eof 헬프를 보시면

    맨 마지막에 Tip이라는 내용의 글이 있네염..



    if both Eof and Bof are True, the dataset or range is empty.



    and조건으로 묶어주셔야 맞는것 같네여..

    글구 데이타 유무판단은 TDataSet.IsEmpty 함수로 판단하는 방법도 있습니다..



    그럼 좋은하루되세여





    방기남 wrote:

    >

    > 안녕하세요.

    > 방기남(26)입니다.

    >

    > 다름이 아니라, 참 괴이한 현상 때문에 이렇게 글을 올립니다. 저와 같은 경험이 있으신

    > 분이 있다면 해결방법을 알려주시면 감사하겠습니다.

    >

    > 사용환경 : 델파이 5 엔터프라이즈(패치 포함) + 오라클 7.3(그리고 8i)

    >

    > 문제는 간단합니다.

    >

    > 폼에 버튼을 3개 올려놓았습니다. (등록/수정/삭제)

    > DB관련 컴포넌트를 올렸습니다. (DataSet/Query/UpdateSQL)

    > DataModule은 프로젝트에 추가되어 있습니다.

    > DBGrid에서 직접 입력하고 수정할 수 있도록 하였고, 삭제 버튼을 누르면 바로 삭제가

    > 되도록 하였습니다(Query.Delete; --> UpdateSQL.Apply(ukDelete);)

    >

    > 문제는 무엇인고하니,

    > 여기서 1건이상의 데이터가 있을때에는 삭제가 잘 됩니다만, 단 한건의 데이터만이

    > 존재할 때에 삭제가 안된다는 것입니다.

    >

    > 흠.. 체크 해봤습니다.

    > Query.BOF 그리고 EOF 모두가 True 가 나오더군요.(..... 데이터가 없다???)

    >

    > 혹시나 하는 마음에, SQL*Plus에서 확인했습니다.

    > SELECT *

    > FROM CommonCode;

    > 하니, 데이터는 남아있더군요.

    >

    > DBGrid.KeyPress 이벤트에 다음과 같은 코드로 확인하니 데이터가 존재하지 않는다는

    > 메시지에 걸리더군요.

    >

    > procedure TForm1.DBGrid1KeyPress(...);

    > begin

    > if Key = #13 then begin

    > if DBGrid1.SelectedIndex = DBGrid1.FieldCount -1 then begin

    > if (Query.BOF) or (Query.EOF) then

    > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    > ShowMessage('Empty');

    > ~~~~~~~~~~~~~~~~~~~~~

    > Query.Post;

    > end else

    > DBGrid1.SelectedIndex := DBGrid1.SelectedIndex +1;

    > end;

    > end;

    >

    > 밑줄 그어진 부분에 사실은 걸리지 않아야 하는것은 아닌지... 한건의 데이터가 존재

    > 하는데, BOF, EOF 다 걸린다는 것은 뭔가 문제가...

    >

    > 아시는분 답변 좀 부탁드릴께요. 가능하면 해결방법이 있다면 알려주셔요~ ♡....