我有一个非常简单的数据库访问,但对于每个记录我需要附加一个扫描的文档(可能是pdf)。执行此操作的最佳方法是什么,数据库不应该只链接到PC上的文件,而应该复制并保存文件,这意味着如果原始文件丢失,数据库被移动或复制,文件仍然应该可以从数据库中访问。这可能吗?什么是最简单的方法呢?如果我应该写一个宏,我只是不知道从哪里开始。而且当我显示表格的报告时,我想看到文件的缩略图。 谢谢。
答案 0 :(得分:2)
正如其他回答者所指出的那样,将文件数据存储在数据库表中可能是一个值得怀疑的做法。也就是说,我个人不会将其排除在外,但如果您打算采用该选项,我强烈建议将文件数据拆分为自己的后端文件中的表。例如:
Scanned files.mdb
(或Scanned files.accdb
)的新数据库文件。Scans
的表,其中包含FileID
(自动编号,主键),MainTableID
等字段(匹配主数据库文件中主表的主键) ),FileName
(文本),FileExt
(文本)和FileData
('OLE对象',实际上只是一个BLOB - 实际上并不使用OLE对象,因为它们会使数据库膨胀可怕)。Scans
的引用添加为链接表。Scans
表格上传和提取文件(如果您对此机制感兴趣,请发布单独的问题)。Shell
例程(如果必须)或Windows API中的ShellExecute
(=更好的IMO选项)打开提取的数据。如果您使用较新的ACCDB格式,那么您可以使用smk081建议的“附件”字段类型。这基本上可以为您完成大部分上述步骤,但是“手动”操作会为您提供更大的灵活性 - 例如,它允许为每个文件提供“DateScanned”或“DateEffective”字段。
也就是说,您对缩略图的要求将需要显式编码您采取的任何选项。 可能可以利用Windows文件预览API,虽然在调查之前我确定缩略图是一个明确的要求 - Access VBA足够强大,可以鼓励尝试复杂的解决方案,但经常不清理并且足够现代化,以便以特别可维护的方式实现它们。
答案 1 :(得分:0)
当您进入表格的设计视图时,数据类型下有一个附件类型。您可以在此处添加附件字段。当您进入表格的数据表视图时,您可以为特定行选择此字段,并打开一个窗口供您指定附件。如果添加大量附件,这将导致数据库的大小快速增长。
答案 2 :(得分:0)
您可以在表中使用OLE字段,但我建议您不要使用此方法。数据库很快就会变得巨大,你会后悔的。
相反,您应该考虑添加一个存储文件路径的字段,并将文件保存在网络上的一个文件夹中。然后,您可以使用SHELL()命令打开该文件。如果出现问题,恢复Access数据库和恢复PDF文件有什么区别?这将使您的数据库保持在可管理的大小,并减少损坏的可能性。