在使用ClientDataSet作过滤时,发现它不支持中文,有解决的办法吗?

2312 2003-08-05 09:34:01
我在使用ClientDataSet的过滤时,
它不支持中文,
即 ClientDataSet.filter='name='输液臂''
这时,它将不显示任何数据

有解决的方法吗?

或是它的替代品?
...全文
344 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hiflower 2003-08-06
  • 打赏
  • 举报
回复
Filter: 这个属性与 FindFirst、FindNext 方法配合使用。
Filtered: 这个属性为 True 时,应当在 OnFilterRecord 事件中用程序进行筛选
CommandText: 在 Close 状态下,把 SQL 语句赋给它,然后调用 Open( SELECT 语句) 或 Execute (非 SELECT 语句)方法
  • 打赏
  • 举报
回复
首先,打开服务端datamole窗体,右键点开你的数据集控件
(我的是adoquery),然后点fileds editor...,然后ctr+F键把所有的字段都加上,然后你会发现你的

datamodle窗体的unit上多了很多的定义
Tgg = class(TSoapDataModule, Igg, IAppServer,IAppServersoap)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSetProvider1: TDataSetProvider;
ADOQuery1id: TIntegerField;
ADOQuery1zbbm: TWideStringField;//全部改成TStringField
ADOQuery1zbmc: TWideStringField;//全部改成TStringField
ADOQuery1pym: TWideStringField;//全部改成TStringField
ADOQuery1zbjb: TWideStringField;//全部改成TStringField
ADOQuery1jldw: TWideStringField;//全部改成TStringField
ADOQuery1sypl: TWideStringField;//全部改成TStringField
ADOQuery1zbkj: TWideStringField;//全部改成TStringField
ADOQuery1zyxx: TWideStringField;//全部改成TStringField
ADOQuery1sjbm: TWideStringField;//全部改成TStringField
ADOQuery1gjbm: TWideStringField;//全部改成TStringField
ADOQuery1gjbmdysm: TWideStringField;//全部改成TStringField
ADOQuery1qysj: TDateTimeField;
ADOQuery1zzsj: TDateTimeField;

然后打开服务端datamole窗体,右键点view as text ,然后你会发现
object ADOQuery1: TADOQuery
Active = True
Connection = ADOConnection1
CursorType = ctStatic
Parameters = <>
SQL.Strings = (
'select * from z_jbzbk')
Left = 112
Top = 24
object ADOQuery1id: TIntegerField////全部改成TStringField
FieldName = 'id'
end
object ADOQuery1zbbm: TStringField
FieldName = 'zbbm'
Size = 50
以上是服务端的修改。
接下来,用相同的步骤改客户端的。这样就好了。我测试通过
不停歇的步伐 2003-08-06
  • 打赏
  • 举报
回复
应该可以的,你换sql2000的数据库试试看
2312 2003-08-06
  • 打赏
  • 举报
回复
to :goldstar365(星光宝盒)、samcrm(阿靖)



我也试过了,数据库中有相关记录,但执行后返回记录集为0
(也不出错,就是没有返回结果)

2312 2003-08-06
  • 打赏
  • 举报
回复
to :EastenChild(东方之子,天高云淡)

我试了,执行也通过了,返回记录为0





zhoutian618 2003-08-05
  • 打赏
  • 举报
回复
你的数据集没有打开啊。

ClientDataSet1.Active:=True;
ClientDataSet1.Filtered:=false;
ClientDataSet1.Filter:='name='''+trim(edit1.text)+'''';
ClientDataSet1.Filtered:=true;
if ClientDataSet1.RecordCount =0 then
showmessage('没有符合条件的记录');

2312 2003-08-05
  • 打赏
  • 举报
回复
to : theone_jxm()

我的代码如下:

ClientDataSet1.Filtered:=false;
ClientDataSet1.Filter:='name='+#39+trim(edit1.text)+#39;
ClientDataSet1.Filtered:=true;
if ClientDataSet1.RecordCount =0 then
showmessage('没有符合条件的记录');

因该没有错吧?

另外,我用的是access数据库
问:
把所有的TWideStringField统统地改为 TStringField型怎么改,在什么地方改?

谢谢! ^_^
2312 2003-08-05
  • 打赏
  • 举报
回复
to: pwzhu666(暴龙)

我试了,出错"cannot preform this operation on an open dataset"



什么原因?
  • 打赏
  • 举报
回复
MIDAS怎么可能会不支持中文,CLIENTDATASET 采用的是XML格式,而XML支持UNICODE字符集,所以也支持中文了,而且更多!

ClientDataSet1.Filtered:=true;//你为什么没加??
ClientDataSet1.Filter:='property=''年报''';//你的引号是不是没有加上?

我用得好好的。我的数据库是sqlserver2000,delphi6.连接方式是webservie SoapConnection1.
另外你的数据库是什么?
如果是access解决方法是:
Access数据库你加入字段时它默认字符串是TWideStringField型。把所有的TWideStringField统统地改为 TStringField型就行了!
pwzhu666 2003-08-05
  • 打赏
  • 举报
回复
用clientdaset1.commandtext:='select * from 表 where name:='输液臂'';代替啊
samcrm 2003-08-05
  • 打赏
  • 举报
回复
ClientDataSet可以支持中文。
你的filter赋值语句错误。
ClientDataSet.filter='name=''输液臂''';
空中居士 2003-08-05
  • 打赏
  • 举报
回复
下面是我的测试,通过没问题:sql2000

frmData.cdsHtcg.Filtered:=false;
frmData.cdsHtcg.Filter:='会签状态='+#39+'我方会签'+#39;
frmData.cdsHtcg.Filtered:=true;
if frmData.cdsHtcg.RecordCount =0 then
showmessage('没有符合条件的记录');

下边的我没测,估计是'name='后的+'''问题

ClientDataSet1.close;
ClientDataSet1.Filtered:=false;
ClientDataSet1.open;
ClientDataSet1.Filter:='name='+'''+trim(edit1.text)+''';
ClientDataSet1.Filtered:=true;
if ClientDataSet1.RecordCount =0 then
showmessage('没有符合条件的记录');

这样就可以拉
Tiejun_Chenfang 2003-08-05
  • 打赏
  • 举报
回复
大部分数据控件中中文都要加上方括号
EastenChild 2003-08-05
  • 打赏
  • 举报
回复
我用过的啊 没有问题啊

sFilter2 := Format('EMCSUBIITEM = ''%s''',[sSubItem]);
...
cdsData.Filter := sFilter2;
cdsData.Filtered := true;
其中sSubItem 就是中文

你试试Format一下呢
2312 2003-08-05
  • 打赏
  • 举报
回复
to :zhoutian618(周天)

跟打开没有关系

我已经试过了,不行的

如:
ClientDataSet1.close;
ClientDataSet1.Filtered:=false;
ClientDataSet1.open;
ClientDataSet1.Filter:='name='''+trim(edit1.text)+'''';
ClientDataSet1.Filtered:=true;
if ClientDataSet1.RecordCount =0 then
showmessage('没有符合条件的记录');

数据库里面有记录,但还是没有结果

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧