将MS Access" OLE对象"转换回纯JPEG-最佳方法?
背景:我们有一个带有MS Access ADP前端的旧的(但对业务至关重要)的SQL Server数据库。它最初是通过一系列Access数据库升级到SQL Server的。
该数据库为我们的客户跟踪有害物质,并存储大量图像。这些图像是从MS Access插入的,并作为OLE对象放入数据库中。
问题是:
- 在Access / Office之外的任何其他内容中读取这些内容都很痛苦
- 大量的存储开销-约10GB的图像占用600+ GB的存储空间(!)
我的问题是:我们建议采用什么方法将这些these肿的对象转换回简单的JPEG?一旦完成此操作,我们最终可以将前端从Access迁移到简单的基于Web的系统上,并且备份时间将再次变得可管理!
解决方案
我认为数据库之所以变得,肿,是因为JPG也以位图的形式存储在" OLE对象"结构中,或者据我所见,这取决于插入JPEG的方法。
这不是最佳选择,但是:对于数据库中的每个图像,我将以编程方式创建仅包含图像的虚拟.doc,然后将其传递给OpenOffice转换,并从产生的OpenOffice文档的图像子文件夹中提取JPEG(一个ZIP文件)。
然后,我将用原始的JPEG数据替换数据库中的OLE文档,但是随后,我们无法在自定义应用程序中明确显示它们(除非它是Web应用程序)。
从这里获取* .bas文件http:// http://stackoverflow.com/Content/img/wmd/ul.png//www.access-im-unternehmen.de/index1.php?BeitragID = 337&id = 300(不幸的是它是德语)。
它使用来自MS的GDI +库(包含在Win标准安装中)将图片导入到Access OLE中或者从Access OLE中导出图片。
界面的粗略翻译:
- IsGDIPInstalled:检查GDI +的安装
- InitGDIP:GDI +的初始化。
- ShutDownGDIP:取消GDI +的初始化(importand要使用!)
- LoadPictureGDIP:将图片加载到StdPicture对象(bmp,gif,jp(e)g,tif,png,wmf,emf和ico)中。
- ResampleGDIP:将图片缩放到新尺寸并在需要时锐化。
- MakeThumbGDIP:制作缩略图并用颜色填充边框。
- GetDimensionsGDIP:获取以TSize-Struktur为单位的尺寸(以像素为单位)。
- SavePicGDIPlus:将图片对象保存为BMP,GIF,PNG或者JPG(具有给定质量的jpg)在文件中
- ArrayFromPicture:返回picutre的字节数组,以将pic放入表的OLE字段中
- ArrayToPicture:创建包含图片的表的OLE字段的字节数组
再次是这里的链接:http://www.access-im-unternehmen.de/index1.php?BeitragID=337&id=300
使用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 Server的600 + GB存储转换为Access,则存储空间将较小,并且能够保留Access应用程序2007 accdb格式。备份时间将是可管理的,并且我们无需花费时间将Access前端转换为Web前端。