«VB6»バイナリーデータの抽出と表示

タグの編集
投稿者 はなねこ  (社会人) 投稿日時 2021/7/13 10:37:59
VB6でのSQL Serverからのデータの抽出について教えて頂けないでしょうか。
varbinary(MAX)のデータを抽出して画像を表示するといったことを行いたいのですが
バイナリデータの扱いが分かりません。
画像ファイル(バイナリデータ)の登録は別ソフトで行い登録済みです。
試しに下記の様にしてADODB.Recordseを使用してFieldsで出力できないのは確認したのですが、、、
どう抽出してデータを保持しすればイメージへの変換を行えるか教えて頂けないでしょうか。
宜しくお願い致します。

Dim CN As ADODB.Connection
Dim RS As New ADODB.Recordset

strSQL = "SELECT 画像  FROM テーブル"   ’← 画像項目が「varbinary(MAX)」です
RS.Open strSQL, CN, adOpenStatic, adLockOptimistic


Dim b() As Byte
Do Until RS.EOF
    ReDim Preserve b(i)          
    b(i) = objRS.Fields("Picture").Value   ’←取り合えずByte型に入れただけになっています。
    i = i + 1
  RS.MoveNext      
 Loop
投稿者 (削除されました)  () 投稿日時 2021/7/13 11:22:59
(削除されました)
投稿者 はなねこ  (社会人) 投稿日時 2021/7/13 14:33:15
質問の追記です。
下記のように配列に格納してイメージに変換または画像ファイル出力できるでしょうか?
Dim b() As Byte
Do Until RS.EOF
  Dim lSize As Long      
     lSize = objRS.Fields("Picture").ActualSize

   For j = 0 To lngSize - 1
        ReDim Preserve b(j)
          b(j) = objRS.Fields("Picture").Value(j)
      Nex
  RS.MoveNext      
 Loop
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/7/13 16:24:20
一括取得するなら、そのまま Byte 配列として受け取れるでしょう。
Dim bin() As Byte
bin = rs.Fields("Picture").Value


データが大きすぎて一括取得が難しい場合は、
GetChunk メソッドを繰り返し呼び出して、
データを少しずつ取り出していくこともできます。
https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/getchunk-method-ado
投稿者 はなねこ  (社会人) 投稿日時 2021/7/13 17:46:12
魔界の仮面弁士様
お返事ありがとうございます。

一括取得できました。
ループ不要でしたありがとうございます。

このByte配列からJPEGファイルを作成して保存とできるでしょうか?
Streamへ入れてからならできるのかなど模索しているのですがわからないことが多く
お手数おかけしますが、回答頂けると助かります。
よろしくお願いいたします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/7/13 18:26:19
Picture フィールドに記録されているファイルが JPEG そのものなら、こうかな。
もちろん Stream オブジェクトで保存しても良いですね。

bin = rs.Fields("Picture").Value

saveFilePath = "D:\Picture1.jpeg"
fno = FreeFile()
Open saveFilePath For Output As #fno
Close #fno
Open saveFilePath For Binary Lock Read Write As #fno
Put #fno, , bin
Close #fno
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/7/13 19:23:07
Stream オブジェクトならこんな感じ。
With New ADODB.Stream
    .Type = adTypeBinary
    .Open
    .Write bin
    .Flush
    .SaveToFile saveFilePath, adSaveCreateOverWrite
End With
投稿者 はなねこ  (社会人) 投稿日時 2021/7/13 21:28:14
魔界の仮面弁士様
お返事ありがとうございます。

FreeFileとStreamでJPEGファイルの作成が出来ました。 ​
とても助かりました。
ありがとうございます。