【问题标题】:ADO recordset fails on "memo" datatype during import into Excel在导入 Excel 期间,ADO 记录集在“备忘录”数据类型上失败
【发布时间】:2011-10-05 16:13:32
【问题描述】:

我正在尝试从 SQL 服务器检索数据,以便在某些 Excel 2003 宏中使用。我想避免使用 QueryTables,因为我不希望这个从实际工作表中写入和读取的中间步骤。这似乎既耗时又毫无意义。

我已设法获取记录集,但它在服务器上包含数据类型为“备忘录”的空数据。

此外,程序在尝试将数据存储到 Range 时崩溃。它似乎进入了第一个“空”字段,然后它给了我一个 1004 错误代码。

显然,备忘录字段让我很伤心。任何人都可以就如何解决这个问题提出建议,或者我应该做些什么不同的事情?

    objMyConn.connectionString = "ODBC;" _
    & "Provider=SQLOLEDB;DRIVER={SQL Server};SERVER=VANDB;" _
    & "APP=Microsoft Office 2003;DATABASE=WPDB_BE;Trusted_Connection=Yes;"
    objMyConn.Open

我已经在网上搜索了很久,但是这个 Access / ADO / Excel 的东西非常痛苦。请帮忙。

编辑 1:我后来用“TOP 1”(“LIMIT 1”的 SQL 版本)修改了 SQL 查询,发现使用该记录集,备注字段 正确返回。同样,我可以选择一个有问题的字段,并获得更多行,例如"SELECT TOP 52 bad_field FROM ..."

所以我怀疑问题是某种 ADO 连接数据大小限制?似乎 Access“备忘录”类型就像一个“MEDIUMTEXT”MySQL 类型,那么我该如何绕过这样的限制呢?那么这是一个单独的问题,但是 ADO 连接有哪些替代方案?

【问题讨论】:

  • “备忘录”实际上是数据类型吗?我虽然在 SQL 服务器上它只是“文本”。备忘录是一个 Access 字段类型。
  • 嗯,看起来是这样。一个非常相似的字段表示输入“文本”并且工作正常,而其他字段表示“备忘录”并且根本不工作。我只是通过 Access 查看表,我没有实际 SQL 数据库的管理视图。 (而且我不知道如何,因为我的经验是使用 PHP 和 mySQL,足以惹上麻烦)
  • 另外:请注意,我发现如果我将 SQL 查询限制为单个记录,我可以查看其中一些“备忘录”字段。这让我相信可以存储在记录集中的数据类型大小是有限制的?

标签: sql excel ado recordset


【解决方案1】:

您可以使用 ADO 连接对象 (objMyConn) 来发现 ADO 解释的数据类型(以及其他属性):

With objMyConn.OpenSchema(adSchemaColumns, Array(Empty, Empty, "your_table_name_here"))
  .Filter = "COLUMN_NAME = 'your_column_name_here'"
  MsgBox .Fields("DATA_TYPE").Value
End With

这将返回其各自SchemaEnum枚举值的整数值,使用对象浏览器发现枚举值。在此处发布结果可能会为您的问题提供进一步的线索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多