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

  • 主题发起人 主题发起人 程云
  • 开始时间 开始时间

程云

Unregistered / Unconfirmed
GUEST, unregistred user!
我在使用ClientDataSet的过滤时,
它不支持中文,
即 ClientDataSet.filter='optype='购入''
这时,它将不显示任何数据
有解决的方法吗?
或是它的替代品?
 
绝对支持中文
看看'optype='购入''有没有多余的空格
可以试试'optype='购入*'';
 
我又试过了一边,还是不行,
不论是 'optype='购入'' 还是 试'optype='购入*''
而且绝对没有多余的空格什么的,我专业查过这个。
 
% 如何?
用的ADO,并且字段是Char,得到的数据是补足空格的数据。
CDS我现在天天用,每一点问题。
 

'optype='购入%''我也试过了,还是不行,
而且我也看过,具体在哪栅格中查过,后面没有跟空格的。
因为我在应用服务器上有以下的程序,所以,不会因有类型问题而多补空格的。
procedure TItemSaleFZServer.adodSalelistAfterOpen(DataSet: TDataSet);
var
i: integer;
begin
for i:=0 to Dataset.FieldCount-1do
begin
DataSet.Fields.ProviderFlags:=[pfinUpDate];
end;
DataSet.FieldByName('ID').ProviderFlags:=[pfInWhere,pfInKey];
end;

我试过多次,都不行,我用的是ACCESS97的数据库,使用的是DCOM来作三层结构。
EXE的应用服务器。
 
可不要乱下结论哟,MIDAS怎么可能会不支持中文,它可是DELPHI中的精华呀,CLIENTDATASET
采用的是XML格式,而XML支持UNICODE字符集,所以也支持中文了,而且更多!
之所以不正确,是因为你的过滤表达式的语法不正确呀,应该这样写:
procedure FilterProc(DataSet:TDataSet);
var
x:String;
begin
x:='optype=';
x:=x+''''+'购入'+'''';
DataSet.Filted:=True;
DataSet.Filter:=x;
end;
 
To mypine:
老兄,你这段代码试过了吗?
能行吗?我可又用它试了多遍,不是不行。

真的不行,同样的方法,我在ADODataSet上用就没问题。
你们能试一下好吗?真的不行,
 
这样应该可以了。
ClientDataSet.filter='optype=''购入'' '
 
我也遇到过同样的问题,我发现filter内容不是中文时,clientdataset就可以执行filter方法
后来只好放弃用filter方法,改用sql语句直接进行过滤:commandtext:='select * from where ...'
就可以了,你也可以试试。
 
或者,ClientDataSet.filter='optype='+QuotedStr('购入')
 
哪是当然的了,即然过滤不能用,我就只有用SQL去查了,
只是不能总这样用吧,在数据少时是没什么,
记录数太大时可就不行了
 
ado确实有很多bug,有时候locate都有问题,事务也有问题。这玩艺好是好,自己捉摸者用吧,
最好能看看他的源代码,也许有改进。我曾经碰到一些问题,后来都只能改它的代码
 
程云 wrote that:
//老兄,你这段代码试过了吗?
//能行吗?我可又用它试了多遍,不是不行。
//
//
//真的不行,同样的方法,我在ADODataSet上用就没问题。
//
//你们能试一下好吗?真的不行,
这段代码的确是可行的,你得相信,Midas支持中文的能力比你想象中的还要好。运行上面
哪段代码应该是不会报错的,如果没有出现你预期的结果,可能是你的字段的内容有出入。
我也出现过类似的问题,结果发现是少加了空格。'购入'? or '购入 '
 
to yanghaijun:
你的这个方法不行的,我也试过了。
to gutian:
要改这个东西,是不是太难了点了,我可没有改过的。
to mypine:
我这样用,并不会出现错误,出现的只是不给你显示任何过滤后的数据,
而且,其中并没有什么多了空格,这个我早也就注意到了。
同样的语句,我在ADODateset中用就很好。
真没有办法
 
用adoDataset吧!
 
可以用:ClientDataSet.filter='optype like '%购入%''
但过滤单个汉字时有问题:ClientDataSet.filter='optype like '%购%''
 
在ClientDataSet中能使用Like作模糊查询吗?
我是这样写的
ClientDataSet1.Filter:='optype like ''%购入%''';
ClientDataSet1.Filtered:=True;
出错,并提示"表达式类型匹配不当"
 
可能是此字段包含NULL值,查询时用NVL试试;
支持中文绝对没问题
 
delphi的过滤问题多多,还是能不用就不用。
 
我想你是不是用了TWIDESTRINGFIELD,Delphi对WIDESTRING支持太有限,我以前也遇到汉字
不能过滤的情况,结果就是用了TWIDESTRINGFIELD。
Delphi对TWIDESTRINGFIELD操作时,错误一大堆,长度问题一直没解决,那次问李维,他也
没说出该怎么解决。
 
后退
顶部