Topへもどる
前へ

Excel からデータベーステーブルの操作

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

タイトル一覧へもどる
次へ
■サイト内検索
Google

目的に応じた接続形態を取る

■構文 OPEN メソッドを使用して任意のテーブルへの接続を行う
recordset.Open Source, ActiveConnection, CursorType, LockType, Options

引数
引数 内容
Source テーブル名、クエリ名、SQLステートメントなど、Recordset オブジェクトの参照する対象を指定 (省略可)
ActiveConnection 接続しているConnectionオブジェクト名を指定 (省略可)
CursorType レコードの走査手段を指定。カーソルのタイプによって、実行できる処理やパフォーマンスが変化する (省略可)
LockType 同時アクセス時の処理の種類を指定 (省略可)
Options Source 引数が Command オブジェクト以外のソースを表す場合にプロバイダが Source 引数を評価する方法を指定 (省略可)

CursorType (値は CursorTypeEnum値)
定数 説明
adOpenDynamic
動的カーソル
2 ほかのユーザーによる追加、変更、および削除を確認できます。プロバイダがブックマークをサポートしていない場合を除き、Recordset 内でのすべての動作を許可します。
adOpenForwardOnly
前方専用カーソル
(既定値)
0 レコードのスクロール方向が前方向に限定されていることを除き、静的カーソルと同じ働きをします。Recordset のスクロールが 1 回だけで十分な場合は、これによってパフォーマンスを向上できます。
adOpenKeyset
キーセット カーソル
1 キーセット カーソルを使います。ほかのユーザーが追加したレコードは表示できない点を除き、動的カーソルと同じく、自分の Recordset からほかのユーザーが削除したレコードはアクセスできません。ほかのユーザーが変更したデータは表示できます。
adOpenStatic
静的カーソル
3 キーセット カーソルを開きます。データの検索またはレポートの作成に使用するための、レコードの静的コピーです。ほかのユーザーによる追加、変更、または削除は表示されません。
adOpenUnspecified -1 カーソルの種類を指定しません。

LockType (値は LockTypeEnum値)
定数 説明
adLockBatchOptimistic
オプティミスティック
バッチ更新
4 共有的バッチ更新を示します。バッチ更新モードの場合にのみ指定できます。
adLockOptimistic
オプティミスティック
ロッキング
3 レコード単位の共有的ロックを示します。Update メソッドを呼び出した場合にのみ、プロバイダは共有的ロックを使ってレコードをロックします。
adLockPessimistic
ペジミスティック
ロッキング
2 レコード単位の排他的ロックを示します。プロバイダは、レコードを確実に編集するための措置を行います。通常は、編集直後のデータ ソースでレコードをロックします。
adLockReadOnly
読み取り専用
1 読み取り専用のレコードを示します。データの変更はできません。
adLockUnspecified -1 ロックの種類を指定しません。クローンの場合、複製元と同じロックの種類が適用されます。

Options (値は CommandTypeEnum値)
定数 説明
adCmdUnspecified -1 コマンド タイプ引数を指定しません。
adCmdText 1 CommandText をコマンド、またはストアドプロシージャ呼び出しの、文字列による定義として評価します。
adCmdTable 2 CommandText を、列が内部で生成された SQL クエリによってすべて返されるテーブル名として評価します。
adCmdStoredProc 4 CommandText をストアド プロシージャ名として評価します。
adCmdUnknown 8 既定値です。CommandText プロパティのコマンド タイプが不明であることを表します。
adCmdFile 256 永続的に保存された Recordset のファイル名として CommandText を評価します。Recordset.Open または Requery でのみ使用されます。
adCmdTableDirect 512 列がすべて返されるテーブル名として CommandText を評価します。Recordset.Open または Requery でのみ使用されます。Seek メソッドを使用するには、Recordset を adCmdTableDirect で開く必要があります。


Open メソッドの引数を指定して実行する

Sub レコード取得1()
'Open メソッドの引数を指定して実行する
Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset, FileName As String

FileName = ThisWorkbook.Path & "\mdb\2-sampleDB.mdb"
myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName

'「社員」テーブルの内容を変更できる状態で開く
myRS.Open "社員", myCon, adOpenDynamic, adLockPessimistic

Range("A1").CopyFromRecordset myRS

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

End Sub


対応するプロパティに値を設定して開く

Sub レコード取得2()
'対応するプロパティに値を設定して開く
Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset, FileName As String

FileName = ThisWorkbook.Path & "\mdb\2-sampleDB.mdb"
myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName

With myRS
.Source = "社員"
.ActiveConnection = myCon
.CursorType = adOpenDynamic
.LockType = adLockPessimistic '「社員」テーブルの内容を変更できる状態で開く
.Open
End With

Range("A1").CopyFromRecordset myRS

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

End Sub


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 メソッドをサポートします。

前へ 次へ
Topへもどる タイトル一覧へもどる