0

如何将 SQL Server 类型表示numeric(38,0)为 IDL 类型(COM 类型库)?

非常感谢您的帮助!

PS 例如,SQL Server 类型intlongIDL 中的类型。

4

1 回答 1

5

COM 中的数字可能是:

  • 最多 64 位的整数 ( Int64) - 最多 19 位有效数字;
  • 高达 64 位 ( ) 的浮点值double- 15 - 17 位有效十进制数字精度。

因此,对于 38 位数字,这些类型都不符合您的要求。您可以使用 获得最佳分辨率Int64,但如果您的值高于 9,223,372,036,854,775,807,您将达到溢出。

我认为更容易兼容的类型是一个很好的旧 BSTR ( widestring),您可以在其中存储任意数量的数字 - 但编码为纯文本。在代码方面,您将需要一个 BCD 库来处理您的高分辨率数字:没有 Delphi 本机类型(甚至extended)具有这样的分辨率。

编辑:另一个选项(感谢 Ondrej 的提议)是一个字节数组。恕我直言,COM 二进制数组不如文本内容容易(即使它使用较少的内存,速度效率也较低)。编码选项可能是很好的旧 BCD。您可能能够在 COM 对象的两侧找到库。

于 2012-07-26T16:38:34.937 回答