ClientDataSet에서 Delete를 실행하면 이상합니다.
결과는 같다면 같겠지만 while -- do --의 내용에 따라 실수할 수 있기 때문에
다른 방법이 있는지, 아니면 그런줄 알고 사용해야 하는지 궁금하여 질문드립니다.
델파이2007을 사용하고 있습니다.
폼에 TClientDataSet 컴포넌트를 놓고요..
특정 프로퍼티변경 없이 로컬데이터로만 사용했습니다.
인덱스는 없습니다.
:
:
ClientDataSet : TClientDataSet;
:
:
ClientDataSet의 필드는 Name필드가 있고,
Name필드에 1 -- 18까지 입력하여 18개의 레코드가 있습니다.
저는 이렇게 저장된 레코드에서 13, 14, 15번째것만 취하고 나머지는 지우고 싶습니다.
다음과 같이 코딩했습니다.
Memo.Line.clear;
with ClientDataSet do
begin
IndexFieldNames := '';
First;
while not Eof do
begin
Memo.Line.Add( FieldByName('Name').asString );
if Name = 13 or 14 or 15 then // -- 컴파일에서는 오류가 나겠지만 코딩이 맞다고 가정하고요..
Next
else
Delete;
end;
end;
위의 코드 if 에서 제가 간략하게 기술했는요..
정상적으로 처리되어 원하는 것만 제외하고 삭제된다고 가정하고요.
Memo에 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 15 라고 표시됩니다.
결과는 역시 3개의 레코드가 남습니다.
제가 조건을 달리하여 테스트해보니 처음 레코드갯수만큼 진행된다는 것을 알수 있었습니다.
다른 레코드를 선택하여 지우도록 하면 같은 레코드가 여러번 처리되었습니다.
만약 위에서 Next전에 뭔가 연산하고 Next를 하는 결과라면
15의 내용은 2번 작업하게 됩니다.
같은 내용을 BDE의 Table이나 Rx의 MemoryTable을 사용하면 이상없이 처리됩니다.
원래 저렇게 처리된다면 피해갈 방법은 있겠지만
이해가 안가서요.
그럼 미리 감사드립니다.
|