模糊查询(请高手帮忙!)
我要实现一个查询语句,例如select * from person where name like %王%.其中,name是一个tedit的text值,而王也是一个tedit的text值,请高手指点!谢谢,在线等。。。。 问题点数:20、回复次数:14Top
1 楼S.F.(chinasf.cnblogs.com)回复于 2005-03-12 22:57:51 得分 2
with Query do
begin
Close;
SQL.Text := 'Select * from person where :f1 like :f2';
ParamByName('f1').asstring := edit1.text;
ParambyName('f2').asstring := '%' + edit2.text + '%';
Open;
end;Top
2 楼xluzhong(Ralph)回复于 2005-03-12 22:58:06 得分 2
'select * from person where '+tedit.text+' like '+'%'+''''+tedit.text+''''+'%';Top
3 楼xiaofeng3385(爱情老是缺货,轮也不会轮到我)回复于 2005-03-13 00:05:40 得分 4
var
sqlstr:string;
begin
sqlstr:='select * from person where name like '''+'%'+edit1.text+'%'+''';
query1.close;
query1.sql.clear;
query1.sql.add(sqlstr);
query1.open;
end;Top
4 楼xiaofeng3385(爱情老是缺货,轮也不会轮到我)回复于 2005-03-13 00:07:51 得分 0
少个 'Top
5 楼wuxiaojie2006(啊木)回复于 2005-03-13 01:03:12 得分 0
我也感觉这样写是对的,但是为什么明明数据库里有数据,却查不出数据来呢!Top
6 楼saulia(水晶娃娃)回复于 2005-03-14 16:35:04 得分 2
select * from '''+tedit.Text+''' where name like ''%'+edit1.Text+'%''Top
7 楼xilinpiaoxue001(猪八戒)回复于 2005-03-14 19:07:41 得分 2
sql.text:='select * from person where name like '+'%'+#39+trim(edit.text)+#39+'%';
其中#39代表引号。
出事了喊我。Top
8 楼xiaoyaozgc()回复于 2005-03-15 22:31:42 得分 4
sql.text:='select * from person where '+QuotedStr(tedit.text)+' like '+
QuotedStr('%'+trim(edit.text)+'%');Top
9 楼OYGX(好好学习 Day day up on)回复于 2005-03-15 23:23:44 得分 1
upTop
10 楼chogo(尘埃落定)回复于 2005-03-16 02:02:17 得分 1
支持 S.F.(吃青春饭的) 。
虽然看上去程序多了点,但是结构清晰。
当然,对于SQL非常熟的就另当别论了:)Top
11 楼xjp6688(大平/要做必须最好)回复于 2005-03-16 06:53:35 得分 0
seleADOQuery1->SQL->Add("select * from sales where title_id like '%"+Edit1->Text+"%'");Top
12 楼xjp6688(大平/要做必须最好)回复于 2005-03-16 06:54:00 得分 1
ADOQuery1->SQL->Add("select * from sales where title_id like '%"+Edit1->Text+"%'");
这个Top
13 楼sfwany()回复于 2005-03-16 16:19:52 得分 1
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(format('select * from person where name like ''%s''',[ '%'+TEdit.Text+'%']));
ADOQuery1.Open;Top
14 楼S.F.(chinasf.cnblogs.com)回复于 2005-03-20 19:12:52 得分 0
with Query do
begin
Close;
SQL.Text := 'Select * from person where :f1 like :f2';
ParamByName('f1').asstring := edit1.text;
ParambyName('f2').asstring := '%' + edit2.text + '%';
Open;
end;
要知道为什么要这么写吗?用参数的形式赋值可以避免sql 漏洞;因为单引号的问题;如果知道什么叫做 SQL 注入漏洞的同志就应该明白我说的意思。delphi的parambyname的形式可以自动处理单引号;如果要用字符串+++的形式,那么必须用替换函数将值内的单引号全部替换为双个,否则sql出错.Top




