如何将SQL Server类型numeric(38,0)
表示为IDL类型(COM类型库)?
非常感谢您的帮助!
P.S。例如,IDL中的SQL Server类型int
是long
类型。
答案 0 :(得分:5)
COM中的数字可能是:
Int64
)的整数 - 最多19位有效数字; double
)的浮点值 - 从15 - 17位有效十进制数字精确度。因此对于38位数字,这些类型都不符合您的要求。您可以使用Int64
获得最佳分辨率,但如果您的值高于9,223,372,036,854,775,807,则会出现溢出。
我认为更简单的兼容类型是一个好的旧BSTR(widestring
),您可以在其中存储尽可能多的数字 - 但编码为纯文本。在代码方面,您需要有一个BCD库来处理高分辨率数字:没有Delphi原生类型(甚至extended
)具有这样的分辨率。
编辑:另一个选项(感谢提案的Ondrej)是一个字节数组。恕我直言COM二进制数组不像文本内容那么容易(并且速度效率较低,即使它使用较少的内存)。编码选项可以是good old BCD。您可以在COM对象的两侧找到库。