プロが教える店舗&オフィスのセキュリティ対策術

すみませんが、教えてください。

次のコードように、SQL命令を2回以上行う場合、メモリの開放は、最後だけでよいのでしょうか?
これでも、一応動くのですが、メモリを余計に消費していないのかどうか、よく分かりません。

SUB SAMPLE()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim SQL As String
'接続
Set CN = CurrentProject.Connection
'レコードセットを取得(1)
Set RS = New ADODB.Recordset
SQL = "SELECT COUNT(*) AS CNT FROM 生徒名簿 WHERE クラス = 'TS'"
RS.Open SQL, CN, adOpenKeyset, adLockOptimistic
Msgbox(CNT)
'レコードセットを取得(2)
Set RS = New ADODB.Recordset
SQL = "SELECT COUNT(*) AS CNT FROM 生徒名簿 WHERE クラス = 'WS'"
RS.Open SQL, CN, adOpenKeyset, adLockOptimistic
Msgbox(CNT)
'終了
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

A 回答 (2件)

コネクションを張るのと解放するのにそれなりに時間がかかります


ので、これで問題ないものと思いますが・・・。

Set RSで確保するレコードセットは、仮確保した後に元の場所に上書き
される・・・という動きをしますので、メモリ確保の点からすると
確かに「RS」は解放~確保の方が有利かもしれません。

しかし、初期に「RS」に確保するメモリ量はあくまで「仮確保」で、
処理全体のメモリ量を確保する訳ではありません。余計に消費という
ほどの問題じゃないですし、解放~確保の処理の時間のほうが問題に
なるんじゃないかと思います。

・・・あまり自信はありませんけど。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>Set RSで確保するレコードセットは、仮確保した後に元の場所に上書きされる
上書きされるなら、いちいち開放する必要はないですね。

お礼日時:2007/05/02 13:27

<生徒名簿>


ID___クラス
1____TS
2____WS
3____TS
4____TS

[イミディエイト]
TS=3
WS=1

次は、Open と Close を繰り返しています。

Private Sub コマンド0_Click()
  Dim I       As Integer
  Dim N(1)      As Integer
  Dim strQuerySQL(1) As String
  Dim rst      As ADODB.Recordset

  strQuerySQL(0) = "SELECT COUNT(*) AS CNT FROM 生徒名簿 WHERE クラス = 'TS'"
  strQuerySQL(1) = "SELECT COUNT(*) AS CNT FROM 生徒名簿 WHERE クラス = 'WS'"
  Set rst = New ADODB.Recordset
  With rst
    For I = 0 To 1
      .Open strQuerySQL(I), _
         CurrentProject.Connection, _
         adOpenStatic, _
         adLockReadOnly
      If Not .BOF Then
        .MoveFirst
        N(I) = Nz(.Fields(0), 0)
      End If
      .Close
    Next I
  End With
  Set rst = Nothing
  Debug.Print "TS=" & N(0)
  Debug.Print "WS=" & N(1)
End Sub

私ならば、同じコードを繰り返さないで読みやすさを優先します。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>私ならば、同じコードを繰り返さないで読みやすさを優先します。

私も、きれいなコードを書きたいのですが、なかなかできません。
是非、参考にさせていただきます。

お礼日時:2007/05/03 09:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す