• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:NEWキーワードとCreateObjectは同じ?)

NEWキーワードとCreateObjectは同じ?

このQ&Aのポイント
  • NEWキーワードとCreateObjectは同じことをするのでしょうか?
  • Sub ADO_Sample1() Dim cn As New ADODB.Connection Set cn = CreateObject("ADODB.Connection") cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=" & _ "D:\Mail.mdb;Jet OLEDB:Database;" Debug.Print "ファイルに接続できました。" cn.Close: Set cn = Nothing End Sub このようなコードの時、 Set cn = CreateObject("ADODB.Connection") は、あってもなくても問題ないようです。
  • NEWとCreateObjectがある場合は、2度データベースに接続してしまうのでしょうか? NEWとCreateObjectがあってもエラーにならない理由を教えてください。

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

  • ベストアンサー
  • yamav102
  • ベストアンサー率100% (3/3)
回答No.3

>Dim cn As New ADODB.Connection >じゃダメなのでしょうか? >変数の宣言とインスタンスの生成(?)を同時に行わな方がいいですか? 言語によって、インスタンス生成のタイミングが違う事を、 判って使う分には「ダメ」な事は無いと思います。 「ダメ」ならそんな書き方出来ないように設計するだろう、 と思うからです。 因みに、VB VBA では宣言と New を一行で書いてしまっても 「変数の宣言とインスタンスの生成」が同時にされる事はありません。 最初にインスタンスのメソッドなりプロパティなりを使用する タイミングでインスタンスが生成され、インスタンス生成時の 最初に実行されるメソッドである Initialize が実行されます。 この最初に実行されるメソッドの事を「コンストラクタ」と、 オブジェクト指向では呼びます。 対して、VB.NET では、Dim cn As New ADODB.Connection が書かれている位置で、インスタンスが生成され 、 コンストラクタが実行されます。 コンストラクタで何か処理をさせている場合、実行されるタイミングの 違いを見誤ると、意図通りの動作にならないかも知れません。また、 使いもしない段階でインスタンスを生成するのは、メモリの無駄使いでも あります。

EGLEDZPDEHYP
質問者

お礼

Dim cn As New ADODB.Connection が間違いなのであれば、 使えないように設計されているはずですね。 Dim cn As New ADODB.Connection をしてるからって、 「変数の宣言とインスタンスの生成」が同時にしてるわけではないようですね。 「コンストラクタ」と言う用語は初めて聞きました。 そのような言葉があるのですね。有難うございます。

その他の回答 (2)

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.2

> Set cn = CreateObject("ADODB.Connection") > は、あってもなくても問題ないようです。 本来は、 Dim cn As ADODB.Connection Set cn = New ADODB.Connection こうすべきなので。 > 2度データベースに接続してしまうのでしょうか? VBAが裏で前回の参照を解放してからまた、新たにセットし直してるのでそれはないです。

EGLEDZPDEHYP
質問者

お礼

本来ならば Set cn = CreateObject("ADODB.Connection") ではなく、 Dim cn As ADODB.Connection Set cn = New ADODB.Connection するべきなのですね。 ちなみに Dim cn As New ADODB.Connection じゃダメなのでしょうか? 変数の宣言とインスタンスの生成(?)を同時に行わな方がいいですか?

回答No.1

> NEWとCreateObjectがある場合は、 > 2度データベースに接続してしまうのでしょうか? 質問内容に記載されているコードならば cn.Open は一回しか実行しないので、接続も一回のみです > NEWとCreateObjectがあってもエラーにならない理由を教えてください。 同じ変数に入れているため、上書きされているだけ Set cn = CreateObject("ADODB.Connection") こちらが有効になる(結果的に同じことをしているだけなので動作は変わらない) なぜ New と CreateObject の2つがあるのかは VBSとVBAの違いですね。 VBSだと参照設定が使えないため CreateObjectを使います。 VBA(たとえばExcel)だと、DLLの参照設定が出来るため Newキーワードでオブジェクトが作成できます。

EGLEDZPDEHYP
質問者

お礼

>同じ変数に入れているため、上書きされているだけ とてもわかりやすい例えです。イメージしやすいです。 CreateObject関数でもできる理由は、VBSの為なのですね。 たしかにVBSでは参照設定の仕方がわかりませんでした。 ありがとうございました。大変参考になりました。

関連するQ&A