2013-10-25 373 views
0

我有一個VBA函數,返回一個RecordSet和這個RecordSet用於子例程。該函數本身位於一個模塊中。雖然函數本身返回RecordSet成功,我有兩個問題:excel vba函數返回記錄集

  1. 如果我嘗試關閉功能的連接,它會導致應用程序失敗
  2. 如果我試圖關閉RecordSet在子程序使用它後,它導致應用程序失敗

那麼,如何在使用它之後返回記錄集並關閉記錄集之後關閉函數中的連接?

我的函數建立連接,打開它並執行查詢。

+0

請顯示您的代碼。 – Tarik

+0

記錄集取決於實時連接的工作。在完成使用的任何記錄集之前,不應嘗試關閉連接。 – Barranka

回答

0

使用記錄集後,它必須關閉。

當記錄集處於活動狀態時,它會佔用資源。使用記錄集後,您應該釋放它正在使用的內存,以便可以將它們提供給計算機的其他對象。這是通過將Nothing分配給Recordset對象來完成的。這裏是一個例子:

'Clean Up 
rsTemp.Close 'closing recordset 
Set rsTemp= Nothing ' free the memory 

你也可以在最後關閉連接。

If con.State = adStateOpen Then 
con.Close 
End If 

If Not con Is Nothing Then Set con = Nothing 
+0

在返回記錄集的函數中,如果我將記錄集和連接設置爲空或關閉,則代碼將失敗並且不會返回到調用子例程。我已經嘗試關閉在調用子例程中使用的設置記錄集,但正如我所說的那樣失敗了。在哪裏放置子程序關閉記錄集,以避免失敗並關閉函數中的連接導致它失敗? – Andy5

+0

@ Andy5你可以創建一個記錄集的函數。讓該函數返回記錄集....使用調用函數中的記錄集,然後關閉記錄集。 – Santosh

0

不要這樣做。模塊化爲子程序