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的记录中选定的。这就是我的具体问题啦~ 展开
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的记录中选定的。这就是我的具体问题啦~ 展开
2个回答
展开全部
在两个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 ;
这样就可以解决这个问题了
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也要随着combobox2的变化而变化吗?如果是这样的话,在combobox2的onchange事件上增加代码如下:
combobox1.itemindex := combobox2.itemindex ;
就可以了啊。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询