• ベストアンサー

ADO 「Set」は使ったほうがいいのでしょうか?

Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordse End Sub Sub test2() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset End Sub この二つは同じ意味ですか? 「Set」は使ったほうがいいのでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

Setは特定してオブジェクトに名前をつけるもの、そのものをさすように。 LET と SET http://d.hatena.ne.jp/annin102/20080801/1217609903 たまたまNewが同時に使えるように認められているからそう言う書き方が出来る。 対しDimは変数名を定義するもの。 VB6系での話で済みませんが、下記でSetの部分をコメントアウトするとエラーになります。DimのところにNewを入れましたが。 ’をはずすと動きます。 オブジェクトの参照が必要だからだと思います。 Sub ADORecordset修正() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset 'Set cn = CurrentProject.Connection 'Set rs = New ADODB.Recordset rs.Open "生徒", cn, adOpenForwardOnly, adLockReadOnly Do Until rs.EOF MsgBox rs!氏名 & " " & rs!生年月日 & " " & rs!性別 rs.MoveNext Loop rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub .NETの世界でどうか自信が無いが参考に。

noname#150256
質問者

お礼

大変参考になりました。ご回答ありがとうございます。

その他の回答 (2)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

井川はるき氏の著書より Newキーワードを使って宣言した変数は、その変数を参照する際に、「Nothing」であれば、新規にインスタンスが自動的に生成されてから、そのインスタンスへの参照が代入される。 従って、一旦Nothingにしても、間違えて?参照すると、インスタンスが生成されてしまいます。 「Nothing」かどうかの判断を参照都度行うので、速度的には不利と言っているサイトもありました。 自分自身はその速度が問題になるほどのコードは書いておりませんが...

noname#150256
質問者

お礼

ありがとうございます。

  • Itarufox
  • ベストアンサー率31% (10/32)
回答No.1

実質殆ど同じ意味だとは思います。 でも、古いプログラマーから言わせていただくと、 Dim cn As ADODB.Connection   定義は定義   : Set cn = New ADODB.Connection  オブジェクトを生成 のように分けて考えたいと思います。 Dim cn As New ADODB.Connection  定義とオブジェクト生成を同時に行う。若干、コードが短くなりますが、コードを修正する場合には、 最初の書き方がいいと思います。

noname#150256
質問者

お礼

なるほど。 ありがとうございます。大変参考になりました。

関連するQ&A