Image 如何使用Microsoft Access显示Sql Server中的图像?

Image 如何使用Microsoft Access显示Sql Server中的图像?,image,sql-server-2008,ms-access,Image,Sql Server 2008,Ms Access,我将Access 2007数据库升级为SQL Server 2008 R2。这些映像在SQL Server中作为映像类型存在。Access具有指向包含图像的表的链接。当我尝试从Access中显示时,它不会这样做。它仍然有OLE对象包装器 如何获取该图像并将其显示在Access中的窗体上?目前,我没有选择删除这些图像,将它们放在一个目录中,并以我所知道的最佳方式指向它们,但没有选择。我需要直接从SQL Server读取图像/blob文件,并将其显示在访问表单上 谢谢你的建议 我看到了这一点,但毫无

我将Access 2007数据库升级为SQL Server 2008 R2。这些映像在SQL Server中作为映像类型存在。Access具有指向包含图像的表的链接。当我尝试从Access中显示时,它不会这样做。它仍然有OLE对象包装器

如何获取该图像并将其显示在Access中的窗体上?目前,我没有选择删除这些图像,将它们放在一个目录中,并以我所知道的最佳方式指向它们,但没有选择。我需要直接从SQL Server读取图像/blob文件,并将其显示在访问表单上

谢谢你的建议

我看到了这一点,但毫无帮助:


看起来下面的文件夹中的文件方法是我成功使用的一个函数,名为BlobToFile。我还发布了我用来测试它的代码。图片被转储到所谓的临时文件中,但它不是真正的临时文件,因为它不在临时目录中。您可以手动删除图像文件,否则必须将其写入临时文件夹。然后我有一个显示图片的图像控件

Private Sub Command1_Click()
    Dim r As DAO.Recordset, sSQL As String, sTempPicture As String
    sSQL = "SELECT ID, PictureBlobField FROM MyTable"
    Set r = CurrentDb.OpenRecordset(sSQL, dbSeeChanges)
    If Not (r.EOF And r.BOF) Then
        sTempPicture = "C:\MyTempPicture.jpg"
        Call BlobToFile(sTempPicture, r("PictureBlobField"))
        If Dir(sTempPicture) <> "" Then
            Me.imagecontrol1.Picture = sTempPicture
        End If
    End If
    r.Close
    Set r = Nothing
End Sub


'Function:  BlobToFile - Extracts the data in a binary field to a disk file.
'Parameter: strFile - Full path and filename of the destination file.
'Parameter: Field - The field containing the blob.
'Return:    The length of the data extracted.
Public Function BlobToFile(strFile As String, ByRef Field As Object) As Long
    On Error GoTo BlobToFileError

    Dim nFileNum As Integer
    Dim abytData() As Byte
    BlobToFile = 0
    nFileNum = FreeFile
    Open strFile For Binary Access Write As nFileNum
    abytData = Field
    Put #nFileNum, , abytData
    BlobToFile = LOF(nFileNum)

BlobToFileExit:
    If nFileNum > 0 Then Close nFileNum
    Exit Function

BlobToFileError:
    MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, _
           "Error writing file in BlobToFile"
    BlobToFile = 0
    Resume BlobToFileExit

End Function

自Access 2010以来,您可以使用PictureData属性存储和显示SQL Server中的图像。您需要SQL Server数据类型varbinarymax的绑定控件(可以隐藏),以及MS Access中的未绑定图像控件。你现在可以简单地说:

Private Sub Form_Current()
    Me.MSAccessImageControl.PictureData = Me.SQLServerImage
End Sub

反之亦然。您将需要添加一些错误管理,但仅此而已。

您应该使用varbinarymax,因为不推荐使用图像:只是为了澄清,当OLE字段绑定到表单中的“绑定的OLE控件”,并将文件粘贴到控件中时,该文件存储在二进制访问特定的OLE包装器中。控件在显示文件/图像时也需要包装器,但是如果文件是用代码保存到表中而不是粘贴的,则包装器不存在。在下面的答案中使用未绑定控件可以绕过这个问题,因为这些控件不需要OLE包装器。nvarbinaryMAX是我在SQL Server中使用的数据类型。我在表单中添加了一个图像控件,并按照Fionnuala上面解释的做了。我自己认为它可以工作。Me.Image0.PictureData=记录集picture.Value