使用ADO处理MS Access中附件类型的字段

Alw*_*uff 3 c++ winapi ado ms-access-2007 attachment-field

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

但是,我使用来通过GUI(在C++和中制造WinAPI)填充数据库ADO。我找不到使用将该数据插入数据库或从数据库中加载此类数据的示例ADO。在这里搜索一些类似的问题(VB,Delphi,Python ...)后,我发现我的方法可能不是最佳方法,但似乎可以做到。

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

  • 我应该如何使用来处理这种类型的数据(图像,文档...)到MS Access 2007(或更高版本)数据库的插入/加载ADO

您是否可以提供一些小代码段来说明如何使用来向数据库中插入/从数据库中加载此类数据ADO

谢谢。

Gor*_*son 6

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

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

可以从代码中操纵附件字段,但只能使用ACE DAO Recordset2对象(此处为示例)。为了能够为每个记录保存多个附件,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),并在检索时将其解压缩。