こんばんは
VB6です。
複数条件に一致したデータを抽出したいのですが、
もっとも早い方法とはどんなものでしょうか?
データベースはMDBです。
今は、
・
・
Do Until myRst.EOF
key1 = myRst.Fields("A_ddd")
key2 = myRst.Fields("B_sss")
If key1 = 0 And k_key4 = -1 Then
With Me.ListView1.ListItems.Add
.Text = myRst.Fields("C_ww")
.SubItems(1) = myRst.Fields("D_xx")
End With
End If
myRst.MoveNext
Loop
のようにしてリストビューにデータを
表示させています。
宜しくお願いします。
>If key1 = 0 And k_key4 = -1 Then
↓
If key1 = 0 And key2 = -1 Then
でした。
VB6 と MDB だから DAO 使ってると想定。
とりあえず MDB から全レコードを取得して VB 側で判断するよりは、はじめ
から条件を絞り込んだレコードセットを作成した方が早い気はする。
Set myRst =... '(SELECT C_ww,D_xx From 〜 Where A_ddd=0 And B_sss=-1)でレコードセット作成
Do Until myRst.EOF
With Me.ListView1.ListItems.Add
.Text = myRst.Fields("C_ww")
.SubItems(1) = myRst.Fields("D_xx")
End With
myRst.MoveNext
Loop
てな感じでループ内での条件判定がなくせるから。
もっとも実測はしてないので参考程度にどうぞ。
オブジェクトの間接参照をループの外に出しましょう。
Filedsコレクションからフィールド名が "C_ww" のものと "D_xx" のものを探す処理がレコードセットの行数と同じ回数だけ実行される必要はないはずです。
データ全体の抽出時間ではなく、表示までの時間を重視するのであれば、
仮想リストビュー(Virtual ListView)も検討対象になるかも知れませぬ。
Virtual ListViewなら、数百万件のデータも一瞬で表示できますしね。
# APIを使うので、多少の手間はかかるけど……。
ツイート | ![]() |