预警共享类型图片和隐藏表功能存在冲突

强力隐藏表之后,共享类型的图片在accde格式中无法显示的问题剖析及解决办法。

在Access之前,插入的图片只有2种类型:嵌入和链接。

链接类型,实际上是相当于将图片保存在外部,需要的时候去读取。但这样就不太方便,因为Access数据库的一个好处就是,所有内容都集成在一个数据库文件中,所以大家使用更多的是嵌入类型。但使用嵌入类型会出现一个问题,因为Access实际上只能使用位图(.bmp),你插入的jpg,png等其它格式的图片,实际上也是被转换成了位图的。

细心的朋友就会发现,明明自己只插入了一个几百K的jpg图片,怎么Access数据库文件一下子增大了几MB?!这就是因为jpg图片被转换为了位图存储的结果。jpg是一种图像压缩格式,而位图是不压缩的。从而导致了文件增大十倍以上!简直让强迫症抓耳挠腮的难受……

从Access开始,引入了新的accdb文件格式,终于可以不用再保存为位图,而是源图片格式了。

但仍然有个不足的地方,如果一张图我需要在多个地方用到,就需要多次重复插入该图片。而Access作为关系型数据库,第一范式就是要消除重复数据,这种明显违背社会主义核心价值观的东西怎么能忍!

于是从Access开始,引入了一个新的图片类型:共享。

而所谓图片共享类型,就是图片是保存在一个名为MSysResources的系统表中,以“附件”字段形式存储。(注意:附件字段类型是Access开始引入的新功能,同样仅限于新的accdb格式)

这下世界清净了,强迫症患者发出了满足的呻吟……

奈何天有不测风云,高兴得太早了。某天开发完成,在accdb格式下测试一切正常,生成仅执行文件格式accde后,试着运行了一下,突然发现图片没有了!你在逗我?

查来查去才发现,是因为考虑安全性,用了以下代码对表进行隐藏。

也就是说,MSysResources表被该方法隐藏后,Access自己也找不到了……找不到了……找不到了……找到了症结所在,那么解决办法也很简单,我们用此方法隐藏表的时候,将Access的系统表排除掉即可,代码改为下面这样:

这个小故事告诉我们一个道理:凡事不要高兴得太早,遇到问题要开启贤者模式,不要以理(物理)服人!

PS:以上都限于accdb格式,mdb格式不在本次讨论范围!

若需要复制代码,







































中医专治白癜风医院
最好的白癜风医院在哪



转载请注明地址:http://www.shouere.com/segs/2556.html
  • 上一篇文章:
  • 下一篇文章:
  • 热点文章

    • 没有热点文章

    推荐文章

    • 没有推荐文章