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