VB6のXPです。
ADODBのConnectionオブジェクトを利用する際、
Set objConnection = CreateObject("ADODB.Connection")
とする場合と
Dim objConnnection As New ADODB.Connection
とする2つの場合がありますが、この違いは何なのでしょうか?
ネットを検索しても、参照設定はするべきだという意見がほとんどなのですが、私としては参照設定しないほうがやりやすいです。
例:http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200203/02030007.txt
CreateObject」関数は、「実行時(遅延)バインディング」と呼ばれ、
呼び出しのオーバーヘッドが大きくなる。
http://msdn2.microsoft.com/ja-jp/library/0tcf61s1(VS.80).aspx
NewキーワードとCreateObject関数でのオブジェクト作成の違い
http://chaichan.web.infoseek.co.jp/vbtips/VBMemo2006120905.htm
実行時バインディングは、VB6の場合は主に型の指定で出るところです。
"As Object"とするか、"As ADODB.Connection"とするか、で出る差異の
方ですよね。
ちなみに、Newで得たオブジェクトを実行時バインディングで使うことも
できますし、CreateObjectで得たオブジェクトを事前バインディングで
使うこともできます。
Dim oConnection As Object
Dim oADOConnection As ADODB.Connection
Set oConnection = New ADODB.Connection
Set oADOConnection = CreateObject("ADODB.Connection")
CreateObjectとNewでは、そのクラス名をどう得るのかが異なります。
Newでは、最初からクラスIDが指定され、CoCreateInstanceが呼ばれます。
CreateObjectでは、
1,ProgIDからクラスIDを、CLSIDFromProgIDで取得し、
2,そのクラスIDを用いてCoCreateInstanceが呼び出される。
という手順になります。
クラスIDが固定であることが確実ならばNewを用いる方が簡単でしょうし、
実行時にクラスIDを解決したいのならばCreateObjectを使うことになるでしょう。
文字列型で指定できる点でも融通が利きますし。
なるへそ、勉強になります。認識が甘いですね私(^^;
編集 削除CreateObjectの際、作成するコントロールによっては「ActiveX コンポーネントを作成できません。」というエラーが発生するようです。例えばインターネットトランスファコントロール。
VBをインストールしているマシンでは当然動作しますが、別なマシンではNGになってしまうので、今回は参照設定を行いたいと思います。