Locate 的问题(800)(200分)

  • 主题发起人 主题发起人 fox007
  • 开始时间 开始时间
F

fox007

Unregistered / Unconfirmed
GUEST, unregistred user!
我在Delphi6的ClientDataSet中使用LOCATE,FILTER,LOOPUP,发现都不能查找中文字串,
例如:
ClientDataSet1.Locate('Country', '中国',[loPartialKey]);
无法定位到正确记录。
如果查找的是英文字串能正确定位记录。
如果用BDETable或ADOTable的 Locate 没有这个问题。
或SQL_Server2000也没有该问题
 
是的,我也遇到过同样的问题,
所以自己写个函数来找
function TUser_Form.sftm(c1: TClientDataSet;bm,zdm,val1:string): Boolean;
begin
c1.Close;
c1.Params.Clear;
c1.CommandText:='Select * from '+bm+'where upper(ltrim(rtrim('+zdm+')))=:vName ';
c1.Params.CreateParam(ftString, 'vName', ptInput);
c1.Params.ParamValues['vName']:=UpperCase(trim(val1));
c1.Open;
if c1.RecordCount>0 then
Result := true
else
Result:=false;
end;
 
在win2000下一切正常
 
你的是在98下?
 
不知道你用什么数据库?我用sql server没出现问题!
 
这种莫名其妙的问题叫人怎么说~
 
同意楼上
 
sql server 也是正常的,就是在win98 下,用access数据库时不正常!
 
Access使用locate的确不行。
查了查旧帖,原来早有人讨论过了。是Access的问题,和Delphi无关。
来自:silicon, 时间:2001-9-12 16:44:00, ID:622103 | 编辑
在这里我首先要谢谢大家!然后再告诉我自己的解决办法,绝对是一个让人想不到的办法!
我的解决方法是:
Access数据库你加入字段时它默认字符串是TWideStringField型。这就是一切罪恶的根源!
(有人可能想到了)
把所有的TWideStringField统统地改为 TStringField型就行了!
look:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=583696
 
多人接受答案了。
 
后退
顶部