访问报告中图像的相对路径

时间:2017-06-06 11:51:33

标签: vba image access-vba report relative-path

这是我第一次构建数据库,我想分享我遇到的问题的解决方案。

我的问题是我想在报告中为每条记录显示不同的图像,但我也希望能够移动数据库。这是一个问题。我在所有论坛中搜索,所有不同的解决方案都不起作用。我还发现微软写的一篇文章说,唯一的方法是存储图像的完整路径或将图像存储在数据库中。但是如果移动数据库会导致问题,或者将数据存储在数据库中会占用大量存储空间。

问题是代码不适用于报告中的每条记录,代码适用于整个报告。因此,编写代码以查找后端和图像文件夹将导致在报告中显示该报告中所有记录的第一个图像。

但是我发现,当只在表中存储图像的名称时,它有时会工作(但它不应该有,因为我没有路径)但是当我重新启动数据库时它会停止工作。进一步调查我发现,无论何时打开文件浏览器,它都会将路径存储在某种内存中。只要图像的路径存储在存储器中,它就能够将图像链接到路径。

所以我的解决方案......

当打开您访问报告的表单时,将打开文件浏览器并粘贴图像的路径(使用代码查找后端和图像文件夹),然后关闭浏览器。这将创建一个链接到路径的图像名称(存储在表中)。并且将为报告中的每个不同记录显示每个不同的图像。

不是一个漂亮的解决方案。无论何时打开表单,您都会看到文件浏览器的闪存。但它完成了工作。

在加载表单事件中:

`'这将找到后端和图像文件夹:

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

`

2 个答案:

答案 0 :(得分:2)

您可以将图片移动到数据库文件夹的子文件夹

然后保存图片'这样的名字:

Picture1.jpg
Picture2.jpg

运行应用程序时,获取图片的路径:

PictureFolder = CurrentProject.Path & "\FolderName\"

那么图片的路径将是:

PictureFolder & Me!PictureFileName.Value

当你"移动"你的数据库,移动数据库文件和带有图片文件的文件夹。

答案 1 :(得分:0)

是的,我只是遇到了同样的问题,我也同意Richard_Ha所说的,但是就我而言,我通过将图像路径存储在文本框及其工作中来解决了这个问题。

第一个文本框名称“ fileimage_txt ”并绑定到表上的图像文件名列表

具有属性的第二个文本框名称“ image_path

Fulls::where([['user_id','=',auth()->user()->id]])
                ->where([['title','LIKE',"%".$text_val."%"]])
                ->orderBy('id','DESC')
                ->skip($offset)
                ->take(2)

和具有属性的图像控件

Source Control : =GetImagePath()
visible : No (if u dont want it get printed)