我正在使用Delphi 7
与devart dbExpress
连接到SQLServer
。
问题是,当我向bigInt
添加ClientQuery
字段时,它会显示为TFMTBCDField
。
并且TFMTBCDField
没有获得64位值的方法。
我可以使用Field.AsVariant
或StrToInt64(Field.AsString)
来选择此64位值。
是否有更好的方法来选择/使用此值?
答案 0 :(得分:4)
也许可以将TLargeIntField手动添加到数据集中,将其FieldName设置为适当的名称并使用此类代码:
SomeInt64Value := (qryMyQuery.FieldByName('blahblah') as TLargeIntField).AsLargeInt;
不记得确切的类型,但它在Delphi6中以这种方式工作。
答案 1 :(得分:0)
您可以使用单位FMTBcd中的VarFMTBcdCreate将BCD转换为Variant而不是int64。
试试这个:
var value64 : int64;
...
value64 := VarFMTBcdCreate(Field.Value);
答案 2 :(得分:0)
TFMTBCDField
的数据格式是来自 FMTBcd 单元的TBcd
记录。您可以通过阅读字段的Value
或AsBCD
属性来获取原始值。
根据您需要的值,TBcd
可能就足够了。也就是说,您可能不需要将其转换为Int64
。 FMTBcd 单元提供了添加,减去,乘法和除TBcd
个值的函数。
该单元不向Int64
提供转换。转化为Variant
,string
,Currency
,Double
和Integer
。如果我们要编写Int64
转换,Integer
转换可能是一个很好的起点,那么让我们来看看它是如何实现的:
function BcdToInteger(const Bcd: TBcd; Truncate: Boolean = False): Integer;
var
ABcd: TBcd;
begin
if Truncate and (BcdScale(Bcd) > 0) then
NormalizeBcd(Bcd, ABcd, Bcd.Precision, 0)
else
ABcd := Bcd;
Result := StrToInt(BcdToStr(ABcd));
end;
因此,VCL本身不提供将TBcd
转换为Integer
而不是通过string
的更直接方式。因此,看起来你想在字段的字符串版本上调用StrToInt64
就好了。
答案 3 :(得分:-1)
我再也没有安装Delphi 7,但是在帮助中,我看到你可以像Float(Double)一样,这样:
function GetFieldAsInt64(Field: TField): Int64;
begin
Result:= Int64(Round(Field.GetAsFloat));
end;
然后,调用函数:
var
Value: Int64;
begin
Value:= GetFieldAsInt64(MyFMTBCDField);
end;