«VB6»バイナリーデータの抽出と表示 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
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 18:26:19
Picture フィールドに記録されているファイルが JPEG そのものなら、こうかな。
もちろん Stream オブジェクトで保存しても良いですね。
もちろん 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 17:46:12
魔界の仮面弁士様
お返事ありがとうございます。
一括取得できました。
ループ不要でしたありがとうございます。
このByte配列からJPEGファイルを作成して保存とできるでしょうか?
Streamへ入れてからならできるのかなど模索しているのですがわからないことが多く
お手数おかけしますが、回答頂けると助かります。
よろしくお願いいたします。
お返事ありがとうございます。
一括取得できました。
ループ不要でしたありがとうございます。
このByte配列からJPEGファイルを作成して保存とできるでしょうか?
Streamへ入れてからならできるのかなど模索しているのですがわからないことが多く
お手数おかけしますが、回答頂けると助かります。
よろしくお願いいたします。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2021/7/13 16:24:20
一括取得するなら、そのまま Byte 配列として受け取れるでしょう。
データが大きすぎて一括取得が難しい場合は、
GetChunk メソッドを繰り返し呼び出して、
データを少しずつ取り出していくこともできます。
https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/getchunk-method-ado
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 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
下記のように配列に格納してイメージに変換または画像ファイル出力できるでしょうか?
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 11:22:59
(削除されました)
投稿者 はなねこ  (社会人)
投稿日時
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
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
お返事ありがとうございます。
FreeFileとStreamでJPEGファイルの作成が出来ました。
とても助かりました。
ありがとうございます。