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

时间:2012-07-26 14:07:38

标签: sql-server delphi com idl typelib

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

非常感谢您的帮助!

P.S。例如,IDL中的SQL Server类型intlong类型。

1 个答案:

答案 0 :(得分: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二进制数组不像文本内容那么容易(并且速度效率较低,即使它使用较少的内存)。编码选项可以是good old BCD。您可以在COM对象的两侧找到库。