我要实现一个查询语句,例如select * from person where name like %王%.其中,name是一个tedit的text值,而王也是一个tedit的text值,请高手指点!谢谢,在线等。
解决方案 »
- delphi 用indy的tcpclient 和tcpserver问题
- 说说你是什么样的人生:看电视的人生,发呆的人生,睡觉的人生还是积极的人生
- 求控件 Delphi的 TScrollText 控件和TBitmap
- 关于Filtered 的问题---------大虾帮看看
- 程序里生成组件时碰到的问题,有经验点请入!!!
- 本人有一套ERP方面的软件 目前已有几十家客户已良好运行!!! 预购从速!!!
- project->option->application里的loadicon按钮怎么不能用了?在线等
- 请教一个关于信使服务的问题
- SimpleDataSet+mysql 字段是自动增加 或则 有些字段是有默认值 但是增加的时候还是提示不能空值
- 关于用uLKJSON解析JSON数据时,拿不到中文的数据。
- 请问一个简单的问题。如何返回当前选择树项:TTreeNode
- 怎样在RichEdit中不通过SelStart来控制某一行文本的字体?(将加入FAQ)
begin
Close;
SQL.Text := 'Select * from person where :f1 like :f2';
ParamByName('f1').asstring := edit1.text;
ParambyName('f2').asstring := '%' + edit2.text + '%';
Open;
end;
sqlstr:string;
begin
sqlstr:='select * from person where name like '''+'%'+edit1.text+'%'+'''; query1.close;
query1.sql.clear;
query1.sql.add(sqlstr);
query1.open;end;
其中#39代表引号。
出事了喊我。
QuotedStr('%'+trim(edit.text)+'%');
虽然看上去程序多了点,但是结构清晰。
当然,对于SQL非常熟的就另当别论了:)
这个
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(format('select * from person where name like ''%s''',[ '%'+TEdit.Text+'%']));
ADOQuery1.Open;
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出错.