CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

ClientDataSet控件Filter问题!急,请高手帮忙!!

楼主soyisoft(Gino)2004-09-01 12:59:08 在 Delphi / 数据库相关 提问

D7+MS   SQL   数据库开发  
   
  使用ClientDataSet控件,在客户端作数据过虑。  
  由于需要多语言的特性,在数据库中使用了nvarchar数据类型,ClientDataSet中为   TWideStringField   对象。  
   
   
  发现的问题:  
       
      中文过虑不正常   (如果是TStringField对象的中文就没有问题)    
      不能在   TWideStringField   的列查询中使用Like,会报错。(TStringField对象中可以使用Like)  
         
  应该是由于Unicode的问题吧,那么上面的问题如何解决?  
   
  实在不行,不使用like也罢了,但是中文都不能过虑,实在说不过去呀!  
   
  拒绝以下类似答案:  
   
      1、加引号或使用quotedstr函数。  
      2、直接用SQL查询。  
      3、把nvarchar数据类型改为非Unicode数据类型  
      4、把TWideStringField改为TStringField   (我测试过,这样作还是不行)  
   
  测试代码:  
   
      ClientDataSet1.Filtered:=false;  
      ClientDataSet1.Filter:=Edit1.Text;  
      ClientDataSet1.Filtered:=true;  
   
      当  
      Edit1.Text中的值为“name   like   'c%'”时报错  
      Edit1.Text中的值为“name   like   '%某某%'”时报错  
      Edit1.Text中的值为“name   =   'cs'”时过虑正常  
      Edit1.Text中的值为“name   =   '某某'”时过虑失败(数据集中有name为某某的记录,但过虑后无记录)  
   
  往高人指点!!多谢多谢!!!分不够我可以再给!! 问题点数:100、回复次数:19Top

1 楼soyisoft(Gino)回复于 2004-09-01 14:17:23 得分 0

顶,看看有高手没!Top

2 楼qiujsh(www.chinascsoft.com)回复于 2004-09-01 14:32:42 得分 0

语法结构应该是  
  “name   =   '*某某*'”  
   
  但是不知道什么原因,查不出来,clientdataset不支持楼主写的like的语法Top

3 楼soyisoft(Gino)回复于 2004-09-01 22:00:55 得分 0

楼上兄弟,TStringField是可以使用   like   查询的(包括中文),不信你试试。  
   
  但是TWideStringField就不能用like   而且中文都查不出。  
   
  应该是Unicode的问题,但是怎么解决哪?Top

4 楼soyisoft(Gino)回复于 2004-09-01 22:01:36 得分 0

继续期待高手的降临!Top

5 楼theone_jxm()回复于 2004-09-01 22:15:14 得分 5

是Unicode的问题,把delphi自动生成字段类型手工改称TStringFieldTop

6 楼theone_jxm()回复于 2004-09-01 22:17:49 得分 5

把TWideStringField改为TStringField   ,有两个地方要改,以个是form文件,一个是.pas你都该国了?  
  Top

7 楼swei56(泥巴)回复于 2004-09-01 22:37:28 得分 10

TCustomClientDataSet的某些局限  
  操作函数   例子         是否支持  
  Comparisons  
  = State   =   'CA' Yes  
  <> State   <>   'CA' Yes  
  >= DateEntered   >=   '1/1/1998' Yes  
  <= Total   <=   100,000 Yes  
  > Percentile   >   50 Yes  
  < Field1   <   Field2 Yes  
  BLANK State   <>   'CA'   or   State   =   BLANK Yes  
  IS   NULL Field1   IS   NULL No  
  IS   NOT   NULL Field1   IS   NOT   NULL No  
   
  Miscellaneous  
  Like Memo   LIKE   '%filters%' No  
  In Day(DateField)   in   (1,7) No  
  * State   =   'M*' Yes  
  ------------------------------------------------------  
  如果要用filter功能和ado的话还是用三个ado数据集Top

8 楼zhlmxh(梦想成真)回复于 2004-09-02 00:55:50 得分 0

TDataSet的Filter不支持Like函数Top

9 楼soyisoft(Gino)回复于 2004-09-02 07:00:17 得分 0

列对象是由代码生成的,曾经尝试过将nvarchar类型的列对象改成TStringField但是会出类型不匹配的错误。Top

10 楼soyisoft(Gino)回复于 2004-09-02 07:09:55 得分 0

谁还有好的解决方式?Top

11 楼Jeff20040819(美丽)回复于 2004-09-02 17:31:35 得分 0

学习,接分Top

12 楼soyisoft(Gino)回复于 2004-09-03 13:31:55 得分 0

難道又要變成散分帖?!??!!!!Top

13 楼timelyraining(Henry)回复于 2004-09-03 13:52:25 得分 20

我以前遇到过类似的问题:  
  解决方法:  
  在SQL语句上把类型   varchar   与nvarchar   做转换。  
  Top

14 楼soyisoft(Gino)回复于 2004-09-03 16:40:40 得分 0

这个方法…………   写SQL就麻烦了。不过如果实在不行到是也可以考虑。  
   
   
  我试过在数据集里面用TStringField替代TWideStringField,但是会提示数据类型不匹配。  
   
  头痛,谁还有什么好办法吗?继续等…………Top

15 楼befree(似有似无)回复于 2004-09-04 11:22:29 得分 20

help里面都说了,高手也不能重写平台。  
  不用Filter,当然还得用sql的where  
  Filter不标准,是borland实现的,原则上应该少用。Top

16 楼soyisoft(Gino)回复于 2004-09-06 12:06:09 得分 0

用where当然可以,但是效率不高。还是想在前台过虑。Top

17 楼pengzhengling(重新来过)回复于 2004-09-14 10:27:54 得分 0

TClientDataSet的Filter不支持像LIKE这样的语法,即字符串匹配,只有用TClientDataSet.FilterRecord事件中,就可以解决  
  Accpet   :=   DataSet.FieldByName('你要的字段').AsString.AnsiPos('过滤内容')>0Top

18 楼Dreamnest(创新永无止境)回复于 2004-11-04 17:25:46 得分 40

“timelyraining(恨天)  
  我以前遇到过类似的问题:  
  解决方法:  
  在SQL语句上把类型   varchar   与nvarchar   做转换。”  
   
  说得对,把NVARCHAR改成VARCHAR就可以过滤了,Top

19 楼soyisoft(Gino)回复于 2004-11-17 19:15:10 得分 0

谢谢大家,结帖!Top

相关问题

  • 急寻控件
  • 急求Tdialup控件
  • Ado Data控件??急
  • ADO Data控件?急??
  • 急需InfoPower控件
  • 急!串口控件
  • TQuery + TDBGrid 控件——急
  • 急求odac控件!!
  • 急求button控件
  • 急求VideoCap控件

关键词

  • 数据
  • 函数
  • 中文
  • 解决
  • unicode
  • ca
  • sql
  • tstringfield
  • twidestringfield
  • 过虑

得分解答快速导航

  • 帖主:soyisoft
  • theone_jxm
  • theone_jxm
  • swei56
  • timelyraining
  • befree
  • Dreamnest

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo