Delphi:使用数据库中的BigInts

时间:2009-09-01 01:24:34

标签: sql-server database delphi biginteger

我正在使用Delphi 7devart dbExpress连接到SQLServer。 问题是,当我向bigInt添加ClientQuery字段时,它会显示为TFMTBCDField

并且TFMTBCDField没有获得64位值的方法。

我可以使用Field.AsVariantStrToInt64(Field.AsString)来选择此64位值。

是否有更好的方法来选择/使用此值?

4 个答案:

答案 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记录。您可以通过阅读字段的ValueAsBCD属性来获取原始值。

根据您需要的值,TBcd可能就足够了。也就是说,您可能不需要将其转换为Int64 FMTBcd 单元提供了添加,减去,乘法和除TBcd个值的函数。

该单元不向Int64提供转换。转化为VariantstringCurrencyDoubleInteger。如果我们要编写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;