2015-07-22 4 views
0

Следующий код позволяет мне отфильтровать ClientDataSet по одному полю:Фильтр 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 + '%'); 

мне нужно сделать что-то еще, чтобы позволить несколько фильтрации ли?

Спасибо,

ответ

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; 
2

Ваша вторая линия в основном заменяет фильтр в первой строке. Вы, вероятно, хотите:

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

Примечание: Я предположил, что вы хотите ИЛИ, потому что вы были удивлены тем, что не возвращали никаких данных. Конечно, если вам требуется, чтобы оба условия были True для возврата данных, используйте AND; но вы все равно не получите никаких записей.