« TBSラジオ『アクセス』に宮台真司出演 | トップページ | Exchangeから送信するメールの別名を変更するには »

2006/12/31

Recordsetオブジェクトをソート可能な配列変数として使う

VBScriptで「自由にソートできる配列変数」が使えないかと調べていたら、ADODB.Recordsetオブジェクトがその目的に使えることがわかった。検索エンジンにひっかかるようにここに記しておく。

【参考ページ】
http://www.roubaixinteractive.com/PlayGround/FSO/Sort_Folder_Contents.asp

単純に「ソートできる文字列型の配列変数」の代わりになるものを作りたければ、ADODB.Recordsetオブジェクトを生成し、文字列型の列を1つ追加する。下記の例では最大半角200文字を格納できる「Field1」という名称の列を1つ追加している。もちろん複数の列を追加することもできるし、文字列型以外の型の列も追加できる。

新しい値を追加するにはRecordsetオブジェクトのAddNewメソッドを使い、データベースでいえば行を追加する感覚になる。最後にUpdateメソッドを呼び出すと変更が反映される。

ソートするにはRecordsetオブジェクトのSortメソッドに、SQL文の「ORDER BY」以降の記述をそのまま引数としてわたせばよい。下記の例では「Field1 DESC」となっており、Field1列の降順でソートされる。昇順なら「ASC」、複数列を指定するなら「Field1 DESC, Fields2 ASC」などとなる。

ソートした結果を取り出すのはデータベースの行操作とまったく同じで、MoveFirstメソッドを呼び出してから、繰り返し文でEOF(データの終わり)に突き当たるまでMoveNextを呼び出せばよい。

Dim oRs
Const adInteger = 3
Const adDate = 7
Const adVarChar = 200

Set oRs = CreateObject("ADODB.Recordset")

With oRs.Fields
.Append "Field1", adVarChar, 200
End With

oRs.AddNew
oRs.Fields("Field1") = "AAAA"
oRs.AddNew
oRs.Fields("Field1") = "CCCC"
oRs.AddNew
oRs.Fields("Field1") = "BBBB"
oRs.Update

oRs.Sort = "Field1 ASC"
oRs.MoveFirst
Do Until oRs.EOF
' 何かの処理をする
oRs.MoveNext
Loop

|

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/70828/13274425

この記事へのトラックバック一覧です: Recordsetオブジェクトをソート可能な配列変数として使う: