- ベストアンサー
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」は使ったほうがいいのでしょうか? よろしくお願いします。
- みんなの回答 (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の世界でどうか自信が無いが参考に。
その他の回答 (2)
- mitarashi
- ベストアンサー率59% (574/965)
井川はるき氏の著書より Newキーワードを使って宣言した変数は、その変数を参照する際に、「Nothing」であれば、新規にインスタンスが自動的に生成されてから、そのインスタンスへの参照が代入される。 従って、一旦Nothingにしても、間違えて?参照すると、インスタンスが生成されてしまいます。 「Nothing」かどうかの判断を参照都度行うので、速度的には不利と言っているサイトもありました。 自分自身はその速度が問題になるほどのコードは書いておりませんが...
お礼
ありがとうございます。
- Itarufox
- ベストアンサー率31% (10/32)
実質殆ど同じ意味だとは思います。 でも、古いプログラマーから言わせていただくと、 Dim cn As ADODB.Connection 定義は定義 : Set cn = New ADODB.Connection オブジェクトを生成 のように分けて考えたいと思います。 Dim cn As New ADODB.Connection 定義とオブジェクト生成を同時に行う。若干、コードが短くなりますが、コードを修正する場合には、 最初の書き方がいいと思います。
お礼
なるほど。 ありがとうございます。大変参考になりました。
お礼
大変参考になりました。ご回答ありがとうございます。