最近我在用Delphi访问Access和Interbase时(分别用ODBC和BDE),发现如下一个问题:
1、在一个空表中新建10条记录。
2、用 while (not (Table.Bof and Table.Eof)) do
     Table.Delete;
   只能删除一条记录。换句话说Bof和Eof失灵!!大家不信的话可随便找一个空表,然后执行以下代码:
  I: Integer;  for I := 0 to 10 do
  begin
    Table1.Append;
    Table1.Fields[0].AsString := IntToStr(I);
    Table1.Post;
  end
  while (not (Table1.Bof && Table1.Eof)) do
    Table1.Delete;按理说,表中记录应该为空,但实际只删除了一条,还有9条记录,兄弟们为什么啊??重分!!
 

解决方案 »

  1.   

    发现严重而常见的一个Bug!!!
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    你好有自信呀!这么个bug怎么让你给发现了,快告诉Borland去!
      

  2.   

    你的记录指向最后一条,删除以后就eof了,当然值删除了一条
      

  3.   

    在数据APPEND后~~指针是在最后行的,当然只会删除一条记录了
      

  4.   

    没有试过,不过我觉得有点迷惑,最然删除了一条记录以后EOF返回True,但是BOF总不会返回True吧,那么BOF AND EOF = FalseNOT (BOF AND EOF) = not False = True还是会循环啊?怎么回事?手头上没有Delphi,谁能验证一下迷惑
      

  5.   

    上面的条件eof 的时候会循环,但是eof 删不掉什么呀
      

  6.   

    噢?是这样?有机会我找个Delphi看看,我一直以为会继续删除直到没有记录呢