delphi - 从多个组合框中应用多个过滤器
问题描述
我有一个 adotable,我想从多个组合框应用多个过滤器,每个组合框都将一个过滤器应用于该表。我的问题是,每当我从组合框 1 中选择一个项目时,它都会应用其过滤器,但是当我从下一个组合框(组合框 2)中选择另一个项目时,它会删除前一个过滤器(组合框 1)并应用组合框 2 中的过滤器。我的问题是:如何使 adotable 保留来自 combobox1 或 combobox2 甚至两者的先前过滤器,但还添加来自 combobox3 的第三个过滤器以进行更深入的排序?提前致谢。这是我到目前为止所做的:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
ADOTable1.Filtered:=false;
ADOTable1.filter:='`enter code here`field1='+ QuotedStr(ComboBox1.Text);
ADOTable1.Filtered:=true;
end;
procedure TForm1.ComboBox2Change(Sender: TObject);
begin
ADOTable1.Filtered:=false;
ADOTable1.filter:=adotable1.Filter+'and field2='+ QuotedStr(ComboBox1.Text);
ADOTable1.Filtered:=true;
end;
procedure TForm1.ComboBox3Change(Sender: TObject);
begin
ADOTable1.Filtered:=false;
ADOTable1.filter:=adotable1.Filter+'and field3='+ QuotedStr(ComboBox1.Text);
ADOTable1.Filtered:=true;
end;
解决方案
以上代码多次修改后报错,每次都需要重新组合过滤文本
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
ComboBoxChange();
end;
procedure TForm1.ComboBox2Change(Sender: TObject);
begin
ComboBoxChange();
end;
procedure TForm1.ComboBox3Change(Sender: TObject);
begin
ComboBoxChange();
end;
procedure TForm1.ComboBoxChange();
var
count: integer;
sFilter: string;
begin
count := 0;
sFilter := '`enter code here`';
if(ComboBox1.Text <> '') then
begin
sFilter := 'field1=' + ComboBox1.Text;
Inc(count);
end;
if(ComboBox2.Text <> '')then
begin
if count > 0 then
sFilter := sFilter + 'and field2=' + ComboBox2.Text
else
sFilter := sFilter + ' field2=' + ComboBox2.Text
Inc(count);
end;
if(ComboBox3.Text <> '')then
begin
if count > 0 then
sFilter := sFilter + 'and field3=' + ComboBox3.Text
else
sFilter := sFilter + ' field3=' + ComboBox3.Text
Inc(count);
end;
ADOTable1.Filtered:=false;
ADOTable1.filter:=sFilter;
ADOTable1.Filtered:=true;
end;
推荐阅读
- javascript - 我正在尝试登录 Facebook。成功登录后,我得到一个浏览器弹出窗口:
- css - 如何填充顶部
-离子 4 - python - colab 会话被消息 tcmalloc 杀死:大分配 1121959936 字节
- c++ - 用位移算法计算平方根总是输出相同的数字
- oracle - 在没有上下文路径 /apex 的情况下访问 APEX
- r - 创建指示家庭类型的变量 - 子集、条件选择、数据整理 - 已关闭
- r - 如何获取一定年份之间的所有数据?例如我需要 1970-2010 之间的数据
- mongodb - 如何用 Node.js 变量替换 Mongo 查询参数
- c++ - 为什么在这种情况下星号位置有所不同,而在其他情况下则没有?
- android - Firebaserecycleadapter,与“普通”recycleradapter有什么区别?(安卓)