我用Adoquery连接TClientdataset ,TClientdataset进行模糊查询,比如 cds.filter:='title = ''%黑色%'''; 会出现"type mismatch in expression"的错误,发现TField是twidestringfield都会出现这种错误,不管中文还是数字,如果我自己添加域,
  with TStringfield.Create(self) do
  begin
    fieldName:='title';
    size:=200;
    Dataset:=cds_item;
  end;
 再追加数据
  cds_item.CreateDataSet;
  cds_item.AppendRecord(['123456','测试一']);
 这样模糊查询就不会有问题;
 主要问题应该是在TWidestringfield类型上,若能把它变成TStringfield,应该就没问题,但是我的数据是从adoquery上获取的,access数据库,adoquery连接clientdataset后自动就是twidestringfield类型,无法变更;如果像上面那样自己添加域,又没办法连接到adoquery上的数据,请问有什么解决办法能让这个Twidestringfield变成tstringfield吗,折腾了一天,实在没法子,请高人帮忙,有什么解决办法吗!clientdataset

解决方案 »

  1.   

    这个提示我昨天刚碰到,但是我本机过滤都是好的,放到别的机器就出事,后来发现人家机器windows\system32下面有midas.dll,但是和我自己程序带的这个动态库大小不一样,我把delphi的那个midas.dll拷贝到system32下面,替换原来的就好了,不过这样不治本,最后还是给用到clientdataset的单元都加上了midaslib这个静态库,脱离动态库这个包袱,省得万一在装什么软件神马的,把我这个midas.dll给替换掉那个,title = ''%黑色%'' 带通配符,一般都是like吧,你咋用=  title like '%啥%'这样
      

  2.   

    谢谢nieyv2012,原来是这个原因啊~~~我还是想知道如何让Adoquery生成的数据为TStringField字段,自动都是TWidestringfield类型的,或者有没有其他变通的方法,比如用其他控件,因为widestringfield好像中文搜索有问题~我在网上搜索过一些内容,下面是引用别人的话
    “编程环境:D7、用ADO连接DB,ClientDataSet作内存表!
    BUG:直接从ADOQuery字段中拷贝到ClientDataSet,loopup汉字字段显示不完整!改回TStringField字段就OK了!”

    这最后一句不明白(改回TStringField字段就OK了),网上搜了半天也没找到方法,请问这个改回该如何改回! 
      

  3.   

    clientdataset俺也刚刚用,以前都是直接adoquery就完事,现在为了过滤后可以准确拖动那个dbgrid的滚动条,没得办法,只要改用clientdataset内存表,这个你可以试验一下,只用adoquery的话,一旦filter过滤,dbgrid的滚动条会很不正常,据说是不能准确RecNo定位就俺目前所知,双击clientdataset,然后new一个新的字段,界面上有type可以选择字段的类型,但是貌似不可以改成string,数据库过来啥样就啥样了,这个我没有测试过,你可以试试。话说我也用中文值的字段filter模糊查询过,一直没有碰到什么问题,除了那个midas.dll的版本不对造成的问题以外,一直都很正常,最近做的MIS也很正常,我感觉不太像是字段类型的问题,比如filter的赋值,你如果用到format,需要注意2个单引号才是一个单引号,%%才能出来%字符之类的问题,或者数据库的字符编码,我都用的utf8,gb2312好多符号之类的发现会出现乱码,你看看会不会是这方面的问题
      

  4.   

    谢谢nieyv2012,准备结贴了,最后一个问题请教nieyv2012,你说的"用到clientdataset的单元都加上了midaslib这个静态库" 这个是怎么操作法,我是菜鸟,不好意思!
      

  5.   

    每个单元开头,uses下面uses
      Windows, Messages, SysUtils, Variants, midaslib;   // 加上一个就行,以后就不用带着dll到处跑了就是程序会大个1~200k的样子