如何将SQL Server类型numeric(38,0)
表示为IDL类型(COM类型库)?
非常感谢你的帮助!
附言:例如,SQL Server类型int
是IDL中的long
类型。
COM中的数字可以是:
- 最多64位的整数(
Int64
),因此最多19位有效数字 - 浮点值最高可达64位(
double
),精度为15-17位有效十进制数字
因此,对于38位数字,这些类型都不符合您的要求。使用Int64
可以获得最佳分辨率,但如果您的值高于9223372036854775807,则会出现溢出。
我认为更容易兼容的类型是一个好的旧BSTR(widestring
),在其中可以存储任意数量的数字,但编码为纯文本。在代码方面,您需要有一个BCD库来处理高分辨率的数字:没有Delphi原生类型(甚至extended
)具有这样的分辨率。
编辑:另一个选项(感谢Ondrej的提议)是字节数组。IMHO COM二进制数组不如文本内容简单(即使使用较少的内存,在速度方面效率也较低)。编码选项可能是好的旧BCD。您可以在COM对象的两侧找到库。