たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_ADOの利用_データベースに接続する【Connection】

ADOに関する説明とデータベースに接続する記述

ADOとは、その利用場面

どんなライブラリ

データベースを操作するためのオブジェクトをもつライブラリ
※正式名称:Active Data Object

利用場面

レコード単位で条件分岐して更新を行うなどの細かな操作を行うことができる
Access以外のデータベースを操作できる

ADOのオブジェクト

主なオブジェクトの種類

Connection_DBへの接続を保持
Command_DBに対するコマンドを保持
Recordset_何かしらの処理によって設定したレコードの集まりを保持
Field_設定したフィールドを保持
Property_プロパティを保持
Error_エラーを保持

【Connection】データベースへの接続

Connectionオブジェクトを使用してデータベースに接続する

プロパティ

ConnectionString_接続情報を返す
State_接続状態を返す
 →接続中:adStateOpen / 接続なし:adStateClosed

メソッド

Open_接続を開く
Execute_コマンドを実行
BeginTrans_トランザクション(ある処理単位の処理)を開始
CommitTrans_変更を保存したうえでトランザクションを終了
RollbackTrans_変更は保存せずにトランザクションを終了
Close_接続を閉じる


【実践】現在データベースに接続中かどうかを確認する

ADODB_ADOが提供するコンポーネントの名前

カレントプロジェクトのデータベースに接続する場合の記述

書式:
Dim オブジェクト変数 As ADODB.Connection 'Connectionオブジェクトのオブジェクト変数を宣言
Set オブジェクト変数 = CurrentProject.Connection 'インスタンスを生成

▼記述例▼

Sub test_Current()
Dim CNT As ADODB.connection
Set CNT = CurrentProject.connection
Select Case CNT.State '接続状態を返すプロパティ
Case adStateOpen
    MsgBox "接続中"
Case adStateClosed
    MsgBox "接続なし"
End Select

Set CNT = Nothing '参照を解除、メモリ開放

End Sub


カレントプロジェクト以外のデータベースに接続する場合の記述

ConnectionStringプロパティにて以下の2点を設定
 1_Provider_データベースの種類
 2_Data Source_接続先のデータベースのパス

書式1:
Dim オブジェクト変数 As ADODB.Connection
Set オブジェクト変数 = New ADODB.Connection
オブジェクト変数.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=DBのフルパス"
オブジェクト変数.Open

書式2:オブジェクト変数の宣言と同時にインスタンスを生成
Dim オブジェクト変数 As New ADODB.Connection
オブジェクト変数.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=DBのフルパス"
オブジェクト変数.Open

書式3:Openメソッドの第1引数に直接接続文字列を指定
Dim オブジェクト変数 As New ADODB.Connection
オブジェクト変数.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=DBのフルパス"

▼記述例▼

Sub test_NotCurrent()

Dim CNT As ADODB.connection
Set CNT = New ADODB.connection
CNT.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & "C:\Users\user\tama-shi\tamashi.accdb"
CNT.Open

Select Case CNT.State 'stateは接続状態を返すプロパティ
    Case adStateOpen
    MsgBox "接続中"
    Case adStateClosed
    MsgBox "接続なし"
    
    CNT.Close 'openした場合にはcloseする
    Set CNT = Nothing '参照を解除、メモリ開放
End Select

End Sub