注意一个Borland的Help,RecNo在多数情况下都是-1。如果用TClientDataset,那么倒是可以用RecNo。

解决方案 »

  1.   

    如果用TAdoDataSet,那么把CursorLocation设做Client就可以保证获得记录条数。
      

  2.   

    To chechy(我爱洁洁):Borland的Help中写的是TBDEDataSet中的RecNO可以操作,TBDEDataSet中已经将TDataSet中的两个读写RecNO的方法屏蔽了,下面是这两个方法:function TBDEDataSet.GetRecNo: Integer;
    var
      BufPtr: PChar;
    begin
      CheckActive;
      if State = dsCalcFields then
        BufPtr := CalcBuffer else
        BufPtr := ActiveBuffer;
      Result := PRecInfo(BufPtr + FRecInfoOfs).RecordNumber;
    end;procedure TBDEDataSet.SetRecNo(Value: Integer);
    begin
      CheckBrowseMode;
      if (FRecNoStatus = rnParadox) and (Value <> RecNo) then
      begin
        DoBeforeScroll;
        if DbiSetToSeqNo(Handle, Value) = DBIERR_NONE then
        begin
          Resync([rmCenter]);
          DoAfterScroll;
        end;
      end;
    end;
      

  3.   

    我记得以前版本的Delphi在Help一直是说只有Paradox和DBASE完成了RecNo,其他都是返回-1。现在地Help好像变了。
      

  4.   

    if (FRecNoStatus = rnParadox) and (Value <> RecNo) thenTo chechy(我爱洁洁):上面是SetRecNo中的一句,应该是Paradox表才可以实现SetRecNo,不过我现在用First、MoveBy()解决了这个问题。谢谢大家!
      

  5.   

    以前和你遇到过相同的情况!
    abs(Query1.RecNo) 
    TClientDataSet.RecNo 
    学习一下!