发现TClientDataSet.Locate函数有bug,请各位大侠援手,十分感谢! ( 积分: 50 )

  • 主题发起人 主题发起人 kingbenz
  • 开始时间 开始时间
K

kingbenz

Unregistered / Unconfirmed
GUEST, unregistred user!
用TClientDataSet.Locate方法的时候,如果搜索的字符串里最后面的字符为"'",会出现"Unterminated string constant"异常。例:
eDoct := '李四''';
//实际中搜索值为从数据库中读取
FDoctDataSet.Locate('DoctName',eDoct,[]);
因程序中多处用到Locate,所以不可能在业余代码里改变什么,只能在TClientDataSet组件上入手,请各位大侠援手,十分感谢!
 
在组件上入手?!好像CDS没有源码啊...
建议在使用Locate的地方都用 QuotedStr 对要查找的文本进行预处理...
刚才看了一下Delphi源码,发现QuotedStr会在两端增加单引号——还是自己整一个没有
两端单引号的版本吧。
 
胡说八道。代码写错了,吼cds有bug
 
这个应该可以说是个bug .不过变通一个方法就可以解决了! 循环查找判断是否你要查的值就可以了.
 
确实是clientdataset的bug,修改原码好了
地质灾害不懂就不要说
clientdataset里面的bug不少,还有过滤的bug
 
clientdataset里是有些类型的bug,
我之前也遇到过,另外,对汉字的过滤是有些问题,
建议用其他方法解决,
俺之前是用两个同样的CDS,一个用来显示,一个用来查询(使用汉字查询条件)
然后把查询到的结果 CdsDisplay.data := CdsQuery.data
 
对中文,我的办法是转换为拼音首字,再查询
 
TClientDataSet没bug,只是不允许这样用
 
TClientDataSet过滤器不支持条件为String,要变通一下
 
在字符串里面的单引号变成两个可以解决这个问题
eDoct := '李四''';
eDoct := StringReplace(eDoct, '''', '''''',[...])
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
843
import
I
后退
顶部