访问:显示附件中的 .vsd

Access: display .vsd from attachments

我有一个 Access table,其中每个项目都附加了一个 Visio 文件 (.vsd)。

在我的 Access 表单中,我想查看该文件。我不在乎它是 editable Visio 文件、预览还是只是图像。

我构建了一个 VBA 代码,可以让我从目录加载 Visio 文件。但是我需要 从 table.

加载文件

这是我的 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

这里是表格的预览。

更新

这里有一张图片显示文件是如何附加到 table。

由于 Access 中的附件字段不是很一致,直接将它们加载到 OLE 对象中不是一种选择,除非您愿意做复杂的事情

可以找到有关附件的 Microsoft 文档here

我对附件的观察:二进制数据字段包含以下内容之一:

  • 一些我无法识别的字符+文件类型+附加的文件数据
  • 一些我无法识别的字符+文件类型+附加到它的文件数据的压缩版本

微软,尽其所能,为我们提供了将原始文件保存到磁盘的方法,但没有为我们提供从实际文件数据中删除这些初始字符和文件类型的方法,或者识别文件是否被压缩的简单方法(您可以使用 link 中提供的 table 检查文件类型以检查它是否应该是)。

总而言之,您最好要么用数据库中的 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

您不想使用附件功能。它的目的与您的尝试不同。

将图像放入数据库之外的独立文件夹中。

在包含主表单记录的 table 中 - 您需要一个包含路径和图像文件名的新字段。这是一个文本字段。 (如果路径段对所有人来说都是统一的,则可以通过代码将其插入其他地方,而不是将其存储在该字段中。)

然后在窗体设计中——使用图像控件。此控件(所有控件)有一个源 属性 - 它将随着使用保存路径和文件名的字段的每条记录而改变。

做一个 bing/google 关于用每条记录更改图像的主题 - 设置不一定直观。请注意,旧版本的处理方式有所不同,因此请确保您获得了相对较新的建议。

然后当您使用表格并更改记录时 - 图像将会改变。

输入所有这些后请注意...。我不知道 visio 文件类型是否有效 - 我知道 jpg 和 bmp 可以...所以首先要检查具有该文件类型的简单固定图像以查看如果有效...