【发布时间】:2010-11-01 09:54:38
【问题描述】:
我正在使用 Access 2007 (VBA - adp) 前端和 SQL Server 2005 后端。我有一份报告,我想在 SQL Server 中将副本另存为 PDF 作为二进制文件。
- 报告已打开
- 报告已关闭 - 已触发已关闭事件
- 报告另存为 PDF 并作为二进制文件上传到 SQL Server 表中
这可能吗?我该如何实现?
【问题讨论】:
标签: sql-server vba ms-access
我正在使用 Access 2007 (VBA - adp) 前端和 SQL Server 2005 后端。我有一份报告,我想在 SQL Server 中将副本另存为 PDF 作为二进制文件。
这可能吗?我该如何实现?
【问题讨论】:
标签: sql-server vba ms-access
是否将二进制文件存储在数据库表中是否是一个好主意,有不同的意见。有人说没关系,有人更喜欢将文件保存在文件系统中,只将文件的位置存储在数据库中。
我是其中一个说没关系的人之一 - 我们有一个 >440 GB 的 SQL Server 2005 数据库,我们在其中存储 PDF 文件和图像。它运行得非常好,我们没有任何问题(例如速度......这通常是“文件系统”人们的主要论点之一)。
如果你不知道如何将文件保存在数据库中,谷歌“GetChunk”和“AppendChunk”,你会发现像this one这样的例子。
关于数据库设计:
最好制作两张表:一张只包含 ID 和 blob 字段(PDF 文件存储在其中),另一张包含 ID 和其他用于过滤的字段。
如果你这样做,所有的搜索和过滤都会发生在小表上,只有当你知道要加载的文件的ID时,你才能准确地点击一次大表并加载文件。
我们是这样做的,就像我之前说的那样 - 数据库包含近 450 GB 的文件,我们完全没有速度问题。
【讨论】:
执行此操作的最简单方法是将报告以 PDF 格式保存到磁盘(如果您不知道如何操作,我建议在 MSDN 论坛上使用this thread)。之后,您需要使用 ADO 将使用 OLE 嵌入到二进制类型字段中的文件导入。我对此感到生疏,所以我无法提供具体信息,但到目前为止,Google 搜索一直很不稳定。
我建议不要将 PDF 文件存储在 Access 数据库中——Jet 对数据库大小有严格的限制,如果您不小心,PDF 可能会填满该限制。更好的选择是使用 OLE 链接到文件,并在每次用户请求时从磁盘中检索它。
最后一点建议是使用 ObjectFrame 在磁盘上显示 PDF,MSDN 很好地涵盖了这一点 here。
【讨论】: