【问题标题】:Delete a table on report close with slight delay在报告关闭时删除表格,稍有延迟
【发布时间】:2015-07-03 15:04:54
【问题描述】:

我想将我的数据库性能保持在最高水平,减少对象数量并临时创建内容。我有一张应该从代码中自动生成的表格:

有一个报告需要该表中的数据 - (工作正常),所以这是流程:

'-> 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”:数据库引擎无法锁定表 'temp-table' 因为它已经被另一个人使用了,或者 过程。

我相信这是因为报告可能正在使用它。所以我在我的代码中添加了十秒的延迟:

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 中强制删除表(也许?)或如何解决此问题提出任何想法/建议。

【问题讨论】:

  • 在 MS Access 中,创建和删除表会导致大量膨胀。你没有办法吗?即使清空桌子也更好。
  • 必须在报表关闭时删除表格或丢弃其内容吗?如果这不是绝对要求,您可以在工作流程中的“日期表已填充” 步骤之前立即处理表(DROPDELETE)。
  • 我已经检查了我的创建表功能。它检查表是否存在并删除它。我想删除内容,所以我的数据库没有这个表 24/7。我想要它在特定时间@HansUp
  • 如果报表的“记录源”属性中使用了该表,Access 将不允许您在报表打开时删除该表。
  • @HansUp 我想我会清空桌子。

标签: ms-access vba ms-access-2003


【解决方案1】:

您必须清理报表的 RecordSource,并在 Unload 事件中运行 Requery 方法。之后,您可以 DROP 数据表。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    相关资源
    最近更新 更多