【发布时间】:2017-06-06 11:51:33
【问题描述】:
这是我第一次构建数据库,我想分享我遇到的问题的解决方案。
我的问题是我想为报告中的每条记录显示不同的图像,但我也希望能够移动数据库。这是一个问题。我在所有论坛中搜索,所有不同的解决方案都不起作用。我还发现微软写的一篇文章说,唯一的方法是要么存储图像的完整路径,要么将图像存储在数据库中。但是如果数据库被移动,就会出现问题,或者将图像存储在数据库中会占用大量存储空间。
问题是代码不适用于报告中的每条记录,代码适用于整个报告。因此,编写代码来查找后端和图像文件夹将导致在报告中显示该报告中所有记录的第一张图像。
但是我发现,当只将图像的名称存储在表中时,它有时会起作用(但它不应该有,因为我没有路径)但是当我重新启动数据库时它会停止工作.进一步调查我发现,每当您打开文件浏览器时,它都会将路径存储在某种内存中。只要图像的路径存储在内存中,它将能够将图像链接到路径。
所以我的解决方案……
当您访问报告的表单打开时,文件浏览器将打开并粘贴到图像的路径(使用代码查找后端和图像文件夹),然后关闭浏览器。这将使用路径创建指向图像名称(存储在表中)的链接。并且每个不同的图像将显示在报告中的每个不同的记录中。
不是一个很好的解决方案。每当打开表单时,您都会看到文件浏览器的闪烁。但它可以完成工作。
在加载表单事件中:
`'这将找到后端和图像文件夹:
Dim filepath As String
Dim strBackEndPath As String
Dim lenPath As Integer
Dim i As Integer
Dim j As Integer
strBackEndPath = CurrentDb.TableDefs("yourTabeInBackend").Connect
j = InStrRev(strBackEndPath, "=") + 1
strBackEndPath = Mid(strBackEndPath, j)
BackPath = Left(strBackEndPath, InStrRev(strBackEndPath, "\"))
filepath = BackPath & "YourImageFolder\"
'this will open the folder browser and paste in the path and close it:
Dim f As Object
Set f = Application.FileDialog(msoFileDialogFolderPicker)
Dim varFile As Variant
Dim strPath As String
Dim fileName As String
With f
.InitialFileName = (filepath)
.AllowMultiSelect = False
SendKeys "{ESC}", True
f.Show
For Each varFile In .SelectedItems
Next varFile
End With
`
【问题讨论】:
标签: vba image ms-access report relative-path