如何使用SQL实现字段数据的模糊查询(100分)

  • 主题发起人 主题发起人 cfm723
  • 开始时间 开始时间
C

cfm723

Unregistered / Unconfirmed
GUEST, unregistred user!
在DELPHI中,如对“姓名”字段进行查询,当在输入框edit1中输入“陈”时,能自动地将陈姓的所有记录列出来
但我这样做却不行:
with ldgldatamodule.adoquery3 do
begin
close;
sql.clear;
sql.add('select * from stock');
sql.add('where name 'edit1.text%' ');
open;
end.
我这样做却不行,为什么?如何做才行?
 
sql.add('where name like '+ edit1.text + '%''');
失误,修改一下
sql.add('where name like '''+ edit1.text + '%''');
 
sql.add('where name like '''+edit1.text+'%'+'''');
 
sql.add('where name like '''+edit1.text+'%'');
 
sql.add('where name like '''+edit1.text+'%''');
 
chirstin是正确的
 
hcbride,为什么是这样表达,说明一下好吗?
 
在edit1的keypress中寫入:
with ldgldatamodule.adoquery3 do
begin
close;
sql.clear;
sql.add('select * from stock where name like '''+edit1.text+'%''');
open;
end.
 
sql.add('select * from stock where name like '+'''%'+edit1.text+'%''');
若这样报错,那就这样:
sql.add('select * from stock where name like :value');
ParamByName('value').AsString :='%'+edit1.text+'%';

 
sql.add('where name like '''+edit1.text+'%'+'''');中:
1、第一个和最后一个是固有的对吧:)
2、在正常的sql中应写为:where name like 'string%'对吧,那么:
like后面的''',可以看作是‘'’;倒数4个中的前三个可看作是‘'’;edit1.text就是
字符串了;
所以就有了这种写法。不知道我说的清楚吗?看起来很多'''其实冷静点你就能看出来了。
 
其实可以这样写避免"'"数目错误:
Sql.Add('where name like :name');
ParamByName('name').AsString := Edit1.Text + '%';

 
Derlin说的没错。但在我做的过程中,如果查询条件是组合的,而且有些条件可以为空时,
也就是要判断edit。text是否为空,就会出错了。会说找不到参数。比如:
Sql.Add('where name like :name');
ParamByName('name').AsString := Edit1.Text + '%';
if edit2.text<>'' then sql.add(' and Sex=:Param1');
if edit2.text<>'' then Parambyname('Param1').asstring:=edit2.text;
这样就出错了,为什么呢?
 
后退
顶部