用于过滤数据库的多个组合框

时间:2014-10-22 18:12:25

标签: database delphi ms-access combobox filter

我希望能够从用户在两个不同组合框中选择的内容中过滤数据库。

从组合框中选择某些内容

var i : integer;
begin
i := cmbA.ItemIndex;
bA := True; // global boolean variable 
case i of
0 : strA := 'One'; //Global string variable
1 : strA := 'Two';
else bA:= False;
end;

此代码在第二个组合框中重复,除非有'A',否则有'B'。

用户点击按钮后

if bA then
dmDatabase.tblTable.Filter := 'A = ' + QuotedStr(strA);
if bSize then
dmDatabase.tblTable.Filter := 'B = ' + QuotedStr(strB);

此代码的问题是一个取消另一个。 例如,如果从A中选择某些内容,然后从B中选择,则只有B过滤器将显示在dbGrid中。

我想要的是过滤器只显示数据库中适用于'A'和'B'的那些。

1 个答案:

答案 0 :(得分:1)

数据集的Filter属性能够改变复杂的标准 你可以例如有这样的承诺:

aField=1 and (bField Like 'Am%' or bField Like 'Bm%') AND cField is not NULL

由于您只想添加AND条件而不需要复合,因此在公共部分中声明的简单生成可能对此有用:

Procedure dmDatabase.AddToFilter(const Expression: String);
Const
  C_AndIfNotEmpty: Array [boolean] of String = ('', ' AND ');
begin
  tblTable.Filter := tblTable.Filter + C_AndIfNotEmpty[TRIM(tblTable.Filter) <> '']
                   + Expression;
end;

点着火,忘了叫:

if bA then
  dmDatabase.AddToFilter('A = ' + QuotedStr(strA));
if bSize then
  dmDatabase.AddToFilter('B = ' + QuotedStr(strB));