按多个 Field 过滤 ClientDataSet
Filter ClientDataSet by more than one Field
以下代码允许我按一个字段过滤客户端数据集:
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 + '%');
我是否需要执行其他操作才能允许多重过滤?
谢谢,
您只需将它们与 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;
你的第二行基本上替换了第一行的过滤器。你可能想要:
dmodule.cds.Filter :=
'Field LIKE '+ QuotedStr('%'+ editSearch.Text + '%') +
' OR Field2 LIKE '+ QuotedStr('%'+ editSearch.Text + '%');
注意:我假设您想要 OR,因为您对没有 returning 任何数据感到惊讶。当然,如果您要求两个条件都对 return 数据为真,则使用 AND;但你仍然得不到任何记录。
以下代码允许我按一个字段过滤客户端数据集:
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 + '%');
我是否需要执行其他操作才能允许多重过滤?
谢谢,
您只需将它们与 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;
你的第二行基本上替换了第一行的过滤器。你可能想要:
dmodule.cds.Filter :=
'Field LIKE '+ QuotedStr('%'+ editSearch.Text + '%') +
' OR Field2 LIKE '+ QuotedStr('%'+ editSearch.Text + '%');
注意:我假设您想要 OR,因为您对没有 returning 任何数据感到惊讶。当然,如果您要求两个条件都对 return 数据为真,则使用 AND;但你仍然得不到任何记录。