ページの先頭行へ戻る
Symfoware Server V10.0.0/V10.0.1 アプリケーション開発ガイド(ODBCドライバ編)

C.2.3 BLOB型データの参照

BLOB型データを参照するサンプルコードについて説明します。

本サンプルコードは、GetChunkメソッドで16384バイトずつBLOB型データを取得します。取得したBLOB型データはOpenステートメントを使用してファイルに出力します。出力したデータをピクチャボックスコントロールで表示します。事前にフォームへピクチャボックスコントロール(PictureBox1)を追加してください。

アプリケーションの手順

  1. コネクションを接続します。詳細は、“C.2.1 接続および切断”を参照してください。

  2. rdoConnection.OpenResultsetメソッドでrdoResultsetオブジェクトを生成します。

  3. rdoResultsetオブジェクトよりデータを取得します。
    rdoResultset.EOFプロパティでカレント行がEOFかを確認します。
    rdoColumn.ColumnSizeメソッドで取得データのバイト数を確認します。
    rdoColumn.GetChunkメソッドで指定バイト数分データを取得します。
    rdoResultset.MoveNextメソッドでカレント行を次の行へと移動します。

  4. rdoResultset.CloseメソッドでrdoResultsetオブジェクトを閉じます。

  5. コネクションを切断します。

  6. オブジェクトを破棄します。

エラー処理については、“C.2.11 エラー処理”を参照してください。

'オブジェクト宣言
Dim Env As rdoEnvironment
Dim Con As rdoConnection
Dim Rst As rdoResultset

Dim DataFile As Integer
Dim Chunks As Integer
Dim Fl As Long
Dim Fragment As Integer
Dim Chunk() As Byte
Const ChunkSize As Integer = 16384
Dim k As Integer
Dim i As Integer

'rdoEnvironmentオブジェクトの生成
Set Env = rdoEngine.rdoEnvironments(0)

On Error GoTo ErrorProc

'1. コネクション接続
Set Con = Env.OpenConnection("DSN01", rdDriverNoPrompt, _
                             False, "UID=USER01;PWD=PASS01;")

'2. rdoResultsetオブジェクトの生成
Set Rst = Con.OpenResultset("SELECT * FROM IMGTBL", _
                        rdOpenForwardOnly, _
                        rdConcurReadOnly, _
                        rdExecDirect)

'行カウントの初期化
i = 1

'3. データの取得
'EOFまで繰り返し
Do Until Rst.EOF

    'BLOB型データのサイズを取得
    Fl = Rst.rdoColumns("BLB_C").ColumnSize

    'BLB_C列にデータがあるか
    If Fl > 0 Then
        'BLOB型データが存在する場合

        '表示しているイメージを消す
        Picture1.Picture = Nothing
        '規定量にデータを分けて取得するため、分割数と残量を求める
        Chunks = Fl \ ChunkSize
        Fragment = Fl Mod ChunkSize
        ReDim Chunk(Fragment - 1)
        '残量分のデータ取得
        Chunk() = Rst.rdoColumns("BLB_C").GetChunk(Fragment)

        'FileStreamオブジェクトの生成(ファイルを開く)
        DataFile = FreeFile
        Open "pictemp" For Binary Access Write As DataFile

        'BLOB型データをファイルに出力する
        Put DataFile, , Chunk()

        ReDim Chunk(ChunkSize)
        '分割数分繰り返し
        For k = 1 To Chunks
            '規定量分のデータ取得
            Chunk() = Rst.rdoColumns("BLB_C").GetChunk(ChunkSize)
            'BLOB型データをファイルに出力する
            Put DataFile, , Chunk()
        Next k

        'FileStreamオブジェクトを閉じて破棄する
        Close DataFile
        'Set DataFile = Nothing

        '出力したファイルをPictureBoxコントロールで表示する
        Picture1.AutoSize = True
        Picture1.Picture = LoadPicture("pictemp")
        Kill "pictemp"

    End If
    'メッセージボックスの表示
    MsgBox i & "行目を取得しました", _
                    vbOKOnly, "Message"
    '行の位置づけ
    Rst.MoveNext
    i = i + 1
Loop

'4. rdoRecordsetオブジェクトを閉じる
Rst.Close

'5. コネクション切断
Con.Close

'6. オブジェクトの破棄
Set Rst = Nothing
Set Con = Nothing
Set Env = Nothing

'表示しているイメージを消す
Picture1.Picture = Nothing

Exit Sub

'エラー処理
ErrorProc:

'エラー処理ルーチンを記述します