需求:
把登陆窗体中的图片,替换为数据表中的图片.
思路:
1.把图片保存到本地
2.修改图片控件的图片路径
难点:
1.对附件的操作方法不熟练
2.不同的数据库操作方法有差异
主要用到的方法:
Field2.SaveToFile 方法 (DAO)
效果(左侧图片的变化):
原窗体:
载入表中图片后的效果:
实现代码:
版本一.如果图片在本地数据库(不属于外链表)
' 设置登录界面图片的子程序 Sub SetLoginPic()' 定义变量:' rst - 用于操作tblsystemsetting表的记录集' rsA - 用于操作附件字段的记录集' fld - 用于表示附件字段' strFullPath - 存储临时文件完整路径的字符串Dim rst As DAO.Recordset2Dim rsA As DAO.Recordset2Dim fld As DAO.Field2Dim strFullPath As String' 打开系统设置表,注意CurrentDB是本地数据.Set rst = CurrentDb.OpenRecordset("tblsystemsetting")' 获取附件字段Set fld = rst("Attachments")' 检查记录集是否为空If Not rst.EOF Then' 打开附件字段中的记录集Set rsA = fld.value' 检查附件记录集是否为空If Not rsA.EOF Then' 构建临时文件路径:系统临时文件夹 + 附件文件名strFullPath = VBA.Environ("TEMP") & "\" & rsA("FileName")' 忽略错误(如果临时文件已存在)On Error Resume Next' 删除可能已存在的临时文件Kill strFullPath' 将附件中的文件数据保存到临时文件rsA("FileData").SaveToFile strFullPath' 将图片控件Image57的图片设置为临时文件Me.Image57.Picture = strFullPathEnd IfrsA.CloseEnd If rst.Close' 释放对象变量Set fld = NothingSet rsA = NothingSet rst = Nothing End Sub
版本二.图片在其他数据库
Sub SetLoginPic(ByVal DBPath As String)Dim rst As DAO.Recordset2Dim rsA As DAO.Recordset2Dim fld As DAO.Field2Dim strFullPath As StringDim dbExternal As DAO.DatabaseDim strConnect As String' 关键1:构建加密数据库连接字符串(注意密码暴露风险)strConnect = ";Database=" & DBPath & ";PWD=数据库密码"' 关键2:静默打开外部数据库(不显示独占/只读提示)Set dbExternal = DBEngine.Workspaces(0).OpenDatabase("", False, False, strConnect)' 关键3:从外部库读取系统设置表Set rst = dbExternal.OpenRecordset("tblsystemsetting")Set fld = rst("Attachments")If Not rst.EOF ThenSet rsA = fld.valueIf Not rsA.EOF Then' 关键4:将附件图片提取到临时目录strFullPath = VBA.Environ("TEMP") & "\" & rsA("FileName")On Error Resume NextKill strFullPath ' 强制覆盖旧文件rsA("FileData").SaveToFile strFullPath' 核心功能:设置窗体图片Me.Image57.Picture = strFullPathEnd IfrsA.CloseEnd If' 关键5:必须按顺序关闭对象(先记录集后数据库) rst.ClosedbExternal.Close' 显式释放对象Set rsA = NothingSet rst = NothingSet dbExternal = Nothing End Sub