我用的是query控件,查询后结果集的RecNo都是-1,但是RecCount是对的
郁闷啊,不知道怎么搞的,高手请指点啊!

解决方案 »

  1.   

    RecNo是一个已经淘汰,只是为了提供兼容而存在的属性。最好不要使用。
    数据集里的数据和数据库里的数据一样,行之间本身是没有“顺序”这个概念的,你要使用,就最好还是自己手工排序,然后选用相应的行
      

  2.   

    RecNo是当前记录的位置
    你在没选中的时候当然为-1
    并且会随时改变而RecCount是记录的总条数,是不变的
      

  3.   

    Query组件中的RecNo是否可用,取决于后台数据库。具体请看Delphi的在线帮助。
    不过,AdoQuery组件的RecNo永远可用。建议换用Ado方式访问数据库。 
    BDE中返回的RecNo是-1。用ADO吧。
      

  4.   

    我还是坚持我自己的看法,不推荐使用这个属性。
    因为从本质来说,数据的顺序是可变的,不是数据的“属性”。举例来说,你的数据集使用了这样的序,而其他人可能重新排序了。你还怎么确定recno?
      

  5.   

    使用ADO时,当你处于最后一行再Next的时候,RecNo就是-1。
    查询完后,Query正处于这个状态,先First一下,就能看到RecNo=0了。
      

  6.   

    数据库中含有image(MSSQL)或者其他存储大数据的字段(mysql的wav)会造成这种情况的发生
    解决办法,下last一下,然后在First一下,ok
      

  7.   

    看错了,我看成RecCount取不到
      

  8.   

    你还是用RecCount判断吧试了一下用ADO和BDE的procedure TForm1.Button1Click(Sender: TObject);
    begin
      ADOQuery1.SQL.Add('select * from ptatt');
      ADOQuery1.Open;
      ShowMessage(IntToStr(ADOQuery1.RecNo));
      ADOQuery1.Next;
      ShowMessage(IntToStr(ADOQuery1.RecNo));
    end;结果:
    1  
    2procedure TForm1.Button2Click(Sender: TObject);
    begin
      Query1.SQL.Add('select * from ptatt');
      Query1.Open;
      ShowMessage(IntToStr(Query1.RecNo));
      Query1.First;
      Query1.Next;
      ShowMessage(IntToStr(Query1.RecNo));
    end;结果:
    -1
    -1