3

我的数据库中有一些字段需要存储图像(位图、JPG 或 PNG)和 PDF(或 Excel/RTF/TXT)文件。通过 Internet 浏览,我了解到 MS Access 2007(和更新版本)具有Attachment可以满足我需要的类型字段。

但是,我正在通过 GUI(在C++和中制作WinAPI)填充数据库,使用ADO. 我找不到使用ADO. 在这里搜索一些类似的问题(VB、Delphi、Python ...)我发现我的方法可能不是最好的,但似乎可以做到。

由于缺乏经验,而且由于这是我第一次处理此类任务,因此我要求社区帮助我解决此任务。因此我的问题:

  • 我应该如何处理在 MS Access 2007(或更高版本)数据库中插入/加载此类数据(图像、文档...)ADO

您能否提供小代码片段来说明使用 将此类数据插入/加载到/从数据库中ADO

谢谢你。

4

1 回答 1

6

如果您打算仅将 C++ 应用程序用作前端并且希望用户在 Access 本身中打开数据库,那么我建议您避免使用Attachment字段类型。Attachment相反,使用名为 [Attachments] 的单独子表,在 [Attachments] 表和父表(您正在考虑使用该字段的位置)之间具有一对多关系(外键约束)。然后,将文档作为原始二进制数据保存在OLE Object子表的(长二进制)字段中。

字段类型为使用 Access UI的Attachment应用程序提供了几个优点。对单个数据库记录的多个附件的支持就像将Attachment控件放到 Access 表单上一样简单。附件也可以从数据表视图中访问,尽管您看到的只是一个“回形针”图标。

附件字段可以通过代码进行操作,但只能使用 ACE DAORecordset2对象(此处的示例)。为了能够为每条记录保存多个附件,Access 数据库引擎使用隐藏的子表。可以使用“魔术”字段名称限定符(例如,Field1.FileName)将一些信息拉入 SELECT 查询,但 ADO 和 ODBC 都不能插入或更新附件字段条目。

因为您不会为您的应用程序使用 Access UI

  1. 您将无法使用附件字段必须提供的许多优势,并且
  2. 您仍然可以通过 C++ 应用程序中的 ACE DAO 操作附件字段,但这会很麻烦。

不使用Attachment字段可能会错过的一个(可能)显着优势是 Access 数据库引擎会自动压缩字段中的文件,Attachment但字段中的原始二进制数据OLE Object未压缩存储。如果您打算保存的文件都是压缩格式(例如,JPEG、.docx、.xlsx),那么这不是问题。但是,如果您计划以未压缩格式(例如,.txt、.rtf)存储大量大型文档,那么文件膨胀可能会成为问题。在这种情况下,您可以让您的 C++ 应用程序在保存它们之前自动压缩这些文档(可能使用GZipStream)并在检索时解压缩它们。

于 2014-11-19T11:05:20.900 回答