都是谁惹的祸?(50分)

  • 主题发起人 主题发起人 tubo
  • 开始时间 开始时间
T

tubo

Unregistered / Unconfirmed
GUEST, unregistred user!
想将类似下面的一段话通过sql插入到数据库中:

下面的字符串用'单引号',而这个使用"双引号",还有一个:冒号.

这段数据可能是从另外一个库里复制出来的,但执行sql时,出现了
三个错误:
首先是:单引号在sql中用来标记一个字符串,所以这里的单引号在sql
中被误解了。
第二:因为使用的c++ builder,所以双引号在c++中被误解了。
第三:因为使用的bde, 所以冒号在bde中被误解了。

解决办法:
第三的种情况可以查找冒号,把它换成全角的。
第二的种情况不能换成全角的,因为全角的双引号是有方向的。用转意符
可以解决:"///""
第一种情况,不知道如何解决,只能用`(~下面的字符)来替换。
 
在SQL中用单引号要这样用:如
ssql:='select * from aaa where abc=''hello''';
说明,在串中''表示一个单引号。
 
不对,我要插入的字符串中包含有单引号,我的字符串可能是:
he'll'o

所以,你的写法不对
 
ssql:='select * from aaa where abc='''+value+''''

把你的问题再说明白些
 
To menxin

如果你的value是he'll'o, 那生成的sql语句就是:

Select * from aaa where abc='he'll'o'

sql 能认识吗?
 
O,原来是这样。
 
用SQL Builder 写SQL语句,看Delphi自己的办法?!
 
这是SQL6.5中PUBS中的例子.加'时必需加前导引号.au_lname=O'leary
select * from authors
where au_lname='O''leary'
1,2,3,4共4个'.1,4表示:这是字符串.2表示:前导引号,
3是您字符串中的'.
 

可以用这种方式来解决。

编一个函数,先判断一下。倘若Value中有单引号,将它替换为

双引号,否则不变。(若Value中有连续的单引号,只要多添一个

单引号即可)
 
多人接受答案了。
 
后退
顶部