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无法搜索中文的问题了。
除了这个,还有人能提供更好的解决办法吗?

解决方案 »

  1.   

    我不是要用Filter做变通,况且Filter本身也有中文字符的问题。
    经过仔细比对测试,发现在采用ORACLE的OleDB驱动时才会出现该问题,采用Microsoft的for Oracle OleDB驱动时没有上面的问题。看来这是数据库驱动底层出的问题。Oracle驱动的BUG不少啊。实际使用过程中还碰到过Oracle的驱动的其他问题。
      

  2.   

    改下字体测试一下.要用补丁的MDIAS.DLL
      

  3.   

    没办法,DELPHI确实有很多BUG,忍受啦
      

  4.   

    我用的TClientDataSet.Locate在SQLSERVER上没问题,但在ORACLE上就有这个问题,我觉得是ORACLE底层的问题。
      

  5.   

    想想其他的途径吧
    locate确实不怎么好用,你又没办法去改源码。
      

  6.   

    据说目前最新的D2009的update3已经解决了这个问题,不过UPDATE3目前还是BETA版。你可以到官方网站上下载到的
    ftp://TiburonField:[email protected]