将访问报告另存为PDF /二进制文件

时间:2009-06-09 08:15:39

标签: sql-server ms-access vba ms-access-2007 access-vba

我正在使用Access 2007(VBA-adp)前端和SQL Server 2005后端。我有一份报告,我想将一份副本保存为SQL Server中的二进制文件。

  1. 报告已打开
  2. 报告已关闭 - 已触发已关闭的事件
  3. 报告已保存为PDF并以二进制文件的形式上载到SQL Server表中
  4. 这可能吗?我将如何实现这一目标?

2 个答案:

答案 0 :(得分:4)

如果将二进制文件存储在数据库表中是个好主意,有不同意见。有人说没关系,有些人更喜欢将文件保存在文件系统中,只将文件的位置存储在数据库中。

我是那些说它没问题的人之一 - 我们有一个> 440 GB的SQL Server 2005数据库,我们在其中存储PDF文件和图像。它运行得很好,我们没有任何问题(例如速度......这通常是“文件系统”人员的一个主要参数)。

如果您不知道如何保存数据库中的文件,请点击“GetChunk”和“AppendChunk”,您会找到this one等示例。

关于数据库设计:
最好是制作两个表:一个只有ID和blob字段(存储PDF文件的位置),另一个有ID和其他字段用于过滤。
如果你这样做,所有的搜索和过滤都会在小桌子上进行,只有当你知道要加载的文件的ID时,你才能在大表中完成一次并加载文件。
我们这样做就像我之前说过的那样 - 数据库包含近450 GB的文件,我们根本没有速度问题。

答案 1 :(得分:1)

最简单的方法是将报告以PDF格式保存到磁盘(如果您不知道如何操作,我建议在MSDN论坛上使用this thread)。之后,您将需要使用ADO将OLE嵌入导入到二进制类型的字段中。我生气了,所以我不能详细说明,但到目前为止谷歌的搜索工作还是不确定。

我建议不要在Access数据库中存储PDF文件 - Jet对数据库大小有严格的限制,如果你不小心,PDF可以填满这个限制。更好的办法是使用OLE链接到文件,并在每次用户请求时从磁盘检索它。

最后一点建议是使用ObjectFrame在磁盘上显示PDF,MSDN非常清楚here