【问题标题】:How to represent SQL Server type numeric(38,0) as IDL type (COM type library)?如何将 SQL Server 类型 numeric(38,0) 表示为 IDL 类型(COM 类型库)?
【发布时间】: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


【解决方案1】:

COM 中的数字可能是:

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

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

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

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

【讨论】:

  • 感谢您的回答。但问题是关于 IDL 类型(不是 Delphi 类型)。
  • @Altaveron 为什么要包含 Delphi 标签?我仍然看不出 IDL 可以代表这种类型的任何原因。是什么让你认为它可以?
  • IDL 是一个通用术语。我谈到了 COM 类型。 “最多 64 位的整数”、“最多 64 位的浮点值”和 BSTR 是 COM 类型。由于您在问题中放置了“Delphi”标签,因此我还命名了与这些 COM 类型匹配的 Delphi 类型。那些 COM 类型和我命名的 Delphi 类型完美匹配。
  • 另一个选项是变体字节数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 2016-09-29
  • 2010-09-12
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
相关资源
最近更新 更多