MyBaseで不可解?

解決


ぷれんど  2007-07-12 01: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 09:21:40  No: 27050  IP: 192.*.*.*

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

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

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

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

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

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

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

編集 削除