こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ADO 「NEW」の意味、必要性

ADOを使ってACCESSやSQLサーバーへ接続する時に

Option Explicit
Sub ADO()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

cn.Open "Provider=SQLOLEDB;Data Source=○○○\SQLEXPRESS;Initial Catalog=test;Integrated Security=SSPI"
rs.Open "table1", cn, adOpenStatic, adLockOptimistic

というようなコードを書きますが、
変数の宣言の「 New 」はどういう意味なのでしょうか?
何のためにつけるのでしょうか?

あえて「 New 」を取ると、
「オブジェクト変数または With ブロック変数が設定されていません。」
というエラーになります。

普通の変数(Dim table名 As String)に
「 New 」を付けるとコンパイルエラーになります。

違いがわかりません。
よろしくお願いします。

投稿日時 - 2009-07-15 22:27:34

QNo.5128678

暇なときに回答ください

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

こんにちは。

>変数の宣言の「 New 」はどういう意味なのでしょうか?
>何のためにつけるのでしょうか?

Excel VBAなどでは、ADO は、常時用意されていないオブジェクトですから、事前バインディングでは(参照設定した後)、New キーワードをつけてインタンスとして実体化し、オブジェクトを生成します。それをつけないと、オブジェクトにならないのです。既存に存在するものには、変数にNew キーワードは不要です。

ただ、Excelのような限定されたメモリ空間ですと、頻繁に使うような場合は、[Dim cn As New ADODB.Connection]では、オブジェクトの開放の場を失ってしまうように思います。簡単に使う程度では、Excel自体を終了してしまいますが、常時多用するような場合は、こうした部分も管理しなければならない時があります。

投稿日時 - 2009-07-16 09:40:22

お礼

オブジェクトにするためにNewを付けるのですね!ありがとうございます。

投稿日時 - 2009-07-18 13:00:06

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

ヘルプの「Dim ステートメント」のページに説明が書いてありますよ。
私は、Dim に New キーワードを使うことを推奨しません。

Dim cn As ADODB.Connection
Set cn = New ADODB.Connection

とすべきです。

投稿日時 - 2009-07-16 06:37:14

お礼

ありがとうございます。読んでみます。

投稿日時 - 2009-07-18 12:59:21

あなたにオススメの質問