对大富翁 太失望了 一点人气都没有了.... locate boolean 字段 为什么 找不到... ( 积分: 50 )

  • 主题发起人 主题发起人 令狐小侠
  • 开始时间 开始时间

令狐小侠

Unregistered / Unconfirmed
GUEST, unregistred user!
在用clientdataset .locate 来 定位的时候,,其他字段 都没问题
为什么 有 boolean 字段的时候 就 找不到了...
例如:有记录
Afield Bfield
A , true ,...

locate('AFieldName;Bfield',vararrayof(['A',true]),[])
找不到 记录.....高人 指点啊....
 
为什么 没人 顶啊.....
 
true 换成 1
false 换成 0
 
to ysai 显然 你没有 试过...乱回答...
 
应该能找到得,你看看你的程序是不是大小写或者空格等因素。
 
我是用ado试的,不好意思
如果用ClientDataSet,要改源码
DBClient.pas
函数
function TCustomClientDataSet.LocateRecord(const KeyFields: string;
const KeyValues: Variant; Options: TLocateOptions;
SyncCursor: Boolean): Boolean;
把下面的
if VarIsNull(Value) then
Expr := Expr + Format('[%s] IS NULL',[TField(Fields).FieldName]) { Do not localize }
else
Expr := Expr + Format('[%s]=%s',[TField(Fields).FieldName, ValStr]);
改为
if VarIsNull(Value) then
Expr := Expr + Format('[%s] IS NULL',[TField(Fields).FieldName]) { Do not localize }
else
if TField(Fields).DataType = ftBoolean then
begin
if Value = 0 then
Expr := Expr + Format('NOT [%s]',[TField(Fields).FieldName])
else
Expr := Expr + Format('[%s]',[TField(Fields).FieldName]);
end
else
Expr := Expr + Format('[%s]=%s',[TField(Fields).FieldName, ValStr]);
然后把DBClient.pas加入到工程中编译就行了
 
多谢: ysai
有没有 其他办法?..这样 修改 的 话,以后 会不会 引起 别的问题呢?
borland 工程师..怎么没考虑 到 这个问题呢....郁闷中....
 
接受答案了.
 
后退
顶部