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



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

非常感谢你的帮助!

附言:例如,SQL Server类型int是IDL中的long类型。

COM中的数字可以是:

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

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

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

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

最新更新