テーブルへの接続とレコードの取得

Supportメソッドの利用

Sub レコードセットの機能調査()
Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset
Dim FileName As String

FileName = ThisWorkbook.Path & "\mdb\2-sampleDB.mdb"
myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName
myRS.Open "社員", myCon, adOpenStatic, adLockReadOnly

'レコードセットの機能を調査するプロシージャ呼び出し
Call ADOSupport(myRS)

myRS.Close: Set myRS = Nothing
myCon.Close: Set myCon = Nothing

End Sub
Sub ADOSupport(myRecordset As Object)
'レコードセットの機能を調査する
Dim strMsg As String

If myRecordset.Supports(adApproxPosition) Then
    strMsg = "OK : AbsolutePositionプロパティとAbsolutePageプロパティをサポートします。"
Else
    strMsg = "NO : AbsolutePositionプロパティとAbsolutePageプロパティをサポートしていません。"
End If

If myRecordset.Supports(adAddNew) Then
    strMsg = strMsg & vbNewLine & _
            "OK : 新規レコードを追加するAddNewメソッドをサポートします。"
Else
    strMsg = strMsg & vbNewLine & _
            "NO : 新規レコードを追加するAddNewメソッドをサポートしません。"
End If

If myRecordset.Supports(adBookmark) Then
    strMsg = strMsg & vbNewLine & _
            "OK : 特定のレコードへのアクセスを確保するBookmarkプロパティをサポートします。"
Else
    strMsg = strMsg & vbNewLine & _
            "NO : 特定のレコードへのアクセスを確保するBookmarkプロパティをサポートしません。"
End If

If myRecordset.Supports(adDelete) Then
    strMsg = strMsg & vbNewLine & _
            "OK : レコードを削除する Delete メソッドをサポートします。"
Else
    strMsg = strMsg & vbNewLine & _
            "NO : レコードを削除する Delete メソッドをサポートしません。"
End If

If myRecordset.Supports(adFind) Then
    strMsg = strMsg & vbNewLine & _
            "OK : Recordset 内の行の位置を確認するFindメソッドをサポートします。"
Else
    strMsg = strMsg & vbNewLine & _
            "NO : Recordset 内の行の位置を確認するFindメソッドをサポートしません。"
End If

If myRecordset.Supports(adIndex) Then
    strMsg = strMsg & vbNewLine & _
            "OK : インデックスに名前を付けるIndexプロパティをサポートします。"
Else
    strMsg = strMsg & vbNewLine & _
            "NO : インデックスに名前を付けるIndexプロパティをサポートしません。"
End If

If myRecordset.Supports(adMovePrevious) Then
    strMsg = strMsg & vbNewLine & _
            "OK : カレントレコードの位置を後方に移動するMoveFirst、" & _
            "MovePrevious、Move、GetRowsメソッドをサポートします。"
Else
    strMsg = strMsg & vbNewLine & _
            "NO : カレントレコードの位置を後方に移動するMoveFirst、" & _
            "MovePrevious、Move、GetRowsメソッドをサポートしません。"
End If

If myRecordset.Supports(adSeek) Then
    strMsg = strMsg & vbNewLine & _
            "OK : Recordset 内の行に割り当てるSeekメソッドをサポートします。"
Else
    strMsg = strMsg & vbNewLine & _
            "NO : Recordset 内の行に割り当てるSeekメソッドをサポートしません。"
End If

If myRecordset.Supports(adUpdate) Then
    strMsg = strMsg & vbNewLine & _
            "OK : 既存のデータを変更するUpdateメソッドをサポートします。"
Else
    strMsg = strMsg & vbNewLine & _
            "NO : 既存のデータを変更するUpdateメソッドをサポートしません。"
End If

Debug.Print strMsg

End Sub

Supportメソッド
ADOには、指定したRecordsetオブジェクトが特定の種類の機能(レコードセットが編集可能であるか、新規レコードの追加が可能であるか)をサポートするかどうか、Supportメソッドを用いて調べることができる。

Recordset.Support(CursorOptions)

引数 内容
Recordset Recordsetオブジェクトを表わすオブジェクト変数 (省略不可)
CursorOptions 機能のサポート別に定数が用意されています (省略不可)

定数 説明
adApproxPosition AbsolutePosition プロパティと AbsolutePageプロパティをサポートします。
adAddNew 新規レコードを追加する AddNewメソッドをサポートします。
adBookmark 特定のレコードへのアクセスを確保する Bookmarkプロパティをサポートします。
adDelete レコードを削除する Deleteメソッドをサポートします。
adFind Recordset 内の行の位置を確認する Findメソッドをサポートします。
adIndex インデックスに名前を付ける Indexプロパティをサポートします。
adMovePrevious ブックマークを使用せずにカレントレコードの位置を後方に移動するMoveFirst、MovePrevious メソッドおよび Move、またはGetRows メソッドをサポートします。
adSeek Recordset 内の行に割り当てる Seekメソッドをサポートします。
adUpdate 既存のデータを変更する Updateメソッドをサポートします。