Sql server 如何将SQLServer类型numeric(38,0)表示为IDL类型(COM类型库)?
如何将SQL Server类型Sql server 如何将SQLServer类型numeric(38,0)表示为IDL类型(COM类型库)?,sql-server,delphi,com,idl,typelib,Sql Server,Delphi,Com,Idl,Typelib,如何将SQL Server类型数值(38,0)表示为IDL类型(COM类型库) 非常感谢你的帮助 例如,SQL Server类型int在IDL中是long类型。COM中的数字可以是: 最多64位的整数(Int64)-最多19位有效数字 高达64位(double)的浮点值-精度为15-17位有效十进制数字 因此,对于38位数字,这些类型都与您的请求不匹配。使用Int64可以获得最佳分辨率,但如果您的值高于9223372036854775807,则会出现溢出 我认为更容易兼容的类型是一个很好的旧
数值(38,0)
表示为IDL类型(COM类型库)
非常感谢你的帮助
例如,SQL Server类型
int
在IDL中是long
类型。COM中的数字可以是:
- 最多64位的整数(
)-最多19位有效数字李>Int64
- 高达64位(
)的浮点值-精度为15-17位有效十进制数字double
Int64
可以获得最佳分辨率,但如果您的值高于9223372036854775807,则会出现溢出
我认为更容易兼容的类型是一个很好的旧BSTR(widestring
),其中可以存储任意数量的数字,但编码为纯文本。在代码方面,您需要有一个BCD库来处理高分辨率的数字:没有任何Delphi原生类型(甚至extended
)具有这样的分辨率
编辑:另一个选项(感谢Ondrej的建议)是字节数组。IMHO COM二进制数组不如文本内容容易(而且速度效率更低,即使它使用的内存更少)。编码选项可以是。您可以在COM对象的两侧找到库。COM中的数字可以是:
- 最多64位的整数(
)-最多19位有效数字李>Int64
- 高达64位(
)的浮点值-精度为15-17位有效十进制数字double
Int64
可以获得最佳分辨率,但如果您的值高于9223372036854775807,则会出现溢出
我认为更容易兼容的类型是一个很好的旧BSTR(widestring
),其中可以存储任意数量的数字,但编码为纯文本。在代码方面,您需要有一个BCD库来处理高分辨率的数字:没有任何Delphi原生类型(甚至extended
)具有这样的分辨率
编辑:另一个选项(感谢Ondrej的建议)是字节数组。IMHO COM二进制数组不如文本内容容易(而且速度效率更低,即使它使用的内存更少)。编码选项可以是。您可以在COM对象的两侧找到库。如果您可以用IDL表示该类型,我会感到惊讶。如果您可以用IDL表示该类型,我会感到惊讶。谢谢您的回答。但是问题是关于IDL类型(不是Delphi类型)。@Altaveron为什么要包含Delphi标记?我仍然不明白为什么IDL可以表示这种类型。你凭什么认为它可以?IDL是一个通用术语。我谈到了COM类型。“最多64位的整数”、“最多64位的浮点值”和BSTR都是COM类型。由于您在问题中添加了“Delphi”标记,因此我还命名了与这些COM类型匹配的Delphi类型。这些COM类型和我命名的Delphi类型之间有一个完美的匹配。另一个选项是变量字节数组。谢谢你的回答。但是问题是关于IDL类型(不是Delphi类型)。@Altaveron为什么要包含Delphi标记?我仍然不明白为什么IDL可以表示这种类型。你凭什么认为它可以?IDL是一个通用术语。我谈到了COM类型。“最多64位的整数”、“最多64位的浮点值”和BSTR都是COM类型。由于您在问题中添加了“Delphi”标记,因此我还命名了与这些COM类型匹配的Delphi类型。在这些COM类型和我命名的Delphi类型之间有一个完美的匹配。另一个选项是变量字节数组。