今天使用Loacte定位一个浮点类型的时候发现大于0小于1的浮点数会出现异常DataSet.Locate('F_Je',0.7,[loCaseInsensitive]);异常为:‘filter expression character:'.' ……’我调试到DBClient单元是发现了这段代码 case TField(Fields[i]).DataType of
ftString, ftFixedChar, ftWideString, ftGUID:
if (i = Fields.Count - 1) and (loPartialKey in Options) then
ValStr := Format('''%s*''',[VarToStr(Value)]) else
ValStr := Format('''%s''',[VarToStr(Value)]);
ftDate, ftTime, ftDateTime, ftTimeStamp:
ValStr := Format('''%s''',[VarToStr(Value)]);
ftSmallint, ftInteger, ftWord, ftAutoInc, ftBoolean, ftFloat, ftCurrency, ftBCD, ftLargeInt, ftFMTBcd:
ValStr := VarToStr(Value);
else
DatabaseErrorFmt(SBadFieldType, [TField(Fields[i]).FieldName]);
end;
经过ValStr := VarToStr(Value);转换后 ValStr变成了 .7 把 0给去掉了所以就出现了上面的异常
请问大家怎样在不改变系统源码的情况下让Locate正常使用呢?
我做的是一个模块,不能修改字段类型,不能修改系统源码 我使用的是Delphi 6
ftString, ftFixedChar, ftWideString, ftGUID:
if (i = Fields.Count - 1) and (loPartialKey in Options) then
ValStr := Format('''%s*''',[VarToStr(Value)]) else
ValStr := Format('''%s''',[VarToStr(Value)]);
ftDate, ftTime, ftDateTime, ftTimeStamp:
ValStr := Format('''%s''',[VarToStr(Value)]);
ftSmallint, ftInteger, ftWord, ftAutoInc, ftBoolean, ftFloat, ftCurrency, ftBCD, ftLargeInt, ftFMTBcd:
ValStr := VarToStr(Value);
else
DatabaseErrorFmt(SBadFieldType, [TField(Fields[i]).FieldName]);
end;
经过ValStr := VarToStr(Value);转换后 ValStr变成了 .7 把 0给去掉了所以就出现了上面的异常
请问大家怎样在不改变系统源码的情况下让Locate正常使用呢?
我做的是一个模块,不能修改字段类型,不能修改系统源码 我使用的是Delphi 6
这个是Delphi 6 中的 Bug 吗?还是有其他用意?