AccessVBA(ADO)を使用し、非連結のフォーム上で以下の事をしたいです。
(1) テーブルに保存された任意のレコードの画像を、フォームに表示する。
(2) HDD上に保存されているBMPファイルを、テーブルの任意のレコードに保存する。
テーブルにはOLEオブジェクト型のフィールドが存在し「Bitmap image」でデータが格納されています。
また、「非連結のフォーム」を前提としております。
上記(1)については以下の方法で実現できました。
・非連結のフォーム上に「連結オブジェクトフレームコントロール」を用意しコントロールソースを空にしておく。
・ADOでテーブルからレコードを取得し、画像を上記コントロールに移送する。
コーディング例:
Me.Controls(strCtlName) = adoRecordSet.Fields(strFldName)
上記(2)については以下の方法で試してみましたが、実現できませんでした。
・HDD上のBMPファイルをバイナリ形式で読み込み、それをレコードの画像フィールドに移送し更新
コーディング例:
Dim bytImage() As Byte
FNO = FreeFile
Open Me.ファイル名 For Binary As FNO
ReDim bytImage(LOF(1) - 1)
Get FNO, , bytImage()
adoRecordSet.Fields(strFldName) = bytImage()
adoRecordSet.Update
結果:Updateは成功したもののテーブルに「ロングバイナリデータ」として保存されてしまった。
GetChunk/AppendChunkも試してみましたが、やはり「ロングバイナリデータ」として
保存されてしまいます。
OLEオブジェクト型のフィールドには実データだけでなくヘッダ情報も格納されていると聞きました。
やはり、「フォームとテーブルを連結する」&「連結オブジェクトフレームコントロールを使う」
しか方法はないのでしょうか・・・?
(文書番号: 205635 も参照しましたが、VBAではなくVBだったため試すことができませんでした。)
長くなりましたが、ご教授いただければ幸いです。よろしくお願いいたします。