Delphi XE4模糊查询后想要匹配查询结果

procedureTForm2.Edit1Change(Sender:TObject);beginComboBox1.Clear;ComboBox1.DroppedDow... procedure TForm2.Edit1Change(Sender: TObject);
begin
ComboBox1.Clear;
ComboBox1.DroppedDown := true;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select NAME from faoecocrop where NAME like ''%'+Edit1.Text+'%''');
ADOQuery1.Open;
if ADOQuery1.RecordCount > 0 then
begin
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
ComboBox1.Items.Add(ADOQuery1.FieldByName('NAME').AsString);
ADOQuery1.Next;
end;
end;
end;

procedure TForm2.Edit2Change(Sender: TObject);
begin
ComboBox2.Clear;
ComboBox2.DroppedDown := true;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select SCIENTNAME from faoecocrop where SCIENTNAME like''%'+Edit2.Text+'%''');
ADOQuery1.Open;
if ADOQuery1.RecordCount > 0 then
begin
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
ComboBox2.Items.Add(ADOQuery1.FieldByName('SCIENTNAME').AsString);
ADOQuery1.Next;
end;
end;
end;
代码如上,数据库为Access,如下:

第一列NAME是植物的普通名称(common name),第三列SCIENTNAME是植物的学术名称(scientific name),我已经实现了在前面的Edit里输入一个关键词后后面对应的comboBox会显示出所有含有此关键词的记录。现在的问题是我想要当我选中ComboBox1中的某条记录之后,ComboBox2中可以自动弹出其对应的学术名称。请问应该如何实现呢?虚心向各位高手求教。

上图是我在Edit中输入大麦(barley),其后对应的ComboBox1中出现含有barley的记录,我就选定了Barley。Barley对应的学术名称是Hordeum vulgarel,如上图中ComboBox2所示,可是这个记录不是我选定了ComboBox1中的Barley之后出现的,而是我知道它是大麦属,所以在Edit2中输入了hordeum之后,在ComboBox2中含有Hordeum的记录中选定的。这就是我的具体问题啦~
展开
 我来答
sunshine_thq
2013-06-27 · 超过47用户采纳过TA的回答
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:99.1万
展开全部
在两个edit框分别输入数据后,这种对应关系都已经打乱了,要想实现这种设置就只能通过查找数据库的方法来匹配。但这种查询就太多了,对程序不利,不建议使用这种方法。建议按下面的步骤来修改:
1、去掉EDIT2,保留EDIT1,然后把EDIT1的查询语句改成
ADOQuery1.SQL.Add('select NAME,SCIENTNAME from faoecocrop where NAME like ''%'+Edit1.Text+'%'''); 然后,在edit1的循环体中增加ComboBox2.Items.Add(ADOQuery1.FieldByName('SCIENTNAME').AsString);
即:同步往两个combox控件添加数据,经过这种处理后,两个combox对应关系就变成了一一对应关系。
2、在combox1的onchange事件中编写
combobox2.itemindex := combobox1.itemindex ;

这样就可以解决这个问题了
更多追问追答
追问

跪谢跪谢啊!高手出现了~我根据你的指导改成功啦~

可是唯一一个问题是:

ComboBox1的自动弹出不响应了。我确定DroppedDown我设置为true了。问题如下图:

追答
没看明白你所指的自动弹出是什么意思,是指combobox1也要随着combobox2的变化而变化吗?如果是这样的话,在combobox2的onchange事件上增加代码如下:
combobox1.itemindex := combobox2.itemindex ;
就可以了啊。
众口说车
2013-06-27 · TA获得超过2323个赞
知道大有可为答主
回答量:3503
采纳率:50%
帮助的人:1493万
展开全部

如果是数据过滤的问题可以在combobox1的onChange事件中定义数据库的过滤!

combobox2最好用dbcombobox控件,这样,记录过滤后会自动刷新。

begin
adoquery1.filtered:=false;
adoquery1.filter:=//你需要过滤的内容:比如name =''+combobox1.text''';
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式