- ベストアンサー
ADO1とADO2の違いは?
- ADO1とADO2は、同じ意味を持っていますか?
- ADO1とADO2の違いについて簡単に解説します。
- ADO1とADO2は、VBAでデータベースに接続するためのコードですが、細かな違いがあります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。#1の回答者です。 >各「cn」をウォッチウインドウ[→ローカルウィンドウ]に登録して動きを見てみましたが、 >Set cn = Nothing >の部分の違いは、どうやって確認すればいいのでしょうか? すみません、中途半端な説明でした。 こういう風に考えてみたらどうでしょうか。 Private Sub ADO1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close Set cn = Nothing '←ここが生きていません。 cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName '● cn.Close End Sub ●の部分で、オブジェクトを生成していないのに、再び、オブジェクトが生成されます。当たり前のような気がしますが、これでは、ユーザーの手でコントロールとしているとは言えませんね。 >VBAの問題集があれば解いて勉強してみたいです。 この種の問題は、VBA上級問題ですが、プロ級の内容です。この問題は、すでに、あるプロの方が触れているものなのですが、一応、これを書くにあたって、事前に確認しました。
その他の回答 (1)
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 VBAの問題集があれば、出てきそうな典型的な質問です。 >Dim cn As ADODB.Connection >Set cn = New ADODB.Connection >を簡素化したものが >Dim cn As New ADODB.Connection >になるのでしょうか? いいえ、そうではありません。同じことをしているわけではありません。 >Dim cn As New ADODB.Connection これは、直接、インスタンスを作っていることで、Applicationに直に結びついています。言い換えれば、ユーザーが自由にできるオブジェクトが存在しません。 Private Sub ADO1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close Set cn = Nothing '←ここが生きていません。 End Sub こちらは、一旦、インスタンスを生成し、次に、オブジェクトを作っていますから、 >Dim cn As ADODB.Connection >Set cn = New ADODB.Connection では、ユーザーが自由になるオブジェクトが存在します。 Private Sub ADO2() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close Set cn = Nothing '←メモリからオブジェクトは消えています。 End Sub したがって、オブジェクト変数を Dim 宣言した後に SET ステートメントを使ってインスタンスを生成するほうが、変数を作成や消去のタイミングをより細かく制御できます。
お礼
VBAの問題集があれば解いて勉強してみたいです。 「ADO1はユーザーが自由にできるオブジェクトが存在しません。 ADO2は一旦インスタンスを生成し次にオブジェクトを作っているから ユーザーが自由になるオブジェクトが存在します。」 ということですか。 ADO2のほうがよさそうですね。 各「cn」をウォッチウインドウに登録して動きを見てみましたが、 メモリがオブジェクトから消えるなどの動きがよくわかりませんでした。 Set cn = Nothing の部分の違いは、どうやって確認すればいいのでしょうか? 再度ご回答頂ければ幸いです。
お礼
ありがとうございました。