• ベストアンサー

Accessで、メモリを開放するタイミング

すみませんが、教えてください。 次のコードように、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

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

  • ベストアンサー
  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.1

コネクションを張るのと解放するのにそれなりに時間がかかります ので、これで問題ないものと思いますが・・・。 Set RSで確保するレコードセットは、仮確保した後に元の場所に上書き される・・・という動きをしますので、メモリ確保の点からすると 確かに「RS」は解放~確保の方が有利かもしれません。 しかし、初期に「RS」に確保するメモリ量はあくまで「仮確保」で、 処理全体のメモリ量を確保する訳ではありません。余計に消費という ほどの問題じゃないですし、解放~確保の処理の時間のほうが問題に なるんじゃないかと思います。 ・・・あまり自信はありませんけど。

xyz_1990
質問者

お礼

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

その他の回答 (1)

noname#140971
noname#140971
回答No.2

<生徒名簿> 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 私ならば、同じコードを繰り返さないで読みやすさを優先します。

xyz_1990
質問者

お礼

ご回答ありがとうございます。 >私ならば、同じコードを繰り返さないで読みやすさを優先します。 私も、きれいなコードを書きたいのですが、なかなかできません。 是非、参考にさせていただきます。

関連するQ&A