ADO数据类型有哪些限制?

时间:2011-08-01 21:58:17

标签: ms-access vba ado

我正在尝试确定用于调用SQL Server(2005)存储过程的相应ADO命令参数数据类型。我特别首先尝试确定与SQL Server数据类型varchar(MAX)对应的适当ADO数据类型。我想它可能是adVarChar,但我不确定。

为什么文档中列出的每种数据类型的大小(例如'string'类型的字符数,数值类型的范围)?为什么看起来似乎不可能找到一个方便的表格列出每种数据类型和你可以填写每个数据的最大信息量?!您认为有人会注意到与“为什么我的数据被截断?”的变体相关的可能数百万的问题。 ...

澄清 - 以上信息仅仅是一个具体示例,说明了解ADO数据类型限制的实用程序,例如:选择适当的ADO数据类型来处理各种数据源的特定数据类型。

1 个答案:

答案 0 :(得分:9)

具体部分

varchar(MAX)可以在ADO中用作输入参数 在这种情况下,数据类型为adLongVarChar,最大长度为&h7FFFFFFF,如文档here所述。

虽然它不能用作输出参数 它也不能作为返回记录中的字段类型使用(有趣 - .ValueEmpty,因为它实际上是一个长类型,但可能不会调用GetChunk来检索实际数据因为ADO认为它不是长型的。)

如果您需要使用VBA / ADO将varchar(MAX)作为输出参数使用,则必须select将其记录到客户端,并且必须将其强制转换为{{ 1}}这样做:

text

然后你会说select cast(@var as text) as data; return 0; 从打开的记录集中获取数据。


摘要部分

ADO的重点是消除不同数据源之间的差异。只要有一个支持接口的数据访问驱动程序,您(理想情况下)可以在不打扰它的情况下与它通信。

任何抽象,这个也是leaky

确切了解哪些服务器映射到哪些ADO数据类型的数据类型来自经验。就是这样。

一些经验法则可能会很快发展:

  • 通过将其名称与特定服务器的数据类型名称相匹配来计算可能的ADO数据类型并不困难:

    • s = .Fields(0).GetChunk(.Fields(0).ActualSize)
    • int - adInteger(虽然在这里你可能会被迫进行一些试验和错误)
  • 某些数据类型称为BLOB(二进制大对象)。它们旨在包含大量数据,并且通常在数据源文档中提供。对于这些,相应的ADO数据类型可能在其名称中包含datetime - adDBDate,在ADO世界中,这意味着“BLOB”(LongadLongVarBinaryadLongVarChar

  • 有关数据类型的确切长度的任何信息都可以在数据源的文档中找到,而不是在ADO文档中找到。对于像这样的事情:

    • 开发人员为此特定表格中的特定列设置的最大长度(例如adLongVarWChar
    • BLOB数据类型的最大理论长度(例如varchar(10)

    您将参考相应的数据源,而不是ADO。