ADOでデータベースに接続し、Recordsetを使用してレコードを並べ替える記述 Recordsetで、指定のテーブルのレコードを、指定のフィールドで昇順または降順に並べ替える 昇順の場合 ・ステートメント 代入する際には、全体的にダブルクォーテーションで囲むのをわすれない ▼「adUseClient」を指定しなかった場合に表示されたエラーメッセージを紹介しているページ▼ カレントプロジェクトのデータベースに接続する場合の記述
今回の記述に関する前情報
何を行うか
利用時の書式
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する前に記述すること
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になった