以下代码允许我按一个字段过滤clientdataset:
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 + '%');
我是否需要做其他事情以允许多重过滤?
谢谢,
答案 0 :(得分:2)
您只需将它们与and
结合使用(如果需要,您还可以使用or
):
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;
答案 1 :(得分:2)
您的第二行基本上 替换 第一行中的过滤器。你可能想要:
dmodule.cds.Filter :=
'Field LIKE '+ QuotedStr('%'+ editSearch.Text + '%') +
' OR Field2 LIKE '+ QuotedStr('%'+ editSearch.Text + '%');
注意:我假设你想要OR,因为你对没有返回任何数据感到惊讶。当然,如果您要求两个条件都为True以返回数据,那么使用AND;但是你仍然没有记录。