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があってもエラーにならない理由を教えてください。
No.3ベストアンサー
- 回答日時:
>Dim cn As New ADODB.Connection
>じゃダメなのでしょうか?
>変数の宣言とインスタンスの生成(?)を同時に行わな方がいいですか?
言語によって、インスタンス生成のタイミングが違う事を、
判って使う分には「ダメ」な事は無いと思います。
「ダメ」ならそんな書き方出来ないように設計するだろう、
と思うからです。
因みに、VB VBA では宣言と New を一行で書いてしまっても
「変数の宣言とインスタンスの生成」が同時にされる事はありません。
最初にインスタンスのメソッドなりプロパティなりを使用する
タイミングでインスタンスが生成され、インスタンス生成時の
最初に実行されるメソッドである Initialize が実行されます。
この最初に実行されるメソッドの事を「コンストラクタ」と、
オブジェクト指向では呼びます。
対して、VB.NET では、Dim cn As New ADODB.Connection
が書かれている位置で、インスタンスが生成され 、
コンストラクタが実行されます。
コンストラクタで何か処理をさせている場合、実行されるタイミングの
違いを見誤ると、意図通りの動作にならないかも知れません。また、
使いもしない段階でインスタンスを生成するのは、メモリの無駄使いでも
あります。
Dim cn As New ADODB.Connection
が間違いなのであれば、
使えないように設計されているはずですね。
Dim cn As New ADODB.Connection
をしてるからって、
「変数の宣言とインスタンスの生成」が同時にしてるわけではないようですね。
「コンストラクタ」と言う用語は初めて聞きました。
そのような言葉があるのですね。有難うございます。
No.2
- 回答日時:
> Set cn = CreateObject("ADODB.Connection")
> は、あってもなくても問題ないようです。
本来は、
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
こうすべきなので。
> 2度データベースに接続してしまうのでしょうか?
VBAが裏で前回の参照を解放してからまた、新たにセットし直してるのでそれはないです。
本来ならば
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キーワードでオブジェクトが作成できます。
>同じ変数に入れているため、上書きされているだけ
とてもわかりやすい例えです。イメージしやすいです。
CreateObject関数でもできる理由は、VBSの為なのですね。
たしかにVBSでは参照設定の仕方がわかりませんでした。
ありがとうございました。大変参考になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) バックグラウンドのプロセスのエクセルを閉じる方法 4 2022/05/12 15:39
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- その他(Microsoft Office) VBA メール送信済で実行されるはずが、実行されない時があります。 2 2023/02/02 14:05
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
ADOのCursorLocationプロパティ
Visual Basic(VBA)
-
-
4
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
5
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
6
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「web上」と「インターネット上...
-
インターネットが無い生活あな...
-
LANとイントラネットの違い
-
「インターネット」「イントラ...
-
イントラネットとインターネッ...
-
NEWキーワードとCreateObjectは...
-
無線LANについて
-
VPN??閉域網??どうか教えて...
-
インターネットの使い方とブロック
-
毎日同じ時間にインターネット...
-
DISMやSFCはインターネットに繋...
-
設定では信頼しているのにこの...
-
在宅勤務希望です。募集要項に...
-
スマホ初期設定
-
社内LANにつながるけど、インタ...
-
エクセル共有設定時に画像を挿...
-
【Excel VBA】ネットワーク上の...
-
共有するを押してしまったので...
-
OneDrive で共有したフォルダの...
-
パソコン上で付箋の共有が「ぺた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「web上」と「インターネット上...
-
インターネットの使い方とブロック
-
留学生に説明するとき、どっち...
-
DISMやSFCはインターネットに繋...
-
LANとイントラネットの違い
-
「インターネット」「イントラ...
-
ゲーミングPCのインターネット...
-
VPN??閉域網??どうか教えて...
-
インタネット接続無しでのリモ...
-
realtek usb wireless lan util...
-
iPhoneのWi-Fiのところにipアド...
-
設定では信頼しているのにこの...
-
毎日同じ時間にインターネット...
-
NEWキーワードとCreateObjectは...
-
海底ケーブルについて 海底ケー...
-
LANカードを 2枚挿して ...
-
PCの作動が遅くなりました。対...
-
プロバイダーを経由しないでイ...
-
完全に匿名でインターネットは...
-
イントラネットとインターネッ...
おすすめ情報