function EncodeUnicodeSQL(Value:WideString):String; //encode the widestring to string of unicode ascii set //be used for search unicode char in SQL server //2003.03.21 var I:Integer; begin Result:=''; for I:=1 to Length(Value) do begin if I>1 then begin Result:=Result+'+'; end; Result:=Result+'NCHAR('+IntToStr(Word(Value[I]))+')'; end; end;useage: try if Length(MusicName)>0 then begin sql:=' (music_name LIKE ''%'' + ' + EncodeUnicodeSQL(MusicName) + ' + ''%'')'; end; if Length(AlbumName)>0 then begin if Length(sql)>0 then begin sql:=sql + ' AND '; end; sql:=sql + ' music_id IN (SELECT music_id FROM music_album WHERE album_id IN ' + ' (SELECT album_id FROM album_m WHERE album_name LIKE ''%'' + ' + EncodeUnicodeSQL(AlbumName) + ' + ''%''))'; end; if Length(ArtistName)>0 then begin ....
ClientDataSet1.CommandText:='select * from where ......';
ClientDataSet1.Open;
ClientDataSet1.CommandText:='select * from where PARAM1=:PARAM......';
ClientDataSet1.ParamByName('PARAM').AsString := '...'; //这里的参数无所谓中英文,只要保证正确
ClientDataSet1.Open;
如GoodsID=:GoodsID
在客户端
ClientDataSet1.close;
ClientDataSet1.Paramts.Parambyname('GoodsID').value := '商品'
ClientDataSet1.Open;
这样查询不出,如果换成英文则可以!
有办法解决吗?
如果数据库是SqlSelver,请使用:Ole DB Provider for Sql Server 来连接数据库。
否则可能会发生你遇到的问题!
本来就是用Ole DB Provider for Sql Server 连接数据库的!
同时又发现一个问题
过滤时有中文也不行
如: filter := 'name like '%'笔'%'';
查不出结果!而数据库中是确实存在这样的数据!
如果不是全包含就没问题
如: filter := 'name like ''笔'%'';
这是怎么回事??
如果是的话,请不要用clientdataset的locate,filter了,不能用
可能是数据库和ado驱动的关系
我也遇到这个问题,没有能解决
我用cxGrid了,它可以filter,
当我的服务器端用dbExpress可以使用locate filter
我们数据库是orcale的,
试用一下CLientDataset.DataRequest 方法传参数2、有没有人用过asta?
asta 是什么??3、如果不是全包含就没问题
如: filter := 'name like ''笔'%'';
这是怎么回事?? 这种可以用ClientDatset.commandtext 传 入SQL语句试试
//encode the widestring to string of unicode ascii set
//be used for search unicode char in SQL server
//2003.03.21
var
I:Integer;
begin
Result:='';
for I:=1 to Length(Value) do begin
if I>1 then begin
Result:=Result+'+';
end;
Result:=Result+'NCHAR('+IntToStr(Word(Value[I]))+')';
end;
end;useage:
try
if Length(MusicName)>0 then begin
sql:=' (music_name LIKE ''%'' + ' + EncodeUnicodeSQL(MusicName) + ' + ''%'')';
end;
if Length(AlbumName)>0 then begin
if Length(sql)>0 then begin
sql:=sql + ' AND ';
end;
sql:=sql + ' music_id IN (SELECT music_id FROM music_album WHERE album_id IN '
+ ' (SELECT album_id FROM album_m WHERE album_name LIKE ''%'' + ' + EncodeUnicodeSQL(AlbumName) + ' + ''%''))';
end;
if Length(ArtistName)>0 then begin
....
的方法