たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_ADOの利用_レコード操作その7【Recordset】【Sort】レコードの並べ替え

ADOでデータベースに接続し、Recordsetを使用してレコードを並べ替える記述

今回の記述に関する前情報

何を行うか

Recordsetで、指定のテーブルのレコードを、指定のフィールドで昇順または降順に並べ替える

利用時の書式

昇順の場合
Recordsetのオブジェクト変数.Sort = "フィールド名1 ASC , フィールド名2 ASC , ........"
降順の場合
Recordsetのオブジェクト変数.Sort = "フィールド名1 DESC, フィールド名2 DESC , ........"


記述例における利用パーツ

ステートメント
  →Do Loop
・メソッド
  →Sort/ MoveNext / Open / Close

注意点

代入する際には、全体的にダブルクォーテーションで囲むのをわすれない
並べ替えを解除する際には、Recordsetのオブジェクト変数.Sort = ""と記述する
ASCまたはDESCの記述を省略すると、昇順になる
CursorLocationに「adUseClient」を設定しないとエラーになる
※CursorLocationはRecordsetでOpenする前に記述すること

▼「adUseClient」を指定しなかった場合に表示されたエラーメッセージを紹介しているページ▼
Access VBA、ADODBのレコードセットでSortメソッドを呼ぶとエラー - misc.log

【実践】指定のテーブルの指定のフィールドの値をSortメソッドで並べ替えを行う記述例

カレントプロジェクトのデータベースに接続する場合の記述
テーブル「yubin_data_base」のフィールド「postcode」で降順に並べ替えて
フィールド「postcode」「city」「addressline」の値をイミディエイトウィンドウに表示したのち 一度メッセージを出してから、並べ替えを解除してもう一度同じようにイミディエイトウィンドウに表示

▼取得対象テーブル「yubin_data_base」▼


▼記述例▼

Sub sort_currentdata()

Dim CNT As adodb.connection
Dim RST As adodb.Recordset
Set CNT = CurrentProject.connection
Set RST = New adodb.Recordset

RST.CursorLocation = adUseClient 'RecordsetでOpenする前に記述
RST.Open "yubin_data_base", CNT

RST.Sort = "postcode DESC"

Debug.Print "-------postcodeフィールドで降順に並べ替え"

Do Until RST.EOF
    Debug.Print RST("postcode"), RST("city"), RST("addressline")
    RST.MoveNext
Loop

MsgBox "postcodeで降順に並べ替えました" + vbCrLf + "並べ替えを解除します"

RST.Sort = ""

Debug.Print "-------並べ替えを解除"

Do Until RST.EOF
    Debug.Print RST("postcode"), RST("city"), RST("addressline")
    RST.MoveNext
Loop

RST.Close: CNT.Close
Set RST = Nothing: Set CNT = Nothing

End Sub



▼メッセージボックスの表示▼



▼実行結果▼


カレントレコードは並べ替える前は基本的にどこにいるのか…並べ替えた後と解除した後については、ともにEOFがtrueになった