如果用recordset,<br>rs.close 的作用和 set rs=nothing 一樣嗎?一樣可以放出資源嗎?<br>如果程式執行 end ,會放出所有資源嗎?還是要一個個unload?
rs.Close 是關閉目前已開啟的 recordset。 Set rs = Nothing 是把變數 rs 握有的物件指標給釋放掉。 所以,如果只有一個變數 rs 握有某個 recordset 的指標的話,Set rs = Nothing 會釋放掉這個 recordset 的資源,當然也會順便 Close。不過反之不然喔! 使用 End 結束程式在大部份的情況之下會放出所有的資源。不過如果有外部的 DLL 或 COM+ 元件本身具有 state 的話,可能無法釋放這些資源。
請問一下,那 set rs=nothing 與 set rs.activeconnection=nothing 有何不同呢?
請問是否所有ocx都要unload呢?
應該這樣說 set rs = nothing 是釋放rs這個變數對物件的引用。然而當物件的引用數為零時會釋放所有的資源,所以也包含了Close。 而Close就是Close
set rs.activeconnection=nothing 只是將rs與cn之間的關係切斷罷了,請參考http://www.vbqa.com/discuss/read.asp?id=8956
要不要 set = nothing 要看該 ocx 的實作,有的可能利用 api 取得記憶體或其他資源,必須要把它釋放掉。一般來說程式正常結束的話應該都會全部釋放,不過使用 End 我覺得不好,它應該不是正常的結束手段,因為「End 陳述式可以強制程式碼終止,無須經過 Unload、QueryUnload,或 Terminate 事件,或任何其它的 Visual Basic 程式碼。」因此我猜有可能 ocx 的 Terminate 也不會執行,導致資源無法釋放…
暈1