我有一个Access表,其中每个项目都附加了一个Visio文件(.vsd)。
在我的Access表单中,我想查看该文件。我不在乎它是一个可编辑的Visio文件,一个预览或只是一个图像。
我已经构建了一个VBA代码,允许我从Directory加载Visio文件。但我需要从表中加载文件。
这是我的VBA代码。
Private Sub Carica_Dati()
Dim path As String
path = "C:\Users\VisioFlow_001.vsd"
With Me.VisioObject ' name of the OLE Object where I want to put the Visio file
.Class = "Visio.Drawing.11"
.OLETypeAllowed = acOLELinked
.SourceDoc = path ' HERE I WANT TO LOAD THE FILE FROM A TABLE OF THE DB
.Enabled = True
.Locked = False
.Action = acOLECreateLink
.SizeMode = acOLESizeZoom
End With
End Sub
这是表格的预览。
更新
这是一张图片,显示文件如何附加到表格。
答案 0 :(得分:0)
由于Access中的附件字段不是很一致,因此除非您愿意做复杂的事情,否则不能直接将它们加载到OLE对象中
可以找到关于附件的微软文档here
我对附件的观察:二进制数据字段包含以下内容之一:
总而言之,微软为我们提供了一种将原始文件保存到磁盘的方法,但是没有为我们提供从实际文件数据中删除这些初始字符和文件类型的方法,或者一种简单的方法来识别文件是否被压缩(您可以使用链接中提供的表检查文件类型以检查它是否应该)。
总之,您可能最好用数据库中的OLE对象替换附件字段,或者在显示之前将附件文件写入磁盘。
如果您使用OLE对象字段,并将其加载为长二进制数据(而不是通过GUI),您可以轻松实现您在不将文件写入磁盘时所寻求的行为,因为二进制数据可以在没有任何额外的情况下使用字符。
将附件文件写入磁盘:
Dim rsForm As DAO.Recordset2
Dim rsFiles As DAO.Recordset2
Set rsForm = Me.Recordset
Set rsFiles = rsForm.Fields("attachment_column").Value
If Not rsFiles.EOF Then
Dim fileLocation As String
fileLocation = Environ("TEMP") & rsFiles.Fields("FileName").Value
rsFiles.Fields("FileData").SaveToFile fileLocation
'Your existing code to display the OLE object here
End If
答案 1 :(得分:0)
您不想使用“附件”功能。它的目的与你所尝试的不同。
将图像放入数据库外的独立文件夹中。
在包含主表单记录的表格中 - 您需要一个新字段来保存路径&图像文件名。这是一个文本字段。 (如果路径段是统一的,那么所有人都可以通过代码插入其他地方,而不是将其存储在此字段中。)
然后在表单设计中 - 使用图像控件。此控件(所有控件)都有一个source属性 - 将使用保存路径的字段随每个记录而变化。文件名。
关于用每条记录更改图像的主题做一个bing / google - 设置并不是直观的。请注意,较旧版本的操作方式不同,因此请确保您获得相对较新的建议。
然后,当您使用表单并更改记录时 - 图像将会更改。
注意所有这些之后的注意事项....我不知道visio文件类型是否有效 - 我知道jpg和bmp会这样做...所以第一次完整性检查一个简单的固定图像与该文件类型,看看它是否工作...