你可以求你的DBGrid对应的数据源的纪录的个数呀!这不就归结到查询和统计的问题了吗?
记录个数就是RecordCount.
某一列的和就是某一字段的和,用查询语句或者循环求解都可以。

解决方案 »

  1.   

    LABEL1.CAPTION:=INTTOSTR(TABLE1.RECORDCOUNT);
    SELECT SUN(SL) FROM TABLE;
    LABLE2.CAPTION:=FLOATTOSTR(SUN(SL));即可实现!
      

  2.   

    我用的是query组件,sql语句是根据用户输入动态生成,很复杂,我不想再改;况且我用的是
    Sybase Adaptive Server Anywhere 6.0数据库(c/s结构),相信你们也看过别人的帖子,RecordCount根本不起作用,不管怎样,都是-1,难道就在DBgrid组件里就不能统计记录个数和计算某列的和吗?急盼解答!!
      

  3.   

    好像不好使吧!其实静态或动态无所谓。
    但这个代码一定要的QUERY.OPEN
    之后写才会有用的.否则则不可以啦!
      

  4.   

    我的方法不算高效
    //数据保存之后的事件加
    const
      cKeyFields = 'Field1'; //不会重复的字段集 可以是"Field1;Field2;Field3"
      cNumberField = 'Field2';
    var
      vSum: Real;
      vRecordCount: Integer;
      vKeyValues: Variant;
    begin
      vKeyValues := DataSet[cKeyFields]; //保存关键值
      vRecordCount := 0;
      vSum := 0;
      DataSet.Frist;
      while DataSet.Eof do begin
        vSum := vSum + DataSet.FieldByName(cNumberField).AsFloat;
        Inc(vRecordCount);
        DataSet.Next;
      end;
      DataSet.Locate(cKeyFields, vKeyValues, []); //回到以前的位置
      { vSum,vRecordCount用吧 }
    end;
      

  5.   

    不要想通过DBGrid想要操作表
    要通过DBGrid.DataSource.DataSet
      

  6.   

    早说过了RecordCount根本不起作用,我知道是在在query1.open之后用,
    要用TADOQuery组件才行,我又不想换控件,
    其实可以用 select count(*),sum(field1)……语句可以,但我说过,我的sql语句是动态生成,很复杂,我不想再改!zswang(zs)的方法有些繁琐,不很好!
      

  7.   

    不是通过DBGrid来操作表,而只是统计DBGrid内的记录个数和某列求和
      

  8.   

        query1.first;
        while not query1.Eof do
        begin
          count1:=count1+1;
          query1.next;
        end;
        label2.caption:='共'+inttostr(count1)+'条记录';我是这样做的,虽然不够简明。