【Access原创技巧】预警!共享类型图片和隐藏表功能存在冲突!
时 间:2018-11-22 10:46:30
作 者:红尘如烟 ID:10768 城市:成都
摘 要:强力隐藏表之后,共享类型的图片在accde格式中无法显示的问题剖析及解决办法。
正 文:
在Access 2010之前,插入的图片只有2种类型:嵌入和链接。
链接类型,实际上是相当于将图片保存在外部,需要的时候去读取。但这样就不太方便,因为 Access 数据库的一个好处就是,所有内容都集成在一个数据库文件中,所以大家使用更多的是嵌入类型。但使用嵌入类型会出现一个问题,因为Access实际上只能使用位图(.bmp),你插入的 jpg, png 等其它格式的图片,实际上也是被转换成了位图的。
细心的朋友就会发现,明明自己只插入了一个几百 KB 的 jpg 图片,怎么 Access 数据库文件一下子增大了几MB?!这就是因为 jpg 图片被转换为了位图存储的结果。jpg 是一种图像压缩格式,而位图是不压缩的。从而导致了文件增大十倍以上!简直让强迫症抓耳挠腮的难受……
从 Access 2007 开始,引入了新的 accdb 文件格式 ,终于可以不用再保存为位图,而是源图片格式了。
但仍然有个不足的地方,如果一张图我需要在多个地方用到,就需要多次重复插入该图片。而 Access 作为关系型数据库,第一范式就是要消除重复数据,这种明显违背社会主义核心价值观的东西怎么能忍!
于是从 Access 2010 开始,引入了一个新的图片类型:共享。
而所谓图片共享类型,就是图片是保存在一个名为 MSysResources 的系统表中,以“附件”字段形式存储。(注意:附件字段类型是 Access 2007 开始引入的新功能,同样仅限于新的 accdb 格式)
这下世界清净了,强迫症患者发出了满足的呻吟……
奈何天有不测风云,高兴得太早了。某天开发完成,在 accdb 格式下测试一切正常,生成仅执行文件格式 accde 后,试着运行了一下,突然发现图片没有鸟!(黑人问号脸.jpg) 你在逗我?
查来查去才发现,是因为考虑安全性,用了以下代码对表进行隐藏。
Function HideAllTables() On Error Resume Next Const dbHiddenObject = 1 Dim dbs As Object: Set dbs = CurrentDb Dim tdf As Object For Each tdf In dbs.TableDefs tdf.Attrabutes = dbHiddenObject Next End Function
也就是说,MSysResources 表被该方法隐藏后,Access自己也找不到了……找不到了……找不到了……
找到了症结所在,那么解决办法也很简单,我们用此方法隐藏表的时候,将Access 的系统表排除掉即可,代码改为下面这样:
Function HideAllTables() On Error Resume Next Const dbHiddenObject = 1 Dim dbs As Object: Set dbs = CurrentDb Dim tdf As Object For Each tdf In dbs.TableDefs If Not tdf.Name Like "MSys*" Then tdf.Attrabutes = dbHiddenObject End If Next End Function这个小故事告诉我们一个道理:凡事不要高兴得太早,遇到问题要开启贤者模式,不要以理(物理)服人!
PS:以上都限于 accdb 格式,mdb 格式不在本次讨论范围!
Access软件网QQ交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access判断多条明细的配方或订...(11.30)
- 如何让后台数据库在局域网共享时,且...(11.29)
- 【Access月初月末日期设置方法...(11.29)
- 【Access IIF函数嵌套示例...(11.26)
- Access快速开发平台--使用组...(11.25)
- Access快速开发平台--对上传...(11.22)
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)