query1.close;
query1.sql.clear;
query1.SQL.Add('select  商品编码,商品名称,柜组名称,品牌名称,sum(数量),sum(销售金额)  from 表 where 条件 group by  商品编码,商品名称,柜组名称,品牌名称');
query1.open;
查询后在dbgrid里显示记录之后,我想再以每个字段进行过滤记录,不知怎么实现,请大虾多帮忙!!最好有代码,谢谢

解决方案 »

  1.   

    设置Query的Filter属性值, 比如:
    Query1.Filter := '商品编码 = ''12345''';
      

  2.   

    你所说的第二次查询是否需要改变Query1的数据集内容?
    如果不改变, 只是想显示目前数据集的部分记录, 则设置Filter属性,并置Filetered := True即可。
    如果想改变,则重新定义SQL语句,然后Close再Open。
      

  3.   

    Select * from (Select * from .....) where .....
      

  4.   

    比如,第一次查询在dbgrid显示多条记录,第一个字段是商品编码,有很多条,但是我想查看指定商品编码的商品信息,也就是说从第一次查询的结果中过滤出来指定商品编码的商品。
      

  5.   

    所以, 就是上面的那个解决方案:设置Query的Filter属性值, 比如: Query1.Filter := '商品编码 = ''12345''';
      

  6.   

    例如:
    procedure TForm1.Button1Click(Sender: TObject);
    //按商品编码过滤, Edit1中输入的是过滤的条件
    begin
      query1.Filter := '商品编码 = ''' + Edit1.Text + '''';
      query1.Filtered := True;
    end;procedure TForm1.Button1Click(Sender: TObject);
    //按商品编码过滤, Edit1中输入的是过滤的条件
    begin
      //这种模糊条件过滤也行, 不过Delphi有个Bug, 就是Edit1.Text中如果只是一个汉字的话, 会得到不正确的过滤结果
      query1.Filter := '商品编码 LIKE ''%' + Edit1.Text + '%''';
      query1.Filtered := True;
    end;
      

  7.   

    select * from (select fieldname.... from ....)aa where field=