链接表 OLE 对象在记录集中显示为空,而在查询视图中显示为 OLE 对象

Posted

技术标签:

【中文标题】链接表 OLE 对象在记录集中显示为空,而在查询视图中显示为 OLE 对象【英文标题】:Linked table OLE Object shows as null in a recordset while it is displayed on query view as OLE Object 【发布时间】:2017-08-14 18:47:53 【问题描述】:

我有以下 Oracle 表通过 ODBC 连接到 Access

ID (INT) FILE_TYPE (VARCHAR(20)) BLOB_DATA (BLOB)

BLOB_DATA 字段包含 excel 文件,我想下载它们。

在 Access Query 视图中,该字段显示为 OLE 对象

到目前为止,我已经编写了以下代码 -

Dim db as Database
Dim rst as Recordset

Set db = CurrentDb

Set rst = db.openrecordset("SELECT BLOB_DATA FROM MY_TABLE;")
Dim fld as Variant

fld = rst.Fields(0).value

当我检查 fld 字段时,它显示为 null,即使 Access Query 视图将其显示为 OLE 对象。它是否必须与 ODBC 和链接表有关?还是我错过了什么?

【问题讨论】:

【参考方案1】:

您不能只将变量设置为等于 OLE 或 BLOB 字段的值,因为它们可以包含非常大的对象。您需要在字段上使用.GetChunck 来返回文件的大块数据,因此您不必将整个 BLOB 加载到变量中。

使用.GetChunck 可以让您在将整个文件写入磁盘时仅将文件的一小部分保留在内存中。

所需的代码不小,但下面的微软文章描述得很好:https://support.microsoft.com/en-us/help/210486/acc2000-reading--storing--and-writing-binary-large-objects-blobs (是的,它是 Access 2000,但我找不到来自 Microsoft 的更新源)。

如果您还有其他问题,请随时在 cmets 中提问。

【讨论】:

ADODB.Stream 对象是将大型 BLOB 对象移入和移出 Recordset 的另一种选择。

以上是关于链接表 OLE 对象在记录集中显示为空,而在查询视图中显示为 OLE 对象的主要内容,如果未能解决你的问题,请参考以下文章

记录为空时,Access 2010 查询仍显示结果

高级查询

无法加入备忘录、OLE 或超链接对象

从 DataTable C# 添加到 OLE 类型表

MySql查询具体某个时间段数据,结果集如何补全该时间段的所有记录并且标记为空值(时间显示除外)

如何在自定义 OLE 对象中实现类似 Excel 的 OLE 链接行为