Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何将SQLServer类型numeric(38,0)表示为IDL类型(COM类型库)?_Sql Server_Delphi_Com_Idl_Typelib - Fatal编程技术网

Sql server 如何将SQLServer类型numeric(38,0)表示为IDL类型(COM类型库)?

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,则会出现溢出 我认为更容易兼容的类型是一个很好的旧

如何将SQL Server类型
数值(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二进制数组不如文本内容容易(而且速度效率更低,即使它使用的内存更少)。编码选项可以是。您可以在COM对象的两侧找到库。

COM中的数字可以是:

  • 最多64位的整数(
    Int64
    )-最多19位有效数字
  • 高达64位(
    double
    )的浮点值-精度为15-17位有效十进制数字
因此,对于38位数字,这些类型都与您的请求不匹配。使用
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类型之间有一个完美的匹配。另一个选项是变量字节数组。