TClientDataSet的Locate不能处理中文,为了解决这个问题,在网上找了个Midas.Dll的补丁,就是包含Midas.dll和Fix.dll的那个补丁,一直以来没看到这个补丁在网上反应有什么问题,但是没想到这个补丁还是有BUG,被我碰到了。
BUG和Locate函数的Options: TLocateOptions有关。
三层里客户端在TClientDataSet里表现数据后用Locate函数,如果搜索的内容是数字,并且搜索的记录在TclienDataSet里位于第一行,那么下面两种写法返回的值是不一样的
TClientDataSet.Locate('BUSSID',VarArrayOf(['2']),[loCaseInsensitive]); //返回False,也就是没找到记录
TClientDataSet.Locate('BUSSID',VarArrayOf(['2']),[]); //返回True,找到记录
但是用原版的MIdas.dll,上面两种语句都能找到记录。
这么个BUG怎么在google从来没有找到有人反应呢。晕死,看样子还是要用回原版的Midas.dll。自己写函数解决Locate无法搜索中文的问题了。
除了这个,还有人能提供更好的解决办法吗?
BUG和Locate函数的Options: TLocateOptions有关。
三层里客户端在TClientDataSet里表现数据后用Locate函数,如果搜索的内容是数字,并且搜索的记录在TclienDataSet里位于第一行,那么下面两种写法返回的值是不一样的
TClientDataSet.Locate('BUSSID',VarArrayOf(['2']),[loCaseInsensitive]); //返回False,也就是没找到记录
TClientDataSet.Locate('BUSSID',VarArrayOf(['2']),[]); //返回True,找到记录
但是用原版的MIdas.dll,上面两种语句都能找到记录。
这么个BUG怎么在google从来没有找到有人反应呢。晕死,看样子还是要用回原版的Midas.dll。自己写函数解决Locate无法搜索中文的问题了。
除了这个,还有人能提供更好的解决办法吗?
经过仔细比对测试,发现在采用ORACLE的OleDB驱动时才会出现该问题,采用Microsoft的for Oracle OleDB驱动时没有上面的问题。看来这是数据库驱动底层出的问题。Oracle驱动的BUG不少啊。实际使用过程中还碰到过Oracle的驱动的其他问题。
locate确实不怎么好用,你又没办法去改源码。
ftp://TiburonField:[email protected]