【发布时间】:2012-07-25 03:30:08
【问题描述】:
如何将 SQL Server 类型numeric(38,0) 表示为 IDL 类型(COM 类型库)?
非常感谢您的帮助!
附:例如,SQL Server 类型 int 在 IDL 中是 long 类型。
【问题讨论】:
-
如果您能用 IDL 表示该类型,我会感到惊讶。
标签: sql-server delphi com idl typelib
如何将 SQL Server 类型numeric(38,0) 表示为 IDL 类型(COM 类型库)?
非常感谢您的帮助!
附:例如,SQL Server 类型 int 在 IDL 中是 long 类型。
【问题讨论】:
标签: sql-server delphi com idl typelib
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 对象的两侧找到库。
【讨论】: