ms-access - ADO 数据类型的限制是什么?

标签 ms-access vba ado

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

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

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

最佳答案

具体部分
varchar(MAX)可以从 ADO 用作输入参数。
在这种情况下,数据类型将是 adLongVarChar , 最大长度为 &h7FFFFFFF ,如记录 here .

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

如果需要消费varchar(MAX)作为使用 VBA/ADO 的输出参数,您必须 select它将记录集返回给客户端,您必须将其转换为 text在这样做的同时:

select cast(@var as text) as data;
return 0;

然后你会说s = .Fields(0).GetChunk(.Fields(0).ActualSize)从打开的记录集中获取数据。

抽象部分

ADO 的关键在于抽象出不同数据源之间的差异。只要有一个支持接口(interface)的数据 Access 驱动程序,您(理想情况下)就可以与它交谈而不必担心它是什么。

作为任何抽象,这个也是 leaky .

哪些服务器的哪些数据类型映射到哪些 ADO 数据类型的确切知识来自经验。那是。

然而,一些经验法则可能会很快发展起来:
  • 通过将它们的名称与特定服务器的数据类型名称相匹配,不难确定可能的 ADO 数据类型:
  • int - adInteger
  • datetime - adDBDate (虽然在这里你可能会被迫进行一些试验和错误)
  • 某些数据类型称为 BLOB(二进制大对象)。它们旨在包含大量数据,并且通常在数据源文档中呈现。对于这些,相应的 ADO 数据类型可能包含 Long在它的名字中,在 ADO 世界中,意思是“BLOB”( adLongVarBinaryadLongVarCharadLongVarWChar )。
  • 有关数据类型的确切长度的任何信息都可以在数据源的文档中找到,而不是在 ADO 文档中。对于这样的事情:
  • 开发人员为此特定表中的特定列设置的最大长度(例如 varchar(10) )
  • BLOB 数据类型的最大理论长度(例如 varchar(max) )

  • 您要查阅相应的数据源,而不是 ADO。

    关于ms-access - ADO 数据类型的限制是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6905003/

    相关文章:

    VBA AddressOf Crash Office 应用程序

    ms-access - 设置默认文件浏览位置 VBA

    excel - 列出 VBA 2003 中类的属性

    mysql - 如何在 ADO.NET 中使用 MySQL 用户变量

    Delphi 将数据库表映射为类

    sql-server - 使用参数从 Delphi 调用 SQL Server 存储过程?

    sql - 如何从两个表中查找重复项并在其本身中查找重复项?

    ms-access - Access 2003 查询中的最大列是多少?

    sql - Access VBA Query中的recordset.GetString在结果后返回一个额外的字符

    excel - 从 excel 复制到 word doc : error 4605 时 VBA 代码崩溃