実際にExcelからSQLを使用するコードに沿って、コードの内容を紹介していきます。
ベースとなるコードは下記のとおりです。
今回は「SQL文の指示を実行」欄です。
データベースのデータの取得・更新等を行うためのオブジェクト。
Microsoft ActiveX Data Objects X.X Libraryへの参照設定(事前バインディング)を行った上で、下記コードでオブジェクトを作成する。
Dim myRS As ADODB.Recordset Set myRS = New ADODB.Recordset
実行時バインディングを使用する場合はCreateObject関数を使用する。
実行時バインディングの時はMicrosoft ActiveX Data Objects X.X Libraryへの参照設定は不要です。
CreateObject("ADODB.Recordset")
メソッド・プロパティ
Openメソッド
Connectionオブジェクトで接続したデータベースのテーブルへ接続する。
引数 | 内容 |
---|---|
Source | テーブル名、SQLなどRecordsetオブジェクトの参照対象を指定(省略可) |
ActiveConnection | Connection オブジェクトを指定(省略可) |
CursorType | レコードのカーソル(操作手段)を指定(省略可) |
LockType | 同時アクセス時の処理を指定(省略可) |
Options | 引数Sourceの種類を明示的に指定(省略可) |
Source
Recordsetオブジェクトに参照させたいテーブル、クエリ、SQL文などを文字列の形で指定。
ActiveConnection
ADO.Connection オブジェクトを指定する
CursorType
定数 | 値 | 内容 |
---|---|---|
adOpenForwardOnly | 0 | 既定値。前方専用カーソル。処理は最も高速。MovePrevious使用不可 |
adOpenDynamic | 2 | 動的カーソル。Recordset内で全ての動作を許可。 |
adOpenStatic | 3 | 静的カーソル。データの検索、レポートの作成に使用する。他のユーザーによる追加、変更、削除は表示されない |
adOpenkeyset | 1 | 他のユーザーが追加したレコードは反映されず、削除したデータへのアクセス不可以外は、動的カーソルと同じ |
adOpenUnspecified | -1 | カーソルタイプを指定しない |
SQLで抽出・集計をするだけならadOpenForwardOnlyで問題ないと思う。
Recordsetオブジェクト.RecordCountを使用する場合はRecordsetオープン時にadOpenStatic、adOpenKeysetが必要。
LockType
同データベースの同じテーブルに同時接続した場合の処理方法を指定。
定数 | 値 | 内容 |
---|---|---|
adLockReadOnly | 1 | 既定値。データの変更はできない |
adLockPessimistic | 2 | レコード単位の排他的ロック |
adLockOptimistic | 3 | レコード単位の共有的ロック。Updateメソッドを呼び出した場合にだけレコードをロックする |
adLockBatchOptimistic | 4 | 共有的バッチ更新。バッチ更新モードの場合にのみ指定可 |
adLockUnspecified | -1 | ロックタイプを指定しない |
レコードの更新を許可したい場合はadLockReadOnly以外の値を指定する。
ベースとなるコードにも記載していないようにあまり意識をしたことはない。
基本的には既定値であるadLockReadOnlyで問題ないと思う。
Options
定数 | 値 | 内容 |
---|---|---|
adCmdText | 1 | ソースを一般的なSQLとして評価 |
adCmdTable | 2 | ソースをテーブル名として評価 |
adCmdStoredProc | 4 | ソースをストアドプロシージャ名として評価 |
adCmdUnknown | 8 | 既定値。ソースのタイプが不明であることを示す。 |
adCmdFile | 256 | ソースを保存されたRecordsetのファイル名として評価 |
adCmdTableDirect | 512 | ソースを列が全て返されるテーブル名として評価 |
adCmdUnspecified | -1 | 引数を指定しない |
こちらもベースとなるコードに記載していないように意識したことはない。
既定値もしくは本記事の主旨からいえばadCmdTextで問題ないと思う。
Closeメソッド
テーブルへの接続を切断する。
Closeを行わないと、テーブルへ接続されたままになる。
Close後はRecordsetオブジェクトを開放する必要がある。
開放を行わないと不要なオブジェクトがメモリを圧迫する。
Recordset オブジェクトにNothingを代入することで開放される。
myRS.Close set myRS = nothing
次回は「データの貼り付け作業」欄を紹介していきます。