问一个adoquery 单引号的问题 ( 积分: 40 )

  • 主题发起人 主题发起人 蜉蝣小生
  • 开始时间 开始时间

蜉蝣小生

Unregistered / Unconfirmed
GUEST, unregistred user!
with&nbsp;adoqry&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;sql.clear;<br>&nbsp;&nbsp;&nbsp;sql.add(insert&nbsp;into&nbsp;a(z1,z2,z3)&nbsp;select&nbsp;z_z1,z_z2,'''+str1+'''+''&nbsp;''+'''+str2+'''&nbsp;from&nbsp;b&nbsp;where.....&nbsp;)<br>&nbsp;&nbsp;&nbsp;open;<br>&nbsp;&nbsp;end;<br>应为str1,str2里面可能有单,双引号,所以在运行的时候就会提示有语法错误。<br>我想用下面的方式做<br>with&nbsp;adoqry&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;sql.clear;<br>&nbsp;&nbsp;&nbsp;sql.add(insert&nbsp;into&nbsp;a(z1,z2,z3)&nbsp;select&nbsp;z_z1,z_z2,:aa+''&nbsp;''+:bb&nbsp;from&nbsp;b&nbsp;where.....&nbsp;);<br>&nbsp;&nbsp;&nbsp;adoqry.Parameters.Clear;<br>&nbsp;&nbsp;&nbsp;adoqry.Parameters.CreateParameter('aa',ftString,pdinput,100,str1);<br>&nbsp;&nbsp;&nbsp;adoqry.Parameters.CreateParameter('bb',ftString,pdinput,100,str2);<br>&nbsp;&nbsp;&nbsp;open;<br>&nbsp;&nbsp;end;<br>这样写好像不对,<br>如果是一个参数的话就没有问题<br>sql.add(insert&nbsp;into&nbsp;a(z1,z2,z3)&nbsp;select&nbsp;z_z1,z_z2,:aa&nbsp;from&nbsp;b&nbsp;where.....&nbsp;);<br><br>两个参数的是怎么写啊?
 
用QuotedStr函数把单引号变成两个单引号
 
同意Power255<br>str:=&nbsp;QuotedStr('aa').那么str的值是''aa''
 
在SQL语句中.两单引号实现一个单引号功能.<br>如下:&nbsp;bb-&gt;varchar&nbsp;str:&nbsp;string;<br>'select&nbsp;*&nbsp;from&nbsp;a&nbsp;where&nbsp;bb&nbsp;=&nbsp;'''&nbsp;+&nbsp;str&nbsp;+&nbsp;''''<br>--&gt;select&nbsp;*&nbsp;from&nbsp;a&nbsp;where&nbsp;bb&nbsp;=&nbsp;'str'<br>多想想就容易理解啦
 
看问题,我个人认为主要是对引号的使用你还不是很了解,<br>建议你多用showmessage(str)看一下你sql.add()里的字符具体是什么,<br>下面是我个人觉得应该写的格式:(未测试)[:D]<br>with&nbsp;adoqry&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;sql.clear;<br>&nbsp;&nbsp;&nbsp;sql.add('insert&nbsp;into&nbsp;a(z1,z2,z3)&nbsp;select&nbsp;z_z1,z_z2,'''+str1+'&nbsp;'+str2+'''&nbsp;from&nbsp;b&nbsp;where.....&nbsp;')<br>&nbsp;&nbsp;&nbsp;open;<br>end;
 
首先谢谢各位的热心回复。我想各位还是没有明白我的意思。<br>用quotedstr的方法早就试验过了,不行。<br>打个比方,如果str1为aaaaaa'aaa'4'4444bbbb,str2为bbbbdsdsa'asdf''dsfasfa3434'3',<br>如果把这两个变量传递到下面,肯定会出错,即使是用quotedstr<br>sql.add(insert&nbsp;into&nbsp;a(z1,z2,z3)&nbsp;select&nbsp;z_z1,z_z2,'''+str1+'''+''&nbsp;''+'''+str2+'''&nbsp;from&nbsp;b&nbsp;where.....&nbsp;)<br><br>对于楼上说的那种写法和我的写法效果是一样的。<br>我只是想知道,如果想通过adoqry&nbsp;&nbsp;Parameters&nbsp;的方法应该这么实现?
 
adoqry.Parameters.Clear;<br>&nbsp;&nbsp;&nbsp;adoqry.Parameters[0].value:=变量1<br>&nbsp;&nbsp;&nbsp;adoqry.Parameters[1].value:=变量2
 
偶来总结下,大抵有两种方法<br>1.delphi的SQL语句中.两单引号实现一个单引号功能.<br>2.quotedstr()函数
 
解决方法:<br>自己先判断STR变量中的单引号或双引号,自己先处理一下。然后再拼SQL语句。
 
with&nbsp;adoqry&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;sql.clear;<br>&nbsp;&nbsp;&nbsp;sql.add(insert&nbsp;into&nbsp;a(z1,z2,z3)&nbsp;select&nbsp;z_z1,z_z2,:aa+''&nbsp;''+:bb&nbsp;from&nbsp;b&nbsp;where.....&nbsp;);<br>&nbsp;&nbsp;&nbsp;adoqry.Parameters.Clear;<br>&nbsp;&nbsp;&nbsp;adoqry.Parameters.CreateParameter('aa',ftString,pdinput,100,str1);<br>&nbsp;&nbsp;&nbsp;adoqry.Parameters.CreateParameter('bb',ftString,pdinput,100,str2);<br>&nbsp;&nbsp;&nbsp;open;<br>&nbsp;&nbsp;end;<br>我只想知道用这种方法应该怎么写?尤其是<br>&nbsp;&nbsp;&nbsp;sql.add(insert&nbsp;into&nbsp;a(z1,z2,z3)&nbsp;select&nbsp;z_z1,z_z2,:aa+''&nbsp;''+:bb&nbsp;from&nbsp;b&nbsp;where.....&nbsp;)
 
var&nbsp;str:string;<br>with&nbsp;adoqry&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;sql.clear;<br>&nbsp;&nbsp;&nbsp;str:=str1+'&nbsp;'+str2;<br>&nbsp;&nbsp;&nbsp;sql.add(insert&nbsp;into&nbsp;a(z1,z2,z3)&nbsp;select&nbsp;z_z1,z_z2,:aa&nbsp;from&nbsp;b&nbsp;where.....&nbsp;);<br>&nbsp;&nbsp;&nbsp;adoqry.Parameters.Clear;<br>&nbsp;&nbsp;&nbsp;adoqry.Parameters.CreateParameter('aa',ftString,pdinput,100,str);<br>&nbsp;&nbsp;&nbsp;open;<br>&nbsp;&nbsp;end;
 
var&nbsp;str:string;<br>with&nbsp;adoqry&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;sql.clear;<br>&nbsp;&nbsp;&nbsp;str:=str1+'&nbsp;'+str2;<br>&nbsp;&nbsp;&nbsp;sql.add(insert&nbsp;into&nbsp;a(z1,z2,z3)&nbsp;select&nbsp;z_z1,z_z2,:aa&nbsp;from&nbsp;b&nbsp;where.....&nbsp;);<br>&nbsp;&nbsp;&nbsp;adoqry.Parameters.Clear;<br>&nbsp;&nbsp;&nbsp;adoqry.Parameters.CreateParameter('aa',ftString,pdinput,100,str);<br>&nbsp;&nbsp;&nbsp;open;<br>&nbsp;&nbsp;end;
 
后退
顶部