怎么得到TclientDateset里的记录的条数呀??
谢谢~~~

解决方案 »

  1.   

    procedure TForm1.button1Click(Sender: TObject); 
    var
      sql:string;
    begin
      DM1.ClientDataSet1.Close;
      DM1.ClientDataSet1.CommandText:=sql;
     DM1.ClientDataSet1.Open;
     counternum.Text:=inttostr(DM1.ClientDataSet1.RecordCount);
    end;
    象这样每次点了Button1之后查询到记录的条数为什么都和 第一次一样呀,记录的条数变了而ClientDataSet1.RecordCount没变~~为什么呀~~
      

  2.   

    recordcount只能得到PacketRecords的整数倍的值,也就是缓冲区的记录数
    参考://==============================================================================
    //取得Query记录数(服务器端:速度快于Query.RecordCount)*************************
    //==============================================================================
    function RecordServerCount(Query: TQuery): integer; overload;
    var SQLStr: string;
    begin
      Result := 0;
      if Query.IsEmpty then Exit;
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      if Pos('order',LowerCase(Query.SQL.Text))>0
      then SQLStr := Copy(Query.SQL.Text,1,Pos('order',Query.SQL.Text)-1)
      else SQLStr := Query.SQL.Text;
      with TQuery.Create(nil) do
      try
        DatabaseName := Query.DatabaseName;
        SQL.Text := 'select count(*) from (' + SQLStr + ')';
        Params.Assign(Query.Params);
        Open;
        Result := Fields[0].AsInteger;
      finally
        Close;
        Free;
      end;
    end;
    //==============================================================================
    //取得SQLDataSet记录数(服务器端:速度快于SQLDataSet.RecordCount)***************
    //==============================================================================
    function RecordServerCount(SQLDataSet: TSQLDataSet): integer; overload;
    var SQLStr: string;
    begin
      Result := 0;
      if SQLDataSet.IsEmpty then Exit;
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      if SQLDataSet.CommandType=ctQuery then
      begin
        if Pos('order',LowerCase(SQLDataSet.CommandText))>0
        then SQLStr := Copy(SQLDataSet.CommandText,1,Pos('order',SQLDataSet.CommandText)-1)
        else SQLStr := SQLDataSet.CommandText;
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        if SQLDataSet.Params=nil
        then Result := SQLDataSet.RecordCount
        else with TSQLDataSet.Create(nil) do
        try
          SQLConnection := SQLDataSet.SQLConnection;
          CommandText := 'select count(*) from (' + SQLStr + ')';
          Params.Assign(SQLDataSet.Params);
          Open;
          Result := Fields[0].AsInteger;
        finally
          Close;
          Free;
        end;
      end;
    end;//==============================================================================
    //取得DataSet记录数(客户端:仅限于少量数据)************************************
    //==============================================================================
    function RecordClientCount(DataSet: TDataSet): integer;
    var NotifyEvent: TDataSetNotifyEvent;
        SavePlace: TBook;
    begin
      //============================================================================
      //0.初始化********************************************************************
      //============================================================================
      NotifyEvent := DataSet.AfterScroll;
      DataSet.AfterScroll := nil;
      Result := 0;
      //============================================================================
      with DataSet do
      begin
        if (BOF and EOF) then Exit;
        SavePlace := GetBook;
        DisableControls;
        //==========================================================================
        First;
        while not Eof do
        begin
          Result := Result + 1;
          Next;
        end;
        //==========================================================================
        GotoBook(SavePlace);
        FreeBook(SavePlace);
        EnableControls;
      end;
      //============================================================================
      //释放资源********************************************************************
      //============================================================================
      DataSet.AfterScroll := NotifyEvent;
    end;
      

  3.   

    用不用这以烦呀?
    不会写在组件里面吗?
    反回INTEGER
    RESULT:=SELECT COUNT(*) FROM TABLE;