|
目的に応じた接続形態を取る
■構文 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 メソッドをサポートします。 |
|
|