• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ADO1とADO2は意味は同じですか?)

ADO1とADO2の違いは?

このQ&Aのポイント
  • ADO1とADO2は、同じ意味を持っていますか?
  • ADO1とADO2の違いについて簡単に解説します。
  • ADO1とADO2は、VBAでデータベースに接続するためのコードですが、細かな違いがあります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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上級問題ですが、プロ級の内容です。この問題は、すでに、あるプロの方が触れているものなのですが、一応、これを書くにあたって、事前に確認しました。

raqcatacs
質問者

お礼

ありがとうございました。

その他の回答 (1)

回答No.1

こんにちは。 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 ステートメントを使ってインスタンスを生成するほうが、変数を作成や消去のタイミングをより細かく制御できます。

raqcatacs
質問者

お礼

VBAの問題集があれば解いて勉強してみたいです。 「ADO1はユーザーが自由にできるオブジェクトが存在しません。 ADO2は一旦インスタンスを生成し次にオブジェクトを作っているから ユーザーが自由になるオブジェクトが存在します。」 ということですか。 ADO2のほうがよさそうですね。 各「cn」をウォッチウインドウに登録して動きを見てみましたが、 メモリがオブジェクトから消えるなどの動きがよくわかりませんでした。 Set cn = Nothing  の部分の違いは、どうやって確認すればいいのでしょうか? 再度ご回答頂ければ幸いです。

関連するQ&A