Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用ADO处理MS Access中的附件类型字段_C++_Winapi_Ms Access 2007_Ado_Attachment Field - Fatal编程技术网

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

C++ 使用ADO处理MS Access中的附件类型字段,c++,winapi,ms-access-2007,ado,attachment-field,C++,Winapi,Ms Access 2007,Ado,Attachment Field,我的数据库中有一些字段需要存储图像(位图、JPG或PNG)和PDF(或Excel/RTF/TXT)文件。通过互联网浏览,我了解到MS Access 2007(及更新版本)有一个类型为附件的字段,可以满足我的需要 但是,我使用ADO通过GUI(在C++和WinAPI中制作)填充数据库。我找不到使用ADO将此类数据插入/加载到数据库中的示例。在这里搜索一些类似的问题(VB、Delphi、Python……),我发现我的方法可能不是最好的,但似乎可以做到 由于缺乏经验,而且这是我第一次处理此类任务,我请

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

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

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

  • 我应该如何处理使用
    ADO
    将此类数据(图像、文档…)插入/加载到MS Access 2007(或更高版本)数据库中
您能否提供一个小代码段,说明如何使用
ADO
将此类数据插入/加载到数据库中


谢谢。

< P>如果你计划只使用C++应用程序作为前端,不要期望用户在Access本身中打开数据库,那么我建议你避免使用<代码>附件< /C>字段类型。相反,使用名为[Attachments]的单独子表,在[Attachments]表和父表之间具有一对多关系(外键约束)(您正在考虑使用
附件
字段)。然后,将文档作为原始二进制数据保存在子表的
OLE对象
(长二进制)字段中

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

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

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

  • 您将无法使用附件字段提供的许多优势,以及
  • <>你仍然可以通过C++应用程序从AdAdAO操作附件字段,但这将是一个讨厌的事情。
    如果不使用
    附件
    字段,您可能会错过的一个(可能)显著优势是,Access数据库引擎会自动压缩
    附件
    字段中的文件,但
    OLE对象
    字段中的原始二进制数据是未压缩存储的。如果您要保存的文件都是压缩格式(例如JPEG、.docx、.xlsx),则这不会是问题。但是,如果您计划以未压缩格式(例如.txt、.rtf)存储大量大型文档,那么文件膨胀可能是一个问题。在这种情况下,你可以让C++应用程序自动保存这些文件(也许使用),然后保存它们,并在检索时解压缩它们。

    你说你将通过GUI(C++制作)填充数据库。但是C++前端是否是与数据库交互的唯一模式?或者,其他用户是否将在Access本身(完整版本或运行时)中打开数据库?使用访问窗体和报表?@ GordThompson:C++前端是否是与数据库交互的唯一模式?是的,终端用户没有编程背景。其他用户是否将在Access本身(完整版本或运行时)中打开数据库?使用Access窗体和报表?不,如果发生意外情况,将由我来处理。重要的是,用户需要存储在数据库中的文档。我不能将文件路径存储为字符串。目前我正在分析,因为它看起来很有希望。@GordThompson:我记得你过去曾成功地帮助过我。如果我记得正确,你使用<代码> VB >代码>代替<代码> C++ >代码>。如果你不能帮助任何其他方式,我会考虑在<代码> VB <代码>或伪代码中的解决方案…谢谢你的回答。我不使用.NET,但会查看WinAPI压缩文件(我想我早就找到了一些东西)。我会诚挚的问候我的上司,让他们在应用程序目录中使用一个文件夹,这样我就可以存储文件的名字,然后把那个文件复制到目录中。然后我可以使用<代码> SHILLACKECUT/OFFECT>打开文件,例如……通过将C++对象插入到Access中,我应该从例子开始吗?抱歉,我不能提供任何对C++有特殊的建议(我的答案是你的应用程序不是访问的,而不是C++的。)我做了C++的一个很好的工作,但是C++只是太不同了。我几乎要解决我的问题,因此正式接受你的答案。因为我坚信问题是MS访问相关的,我请你帮我提一个问题,特别是如何补救错误的MS访问报告。谢谢。诚挚的问候。因为我已经听取了你的建议。从
    附件
    切换到
    OLE对象
    我已决定正式接受并投票表决您的答案。谢谢。祝您下次愉快。