匆匆的替换中出现的所有'(撇)改为"(两撇号)在AnsiString(C++)
-
19-08-2019 - |
题
我认为你可以猜测的问题,我有。我在插入的文件名为sql数据库在C++的建设者。有些文件具有一撇在他们的名字。这符sql插入查询。通常的办法来解决这个问题是双动和撇你想要被领域的一部分的价值。
例如,如果我要添加'乔治'到场"所有者"sql query将"insert into table(拥有者)values('乔治"s')"
我确定这一点。我只需要拿到单省略号取代有双重的。AnsiString似乎没有一个建立在功能这一点。是有一个简单的方法来做到这一点,而无需要包括一个全新的头文件?
解决方案
其实我自己得到了答案......
item = StringReplace( item, "'", "''", TReplaceFlags() <<rfReplaceAll );
(所以有一个内置在毕竟AnsiString类型替换功能)
编辑:添加代码标记,所以我们可以不同引号之间区分
其他提示
我没有用AnsiString,但基本上我就会做到以下几点:
- 反找到单一的报价在你的字符串
- 看到左边和右边的当前单一的报价指数
- 如果没有一个单一的报价已经在那里,插入一个单一的报价后你目前的指数
- 继续循环直到你打index0.
在C ++ Builder中,你要寻找的AnsiQuotedStr
功能,SysUtils
。它的倒数是AnsiExtractQuotedStr
。他们不是AnsiString
类型本身的方法,因为他们并不需要的那种类型的内部成竹在胸。
更重要的是,你应该使用的参数化查询的。如果您使用的数据库访问组件不支持那些,然后得到一个不同的数据库库。没有数据库的选择不足,所以你可以买得起挑剔的功能和参数查询应靠近列表的顶部。
请注意,尽管它们的名称中,AnsiX
函数接受UnicodeString
参数,而不是AnsiString
,在Delphi和C ++ Builder 2009。
会发生什么事,如果你用它替换像
item = StringReplace( item, "'", "\'", TReplaceFlags() );
不隶属于 StackOverflow