Delphi:使用数据库中的 BigInts
我使用 Delphi 7
和 devart dbExpress
连接到 SQLServer
。 问题是,当我将 bigInt
字段添加到 ClientQuery
时,它会显示为 TFMTBCDField
。
并且 TFMTBCDField
没有获取 64 位值的方法。
我可以使用 Field.AsVariant 或 StrToInt64(Field.AsString) 来选择这个 64 位值。
有没有更好的方法来选择/使用这个值?
I´m using Delphi 7
with devart dbExpress
to connect to SQLServer
.
The problem is that when I add a bigInt
field to a ClientQuery
it comes as TFMTBCDField
.
And the TFMTBCDField
don´t have a method to get the 64 bit value.
I can use the Field.AsVariant
or the StrToInt64(Field.AsString)
to pick this 64 bits value.
Is there a better way to pick/use this value?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
也许手动添加一个 TLargeIntField 到数据集,将其 FieldName 设置为适当的名称并使用这样的代码:
不记得确切的类型,但它在 Delphi6 中是这样工作的。
Maybe add a TLargeIntField manualy to dataset, set it's FieldName to appropriate name and use such code:
Do not remember exactly types, but it worked this way in Delphi6.
您可以使用 VarFMTBcdCreate 从单元 FMTBcd 将 BCD 转换为 Variant,然后转换为 int64。
试试这个:
You can convert the BCD to Variant and than to int64 with VarFMTBcdCreate from unit FMTBcd.
Try this:
TFMTBCDField
的数据格式是来自 FMTBcd 单元的TBcd
记录。您可以通过读取字段的Value
或AsBCD
属性来获取该原始值。根据您需要的值,
TBcd
可能就足够了。也就是说,您可能不需要将其转换为Int64
。 FMTBcd 单元提供对TBcd
值进行加、减、乘和除的函数。该单元不提供到
Int64
的转换。可以转换为Variant
、string
、Currency
、Double
和Integer
。如果我们要编写一个Int64
转换,Integer
转换可能是一个很好的起点,所以让我们看看它是如何实现的:那么,VCL 本身没有提供比通过
字符串
更直接的方法将TBcd
转换为Integer
。因此,您对字段的字符串版本调用StrToInt64
的想法似乎没问题。The data format for
TFMTBCDField
is theTBcd
record from the FMTBcd unit. You can get that raw value by reading the field'sValue
orAsBCD
properties.Depending on what you need the value for,
TBcd
might be sufficient. That is, you might not need to convert it to anInt64
. The FMTBcd unit provides functions to add, subtract, multiply, and divideTBcd
values.The unit provides no conversions to
Int64
. There are conversions toVariant
,string
,Currency
,Double
, andInteger
. If we were going to write anInt64
conversion, theInteger
conversion is probably a good place to start, so let's take a look at how it's implemented:So, the VCL itself doesn't provide any more direct way to convert a
TBcd
to anInteger
than to go throughstring
. Therefore, it looks like your idea to callStrToInt64
on the string version of the field is fine.我这里不再安装 Delphi 7,但是在帮助中,我看到你可以得到 Float (Double),如下所示:
然后,调用该函数:
I dont have Delphi 7 installed here anymore, but looking in the help, I see you can get as Float (Double), like this:
And then, call the function: