1

以下代码允许我按一个字段过滤客户端数据集:

begin
dmodule.cds.DisableControls;
try
  dmodule.cds.Filtered := False;

  dmodule.cds.FilterOptions := [foCaseInsensitive,foNoPartialCompare];
  dmodule.cds.Filter := 'Field LIKE '+ QuotedStr('%'+ editSearch.Text + '%');

  dmodule.cds.Filtered := True;
finally
  dmodule.cds.EnableControls;
end;

我在第一个“cds.Filter”行之后添加了另一行,我认为这可以让我按另一个字段进行过滤,但它不会带回任何记录。

该行是:

dmodule.cds.Filter := 'Field2 LIKE '+ QuotedStr('%'+ editSearch.Text + '%');

我需要做其他事情来允许多重过滤吗?

谢谢,

4

2 回答 2

3

您只需将它们与andor如果需要也可以使用):

begin
  dmodule.cds.DisableControls;
  try
    dmodule.cds.Filtered := False;

    dmodule.cds.FilterOptions := [foCaseInsensitive,foNoPartialCompare];
    dmodule.cds.Filter := 'Field LIKE '+ QuotedStr('%'+ editSearch.Text + '%') +
                          'AND Field2 LIKE ' + QuotedStr(editSearch2.Text) + '%');


    dmodule.cds.Filtered := True;
  finally
    dmodule.cds.EnableControls;
  end;
于 2015-07-22T12:55:27.793 回答
3

您的第二行基本上替换了第一行中的过滤器。你可能想要:

dmodule.cds.Filter := 
         'Field LIKE '+ QuotedStr('%'+ editSearch.Text + '%') + 
     ' OR Field2 LIKE '+ QuotedStr('%'+ editSearch.Text + '%');

注意:我假设您想要 OR,因为您对不返回任何数据感到惊讶。当然,如果您要求两个条件都为 True 才能返回数据,则使用 AND;但你仍然不会得到任何记录。

于 2015-07-22T12:58:18.853 回答