MyBaseで不可解?

解決


ぷれんど  2007-07-12 10:02:01  No: 27049  IP: [192.*.*.*]

MyBaseで100件を超えるデータを削除したいのですが
以下のコードを実行すると、全てのデータ削除されてしまいます。
データは1000件登録済みです。

var
  i: integer;
begin
  i:= 0;
  ClientDataSet1.first;
  while (not ClientDataSet1.Eof) do begin
    i:= i + 1;
    if i > 100 then
      ClientDataSet1.Delete
    else
      ClientDataSet1.Next;
  end;
  ・・・

よろしくお願いします。

編集    削除
Ru  2007-07-12 18:21:40  No: 27050  IP: [192.*.*.*]

最終行ではDeleteしてもEofはTrueにならない?
それが原因かな。

編集    削除
orz  2007-07-12 19:12:37  No: 27051  IP: [192.*.*.*]

Helpによると、Eof=True になるのは

・空のデータセットを開いた
・Lastを呼んだ
・Nextしたけど、Nextがなくて失敗した
・範囲なしでSetRangeした

つまりDeleteしてもEof=Trueにはならないということでしょう。

編集    削除
ぷれんど  2007-07-12 20:08:41  No: 27052  IP: [192.*.*.*]

ありがとうございました。
原因:Delete  では、Eof=True が認識できないことがわかりました。
最初に RecordCount で行数を調べ
for で行数分処理したらうまくいきました。
でも、TTable ではできたよな?

編集    削除