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

Dmi*_*try 0 sql-server delphi com idl typelib

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

非常感谢您的帮助!

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

Arn*_*hez 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对象的两侧找到库.