2015-07-03 15 views
1

我想讓我的數據庫性能保持在最高水平,減少對象的數量並暫時創建東西。我應該從代碼自動完成的表格:刪除一個關於報表關閉並稍有延遲的表格

有從該表需要數據的報表 - (正常工作),所以這是流程:

'-> form is opened -> onClick find-button 
'-> table of dates is created -> table of dates is populated 
'-> Report is opened -> onReportClose (I want the table of dates to be deleted). 

的代碼編寫,它可以正常工作:

CurrentDb.TableDefs.Refresh 
DoCmd.DeleteObject acTable, "temp-table" 

所以我在報告中增加了一個宏,用於運行上面的代碼:這是一個函數。但我得到的錯誤如下:

運行時錯誤「3211」:數據庫引擎無法鎖定表 「臨時表」,因爲它已經被其他人或 過程中使用。

我相信這是因爲報告可能使用它。所以我加了個十幾秒延遲到我的代碼:

Dim PauseTime As Variant 
Dim Start As Variant 
Dim Elapsed As Variant 

PauseTime = 10 
Start = Timer 
Elapsed = 0 
Do While Timer < Start + PauseTime 
    Elapsed = Elapsed + 1 
Loop 
CurrentDb.TableDefs.Refresh 
DoCmd.DeleteObject acTable, "temp-table" 

相反,這似乎是抱着整個數據庫10秒,同樣的問題仍然出現。任何有關如何刪除關閉報表的表格或建議,或強制刪除Ms-Access(或許?)或如何解決此問題的建議。

+1

在MS Access中,創建和刪除表格會導致大量的膨脹。你沒有辦法?即使倒空桌子也更好。 – Fionnuala

+0

您必須在報告結束時放棄表格或丟棄其內容嗎?如果這不是絕對的要求,那麼您可以在工作流中的*「日期表填充」之前立即處理表(「DROP」或「DELETE」)。 – HansUp

+0

我已經在我的創建表函數中進行了檢查。它檢查表是否存在並丟棄它。我想刪除內容,所以我的數據庫沒有24/7這張表。我在特定時間需要它@HansUp –

回答

1

您必須清理Report的RecordSource,並在Unload事件中運行Requery方法。在此之後,您可以刪除數據表。

Private Sub Report_Unload(Cancel As Integer) 

    'Desvinculo la tabla del reporte 
    Me.RecordSource = "" 
    Me.Requery 

    'Borro las tablas de datos 
    DoCmd.RunSQL "DROP TABLE name_of_table" 

End Sub