SQL查询或其他操作的时候,如果遇到一个单引号的情况查询会报错的,比如:
query1.sql.text:='select * from tablename where filedname='+#39+edit1.text+#39;
//edit1.text中如果有一个英文状态下的单引号,就会报错,以前是TEXT字段类型的时候是用一个其他的字符组合替换掉单引号,显示的时候在将字符组合换成单引号,可如果字段多了的话总不能每个字段都这么样替换吧?再说要是在表格中显示根本就不知道怎么去替换回来。
对此,不知道在实际中是如何解决的?如果有什么好的解决办法还不吝赐教,谢谢!!
query1.sql.text:='select * from tablename where filedname='+#39+edit1.text+#39;
//edit1.text中如果有一个英文状态下的单引号,就会报错,以前是TEXT字段类型的时候是用一个其他的字符组合替换掉单引号,显示的时候在将字符组合换成单引号,可如果字段多了的话总不能每个字段都这么样替换吧?再说要是在表格中显示根本就不知道怎么去替换回来。
对此,不知道在实际中是如何解决的?如果有什么好的解决办法还不吝赐教,谢谢!!
解决方案 »
- 这种算法,谁给一个简单的
- 一不小心发现今天算是过生日!~~ 不过我还是喜欢过农历的 嘿嘿
- 求产生一个由12个随机0~9自然数组成的字符串的算法、
- 在网页中运行的OCX,怎么获得自身的版本号?
- ADOConnection连接有口令的Access数据库出错!口令正确救急!
- 如何在Adoconnection控件destroy后恢复ADO连接,解决即给分
- 怎样把串直接转换成十六进制的数
- 一个很实际的问题,应用端如何让用户动态设置ADO的连接参数
- 用Delphi怎样实现互联网共享数据 .(即连锁店管理) 实施方案
- DBGrid查询后通过KeyPress一条一条增加数据
- 求 像 用友 "华表" 功能一样强大的 免费 的 VCL 控件?????????????
- Delphi的某个函数我想不起来了,请高手帮忙
http://community.csdn.net/Expert/TopicView.asp?id=3651031
函数返回改造后的字符串,然后再按正常的没有单引号的写法就可以了。你可以在外部,如edit1中的onkeypress事件上输入
if key='''' then key=#0;这种在edit1框中就不能输入单引号了
你也可以在程序中用try except来去掉这种错误
-------------------------------------
Query.SQL.Clear;
Query.SQL.Add(format('insert TABLE values (''%s'',''%s'')', [Edit1.Text, Edit2.Text]));
Query.SQL.Execsql;
或者:
Query.SQL.Clear;
Query.SQL.Add('insert TABLE values (');
try
Query.SQL.Add(Inttostr(strtoint(Edit1.Text)));
except
showmessage('error');
exit
end;
Query.SQL.Add(',');
Query.SQL.Add(Inttostr(strtoint(Edit2.Text)));
except
showmessage('error');
exit
end;
Query.SQL.Add(')');
Query.SQL.Execsql;
query1.parameters.parametervalues['arg1']:=edit1.text;
你可以这样写
我平时都是这样写的
try
with adoquery1 do
begin
close;
sql.Clear;
sqll:='insert into xs values (:a,:b,:c,:d,:e,:f,:g,:h,:i,:j)';
sql.Add(sqll);
Parameters[0].Value:=edit2.Text;
Parameters[1].Value:=edit3.Text;
Parameters[2].Value:=edit4.Text;
Parameters[3].Value:=edit5.Text;
Parameters[4].Value:=edit6.Text;
Parameters[5].Value:=edit7.Text;
Parameters[6].Value:=edit8.Text;
Parameters[7].Value:=edit9.Text;
Parameters[8].Value:=edit10.Text;
Parameters[9].Value:=edit11.Text;
execsql;
showmessage('插入成功');
end;
except
showmessage('error');
end;
所以千万不要这样写,麻烦大了~
' and filedname2='+#39+edit2.text+#39;
因为ASP里有一种黑客方法就是采用类似的方法,取得高权限。
可以变成
query1.parameters.parametervalues['arg1']:='%'+edit1.text+'%';
StringReplace(SearchEdit.Text,'''','''''')+
'''';
StringReplace(SearchEdit.Text,#39,#39#39)+#39;
1.用參數的方式
2.用QuotedStr函數即可如:
query1.sql.text :=
'select * from tablename where filedname=' + Quotedstr(edit1.text);
帖子再保留两天,看还有没有更好的办法?
query1.sql.text:='select * from tablename where filedname='+#39+edit1.text+#39;
应该为:query1.sql.text:='select * from tablename where filedname ='+''''+edit1.text+'''';
千万要记得空格哟.
query1.sql.add('select * from tablename where filedname ='+quotedstr(edit1.text);
1、format()函数
2、用'''代替'
要不试试?
呵呵
如果 Edit1.Text 有引号也不用怕,这个函数会自转换,不会出错。
你试试这个函数的执行结果就知道了。
query1.sql.text:='select * from tablename where filedname='+QuotedStr(edit1.text);
如果 Edit1.Text 有引号也不用怕,这个函数会自转换,不会出错。
你试试这个函数的执行结果就知道了。
query1.sql.text:='select * from tablename where filedname=:arg1';
query1.parameters.parametervalues['arg1']:=edit1.text;
select * from tb1 where xx=''''+edit1.text+'''';
这种写法
很容易出现错误
我说过,在dvbbs7.0中,就是因为这样的漏洞,很容易被我去的管理员的权限,安全啊安全啊!
如果觉得麻烦 QyotedStr是个选择