如何使用Microsoft Access从Sql Server显示图像?

时间:2011-10-14 15:27:38

标签: image sql-server-2008 ms-access

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

如何获取该图像并将其显示在Access中的表单上?目前,我没有选择删除图像,将它们放在目录中并指向它们(我知道的最好的方法,但不是一个选项)。我需要直接从SQL Server读取image / blob文件并将其显示在Access表单上。

感谢您的任何想法。

我看到了这一点,但没有帮助:

How to display image from sql server in ms access

http://access.bukrek.net/documentation看起来像文件夹方法

中的文件

2 个答案:

答案 0 :(得分:7)

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

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

反之亦然。你需要为此添加一些错误管理,但很少。

答案 1 :(得分:2)

以下是我成功使用的名为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