我将Access 2007数据库升级为SQL Server 2008 R2。图像在SQL Server中作为图像类型。 Access具有指向包含图像的表的链接。当我尝试从Access中显示时,它不会这样做。它仍然具有OLE对象包装器。
如何获取该图像并将其显示在Access中的表单上?目前,我没有选择删除图像,将它们放在目录中并指向它们(我知道的最好的方法,但不是一个选项)。我需要直接从SQL Server读取image / blob文件并将其显示在Access表单上。
感谢您的任何想法。
我看到了这一点,但没有帮助:
中的文件答案 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