tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: 抽出クエリを非同期で実行し、 DataSet に入れる方法
投稿日: 2007/08/02(Thu) 18:06
投稿者じゅん

> BackgroundWorker クラスを併用してみては如何でしょう。

次のようにしてみました。
とりあえず、期待通りの動作にはなったのですが、
問題個所・改良すべき個所はありますか?

BackgroundWorker クラスを使うのは初めてなもので、
よろしくお願いいたします。
(下のコードもネットからダウンロードしたものを
  自分用にアレンジしただけです・・・^^;)


'=========== 以下、サンプルコード =============================================

' Button1 と BackgroundWorker1 を追加しておく。

Dim ds As New System.Data.DataSet
Dim isComplete As Boolean

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    ' adapter.Fill が完了したかどうかのフラグ
    isComplete = False

    ' adapter.Fill を非同期で実行( adapter.Fill が完了する前に次のコードを実行させる)
    BackgroundWorker1.RunWorkerAsync()

    ' adapter.Fill が完了するまでループ(画面が真っ白にならないように DoEvents を実行しつづける)
    Do
        Application.DoEvents()
    Loop While isComplete = False

    ' レコード数分ループ
    For Each row As System.Data.DataRow In ds.Tables(0).Rows

        ' カラム数分ループ
        For col As Integer = 0 To ds.Tables(0).Columns.Count - 1

            ' Null を空の文字列に置き換える(下の Join でエラーが出ないようにする為)
            row(col) = row(col).ToString

        Next

        ' 1レコードのデータをカンマ区切りで連結したものをイミディエイトウィンドウに出力
        Debug.Print(Join(row.ItemArray, ","))

    Next

End Sub

Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

    ' データベースに接続
    Dim connection As New System.Data.Odbc.OdbcConnection("Driver={xxx};na=xxx;db=xxx;uid=xxx;pwd=xxx;")

    Dim adapter As New System.Data.Odbc.OdbcDataAdapter("select * from table", connection)

    ' 抽出クエリの実行
    adapter.Fill(ds)               '<--- ここ

    ' データベースから切断
    connection.Close()

End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
    isComplete = True
End Sub

'=========== 以上、サンプルコード =============================================

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。