大家好,我们继续讲解VBA数据库解决方案,今日讲解第43讲内容:如何向数据库中增加图片。这讲的内容我们要把图片存储入数据库中,把图片作为数据来处理。这讲的内容非常适合人事管理及一些图片必要管理的场合。
我们看下面的数据库:
现在我们要把备注单元格中作为图片管理,也就是说要把和对应员工编号的必要的图片放在F列的'备注'字段中,这个时候该如何处理呢?
我们先打开我们的数据库:
修改备注的字段为对象链接和嵌入对象,这时我们将利用图片的控件来装载图片。看下面我给出的代码:
Sub mynzRecords_43()'第43讲将图片添加到数据库中的方案
Dim abytPic()作为字节
Dim strPicPath,strPicName,strFldPath作为字符串
Dim strPath,strTable,strSQL,strMsg作为字符串
罗姆克纳多作为对象
Set cnADO=CreateObject('ADODB .连接)
Set rsADO=CreateObject('ADODB .记录集)
strPath=ThisWorkbook .路径\mydata2.accdb '
strTable='员工记录'
应用程序。文件对话框(msoFileDialogFolderPicker)。AllowMultiSelect=False。Title='选择图片文件夹位置'InitialFileName=ThisWorkbook .路径' \ 'AllowMultiSelect=False。显示
如果。选择编辑项目。计数=0,则退出潜水艇
strFldPath=.SelectedItems(1)”\ ”
以…结尾
cnADO .”开放”提供商=微软.王牌。OLEDB.12.0数据源=' strPath
strSQL='SELECT * FROM ' strTable
rsADO .打开strSQL,cnADO,1,3
一直到rsADO .文件结束
strPicName=rsADO(0)
strPicPath=Dir(strFldPath strPicName '*')
如果Len(strPicPath)为0,则
strPicPath=strFldPath strPicPath
intFn=FreeFile
将二进制文件的strPicPath作为#intFn打开
ReDim abytPic(LOF(intFn) – 1)
Get #intFn,abytPic
关闭#intFn
rsADO('备注)=abytPic
rsADO .更新
PicSum=PicSum 1
如果…就会结束
rsADO .下一步
环
' MsgBox '共有' PicSum '张照片存入数据库'
rsADO .关闭
cnADO .关闭
设置rsADO=无
设置cnADO=无
末端接头
代码截图:
代码讲解:
一带应用程序。文件对话框(msoFileDialogFolderPicker)。AllowMultiSelect=False。Title='选择图片文件夹位置'InitialFileName=ThisWorkbook .路径' \ 'AllowMultiSelect=False。显示
如果。选择编辑项目。计数=0,则退出潜水艇
strFldPath=.SelectedItems(1)”\ ”
以…结尾
上述代码获得要加入数据库的图片的路径。
2 Do直到rsADO .文件结束
strPicName=rsADO(0)
strPicPath=Dir(strFldPath strPicName '*')
如果Len(strPicPath)为0,则
strPicPath=strFldPath strPicPath
intFn=FreeFile
将二进制文件的strPicPath作为#intFn打开
ReDim abytPic(LOF(intFn) – 1)
Get #intFn,abytPic
关闭#intFn
rsADO('备注)=abytPic
rsADO .更新
PicSum=PicSum 1
如果…就会结束
rsADO .下一步
环
打开数据库后,我们要往里面加入图片内容,用的仍是rsADO .更新方法,有了《VBA代码解决方案》 中有关打开二进制文件的知识和动态数组的知识,这些代码不是很困难了。图片是作为一个数组放在数据库中的。
下面我们看程序的运行:
会首先提示你选择图片所在的位置:
最后提示我们图片已经放到数据库中了。
今日内容回向:
一图片是如何放到数据库中的?
2是否理解动态数组呢?