将MS Access“OLE Objects”转换回纯JPEG格式 - 最好的方法?

时间:2008-09-22 11:28:25

标签: ms-access image

背景:我们有一个旧的(但业务关键型)SQL Server数据库,带有MS Access ADP前端;这最初是从一系列Access数据库升级到SQL Server。

该数据库可跟踪客户的有害物质,并存储大量图像。这些图像从MS Access插入,并作为OLE对象放入数据库。

问题是:

  • 除了Access / Office
  • 之外,其他任何内容都是痛苦的
  • 存在大量存储空间 - 大约10GB的图像占用600多GB的存储空间(!)

我的问题是:您建议将这些膨胀对象转换回简单的JPEG格式?一旦我们这样做,我们最终可以将我们的前端从Access迁移到一个简单的基于Web的系统,我们的备份时间将再次变得易于管理!

4 个答案:

答案 0 :(得分:5)

从这里获取* .bas文件http:http://stackoverflow.com/Content/img/wmd/ul.png//www.access-im-unternehmen.de/index1.php?BeitragID=337&id=300(不幸的是它是德语)。

它使用MS的GDI + lib(包含在Win标准安装中)从/来自Access OLE导入/导出图片。

界面的粗略翻译:

  • IsGDIPInstalled:检查GDI +的安装
  • InitGDIP:GDI +的初始化。
  • ShutDownGDIP:放弃GDI +(导入并使用!)
  • LoadPictureGDIP:在StdPicture对象中加载pic(bmp,gif,jp(e)g,tif,png,wmf,emf和ico)。
  • ResampleGDIP:将图片缩放到新尺寸,并在需要时进行锐化。
  • MakeThumbGDIP:制作缩略图并用颜色填充边框。
  • GetDimensionsGDIP:以像素为单位获取TSize-Struktur中的尺寸。
  • SavePicGDIPlus:将图片objekt保存为BMP,GIF,PNG或JPG(具有给定质量的jpg)
  • ArrayFromPicture:返回picutre的字节数组,将pic放入表的OLE字段
  • ArrayToPicture:创建包含图片的表的OLE字段的字节数组

答案 1 :(得分:1)

答案 2 :(得分:1)

使用Access MVP Stephen Lebans ExtractInventoryOLE工具从表中提取OLE对象以分隔文件。

http://www.lebans.com/oletodisk.htm

根据Lebans:“不需要用作OLE服务器的原始应用程序来插入对象。支持所有MS Office文档,PDF,MS Photo Editor,MS Paint和Paint Shop Pro插入的所有图像。支持提取PACKAGE类,包括原始文件名。“

此外,Access 2007比以前版本的历史BMP格式更有效地存储OLE对象,因此如果您从SQL的600 + GB存储转换它,您将拥有更小的存储空间并能够保留Access应用程序服务器访问2007 accdb格式。您的备份时间是可管理的,您无需花时间将Access前端转换为Web前端。

答案 3 :(得分:0)

我认为你的数据库变得如此臃肿的原因是,JPG也被存储为“OLE对象”结构中的位图,或者我已经看到了,这取决于插入JPEG的方法。

这不是最佳选择,但是:对于数据库中的每个图像,我都会以编程方式创建一个仅包含图像的虚拟.doc,然后通过OpenOffice转换传递它,并从生成的OpenOffice文档的images子文件夹中提取JPEG (这是一个ZIP文件)。

然后我会用原始JPEG数据替换数据库中的OLE文档,但是我无法在自定义应用程序中清楚地显示它们(除非它是一个Web应用程序)。