最近想在单据里加一个计数字段(用的是DBGidEH控件),效果如下图:实现判断自动个数字段的计数,当NO.1-10这十个字段里的值有一个大于30时,算1;有2个大于30就算2;有3个就算3;有4个算4;依此类推。
 
其实在EXCEL里就用COUNT函数就可以有劳动动好心人帮帮忙?谢谢! 

解决方案 »

  1.   

    想看完整图片的请把打开这个图片原地址:http://hi.csdn.net/attachment/201108/7/148184_131268841041MO.jpg
      

  2.   

    if 字段 >= 30 then i:=i+1;这样?
      

  3.   

    在OnCalcFields事件里面写
    if (cds1.Fieldbyname('No.1').AsString)>30.....or (cds1.Fieldbyname('No.10').AsString)>30 then i=1
    ………………代码类似
      

  4.   

    大概就是这样 自己修改下while not DBGrid1.DataSource.DataSet.Eof do
      begin
        DBGrid1.DataSource.DataSet.First;
        Num := 0;
        for i := 0 to DBGrid1.DataSource.DataSet.FieldCount -1  do
        begin
          if DBGrid1.DataSource.DataSet.Fields[I+1].AsInteger > 30 then
            Inc(Num);
        end;
        DBGrid1.DataSource.DataSet.Next;
      end;
      

  5.   

    通过在数据源的事件中计算。也可以直接在查询的SQL语句中添加一个计算个数的列:
    SELECT ID_NAME,NO.1,NO.2,NO.3,NO.4,NO.5,NO.6,NO.7,NO.8,NO.9,NO.10,
           DECODE(SIGN(NO.1-30),1,1,0) +
           DECODE(SIGN(NO.2-30),1,1,0) +
           DECODE(SIGN(NO.3-30),1,1,0) +
           DECODE(SIGN(NO.4-30),1,1,0) +
           DECODE(SIGN(NO.5-30),1,1,0) +
           DECODE(SIGN(NO.6-30),1,1,0) +
           DECODE(SIGN(NO.7-30),1,1,0) +
           DECODE(SIGN(NO.8-30),1,1,0) +
           DECODE(SIGN(NO.9-30),1,1,0) +
           DECODE(SIGN(NO.10-30),1,1,0) AS 个数
    FROM TABLE ...
      

  6.   


    支持这个。
    双击你的 TADOQuery ,New 一个 Field ,属性选择 Calc。
    然后在这个 Field 的 OnCalc 上写。
      

  7.   

    补充一下,那些个 No1 No2,先Active 设成 true,在字段添加的时候,也可以全都先加进来。
      

  8.   

    function TForm1.SumDBGrid(DBGrid: TDBGrid):Integer;
    var
      I,Num: Integer;
    begin
      Result := -1;
      try
        while not DBGrid.DataSource.DataSet.Eof do
        begin
          DBGrid.DataSource.DataSet.First;
          Num := 0;
          for I := 0 to DBGrid.DataSource.DataSet.FieldCount -1  do
          begin
            if DBGrid.DataSource.DataSet.Fields[I+1].AsInteger > 30 then
              Inc(Num);
          end;
          DBGrid.DataSource.DataSet.Next;
        end;
        Result := Num;
      except
        Exit;
      end;
    end; 
    你只要传入你要计算的DBGrid名称就好了