2011-10-14 59 views
3

我將Access 2007數據庫升遷到SQL Server 2008 R2。圖像在圖像類型爲SQL Server中。訪問已鏈接到包含圖像的表格。當我嘗試從Access內顯示時,它不會這樣做。它仍然有OLE對象包裝器。如何使用Microsoft Access顯示來自Sql Server的圖像?

如何獲取該圖像並將其顯示在我的Access表單中?目前,我沒有選擇刪除圖像,將它們放在目錄中並指向它們(我知道的最好方法,但不是選項)。我需要直接從SQL Server讀取圖像/ Blob文件並將其顯示在Access窗體上。

謝謝你的任何想法。

我看到這一點,但它並沒有幫助:

How to display image from sql server in ms access

http://access.bukrek.net/documentation看起來像文件夾的方法

+0

您應該使用'varbinary(max)'作爲'image'已棄用:http://stackoverflow.com/questions/444072/varbinary-vs-image-sql-server-data-type-to-store-binary -data –

+0

這就是訪問給我的。 – johnny

+0

只是爲了闡明,當一個OLE字段綁定到一個窗體中的「綁定OLE控件」,並且一個文件被粘貼到該控件中時,該文件就存儲在一個二進制訪問特定的OLE包裝器中。該控件在顯示文件/圖像時也期望包裝器,但如果該文件是用代碼而不是粘貼保存到表中的,則包裝器不在那裏。在下面的答案中使用未綁定的控件繞過了這個問題,因爲這些控件不需要OLE包裝器。 –

回答

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 
6

自Access 2010以來,可以使用PictureData屬性來存儲和顯示來自SQL Server的圖像。您需要對可以隱藏的SQL Server數據類型varbinary(max)和MS Access中的未綁定圖像控件進行綁定控件。你現在可以簡單地說:

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

反之亦然。你需要添加一些錯誤管理,但很少。

+0

nvarbinary(MAX)是我在SQL Server中使用的數據類型。我在窗體中添加了一個圖像控件,並做了上面Fionnuala的解釋。 –

+0

想通了它自己的作品。 Me.Image0.PictureData = Recordset(「picture」)。Value –

相關問題