2011-10-14 70 views
3

Access 2007データベースをSQL Server 2008 R2にアップサイズしました。イメージは、イメージタイプとしてSQL Serverにあります。アクセスには、イメージを含むテーブルへのリンクがあります。私がアクセス内から表示しようとすると、それはしません。それにはまだOLE Objectラッパーがあります。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

'image'が推奨されていないので、' varbinary(max) 'を使うべきです:http://stackoverflow.com/questions/444072/varbinary-vs-image-sql-server-data-type-to-store-binary -data –

+0

これはアクセスが私に与えたものです。 – johnny

+0

明確にするために、OLEフィールドがフォームの 'Bound OLE Con​​trol'にバインドされ、ファイルがコントロールに貼り付けられると、ファイルはバイナリのアクセス固有の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のバインドされていないImageコントロールのバインドされたコントロールが必要です。次のように簡単に言うことができます:

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

逆も同様です。いくつかのエラー管理を追加する必要がありますが、それ以外の方法はほとんどありません。

+0

nvarbinary(MAX)は、SQL Serverで使用したデータ型です。私はイメージコントロールをフォームに追加し、Fionnualaが上で説明したようにしました。 –

+0

それは自分で考えて、それは動作します。 Me.Image0.PictureData = Recordset( "picture")。値 –

関連する問題