MW211 EXIT

devlog
ExcelVBA/ストアドプロシージャReadもクローズが必要
2015年03月02日
ExceVBAでADODBを使ってアクセスする場合、オープン処理というのを行う。
なので、クローズ処理というのが対応して必要になる。
(プロセスを終了してしまえばクローズ処理は端折れるのだがなんか気持ち悪い)

で、ストアドプロシージャについては、「adCmdStoredProc」を指定することにより
専用処理を使用することができる。
これも「.Execute」をテーブルオブジェクトに代入すれば
Openした場合と同じように操作できる。

で、疑問なのだが、後者の場合、Close処理は必要なのだろうか?

これを解決するために、オープン状態を確認するデバッグ文を仕込んでみた。

その結果、後者の場合もオープン状態はオープン中だということがわかる。
ということで、後者も前者と同じ様にクローズ処理を実装した方がよさそうだ。

ちなみに、実験したのは、以下のような感じの処理
(グローバル変数(メンバ変数)の設定処理は省略して記載)
┌──────────────────────────────────────┐
│Private mデータベース As New ADODB.Connection                               │
│Private mSQL文 As String                                                    │
├──────────────────────────────────────┤
│Dim テーブル As New ADODB.Recordset                                         │
│Dim SQLコマンド As New ADODB.Command                                        │
│'-(オープン) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -│
│With SQLコマンド                                                            │
│    .ActiveConnection = mデータベース                                       │
│    .CommandText = mSQL文                                                   │
│End With                                                                    │
│テーブル.Open SQLコマンド                                                   │
│If mテーブル.State = adStateClosed Then                                     │
│    MsgBox "エラー", vbCritical                                             │
│    ' エラー処理                                                            │
│    Exit Sub                                                                │
│End If                                                                      │
│MsgBox テーブル.State   ' オープン状態のの確認 → 1(adStateOpen)=オープン中│
│'-(参照処理) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -│
│' テーブル.Fields(列名).Value などを参照                                    │
│'-(クローズ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -│
│If テーブル.State <> adStateClosed Then                                     │
│    テーブル.Close                                                          │
│End If                                                                      │
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│Private mデータベース As New ADODB.Connection                               │
├──────────────────────────────────────┤
│Dim テーブル As New ADODB.Recordset                                         │
│Dim SQLコマンド As New ADODB.Command                                        │
│'-(オープン) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -│
│With SQLコマンド                                                            │
│    .ActiveConnection = mデータベース                                       │
│    .CommandType = adCmdStoredProc                                          │
│    .CommandText = "ストアドプロシージャ"                                   │
│    Set テーブル = .Execute                                                 │
│End With                                                                    │
│MsgBox テーブル.State   ' オープン状態のの確認 → 1(adStateOpen)=オープン中│
│'-(参照処理) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -│
│' テーブル.Fields(列名).Value などを参照                                    │
│'-(クローズ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -│
│If テーブル.State <> adStateClosed Then                                     │
│    テーブル.Close                                                          │
│End If                                                                      │
└──────────────────────────────────────┘
分類:ExcelVBA