プロが教えるわが家の防犯対策術!

MS-ACCESS2003のVBAを用いて以下のようなコードを記述しています。
=============================================
function funcB()
Dim objB As Object
Dim objC As Object

Set objB = R3.Add("RFC_READ_TABLE")
set objC = objB.Tables("DATA")

objCに他システムからselectしたデータを格納
set objB = nothing
end function
=============================================
function funcA()
for i = 0 to n
call funcB
next
end function
=============================================

上のようにfuncAから複数回呼ばれるfuncBにおいて、objCにnothingをsetすることで一旦は参照が切れて
見えなくなりますが、再度funcAからcallされるとobjCには前回のデータが残ったままとなっています。

これを回避するためにnothingをセットする前にobjCのデータを消去したいのですが、deleterowだと一件
ずつの削除となり50万件で30分程度の時間を要してしまいます。

何か改善する良い方法はないでしょうか?
よろしくお願いすます。

A 回答 (2件)

set objB = nothing


end function

set objB = nothing
set objC = nothing
end function

では駄目なのですか?
    • good
    • 0

No1です。

失礼しました。
質問文中に、[set objC = nothing]ではだめ、と書いてありましたね。

何かダミーの小さい(初期化された)を用意しておいて
再度setするとか。

#コピペでうっかり巨大なデータを扱って動作が遅くなった際に
#何か小さなデータを再度コピーしてクリップボードを初期化するのと
#同じような感じで。
    • good
    • 0
この回答へのお礼

nothingでは参照設定が無くなるだけで、実体は残っていて、2回目にcallされて、再度同じ名前でsetするとデータがよみがえってしまいまうんです。
SAPのRFC_TABLE_READという汎用モジュールを使っているのですが、オブジェクト名を変えても結果は同じでした。

結局SAPの汎用モジュール側で受け取ったオブジェクトに対して初期化せずにAPPNEDをしているのがいけないことが分かり、SAPの汎用モジュールの先頭でオブジェクトを初期化するようにしたら解決しました。

色々とアドバイスを頂きまして、有難うございました。

お礼日時:2009/09/21 21:13

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