如果您打算仅将 C++ 应用程序用作前端并且不希望用户在 Access 本身中打开数据库,那么我建议您避免使用Attachment
字段类型。Attachment
相反,使用名为 [Attachments] 的单独子表,在 [Attachments] 表和父表(您正在考虑使用该字段的位置)之间具有一对多关系(外键约束)。然后,将文档作为原始二进制数据保存在OLE Object
子表的(长二进制)字段中。
字段类型为使用 Access UI的Attachment
应用程序提供了几个优点。对单个数据库记录的多个附件的支持就像将Attachment
控件放到 Access 表单上一样简单。附件也可以从数据表视图中访问,尽管您看到的只是一个“回形针”图标。
附件字段可以通过代码进行操作,但只能使用 ACE DAORecordset2
对象(此处的示例)。为了能够为每条记录保存多个附件,Access 数据库引擎使用隐藏的子表。可以使用“魔术”字段名称限定符(例如,Field1.FileName
)将一些信息拉入 SELECT 查询,但 ADO 和 ODBC 都不能插入或更新附件字段条目。
因为您不会为您的应用程序使用 Access UI
- 您将无法使用附件字段必须提供的许多优势,并且
- 您仍然可以通过 C++ 应用程序中的 ACE DAO 操作附件字段,但这会很麻烦。
不使用Attachment
字段可能会错过的一个(可能)显着优势是 Access 数据库引擎会自动压缩字段中的文件,Attachment
但字段中的原始二进制数据OLE Object
未压缩存储。如果您打算保存的文件都是压缩格式(例如,JPEG、.docx、.xlsx),那么这不是问题。但是,如果您计划以未压缩格式(例如,.txt、.rtf)存储大量大型文档,那么文件膨胀可能会成为问题。在这种情况下,您可以让您的 C++ 应用程序在保存它们之前自动压缩这些文档(可能使用GZipStream)并在检索时解压缩它们。