DoCmd.DeleteObject acTable - 此表格或报告中指定的记录...不存在

DoCmd.DeleteObject acTable - The record ... specified on this form or report does not exist

首先让我说我对 Access 或 VBA 一点都不熟悉。但是,我是 IT 人员,在某个时候有人创建了一个 MS Access 数据库来做某事,现在我必须支持它。

我们有一个数据库,在打开时会删除所有旧数据并重新运行s 使该应用程序正常运行的外部查询。有时程序退出的任何状态 table 已经不存在。这导致 MS Access 挂在删除行上,我必须 运行 调试器,注释掉 DoCmd.DeleteObject 行,重新 运行,然后取消注释该行以让用户继续他们的一天。

我想添加某种条件语句,但是我在 If...Then 语句或 'TableExist' 类型函数方面能够 google 的任何内容总是会导致错误被抛出我没有定义函数。我最好的猜测是我嵌套不正确,或者我没有正确调用某种外部函数,但正如我所说,我的 VBA 知识非常有限。

此代码在启动时执行:

Public Function Startup() As Integer

    DoCmd.Close acForm, "soLookup"
    DoCmd.DeleteObject acTable, "sales_order"
    DoCmd.RunSavedImportExport "Import-sales_order"
    DoCmd.OpenForm "soLookup"

End Function

它是

DoCmd.DeleteObject acTable, "sales_order"

导致事情失败的行。

我已经根据我找到的几个例子多次尝试重组它,但我只会麻烦下面的一个

Public Function Startup() As Integer

    DoCmd.Close acForm, "soLookup"
    If TableExists("sales_orders") Then
      DoCmd.DeleteObject acTable, "sales_orders"
    Else    
      'Do nothing
    End If 
    DoCmd.RunSavedImportExport "Import-sales_order"
    DoCmd.OpenForm "soLookup"

End Function

除了某种错误之外,我似乎没有任何尝试给我任何结果。我想要做的就是向这个 'Startup' 位添加一个条件语句,检查 "sales_order" table 是否存在,如果不存在,则继续进行下一条评论并忘记 DoCmd.DeleteObject。我怎样才能实现这个功能?!谢谢!

TableExists 函数不是 Access 中的标准函数。需要自己定义。

有两种主要的方法来定义这样的函数,一种是尝试和错误捕获,另一种是遍历所有表并检查名称。

方式一(错误补漏):

Public Function TableExists(TableName As String) As Boolean
    On Error Resume Next
    TableExists = CurrentDb.TableDefs(TableName).Name = TableName
End Function

方式二(迭代集合):

Public Function TableExists(TableName As String) As Boolean
    Dim td As DAO.TableDef
    For Each td In CurrentDb.TableDefs
        If td.Name = TableName Then
            TableExists = True
            Exit Function
        End If
    Next
End Function

在 public 模块中定义这些函数中的任何一个,最后一种方法应该有效

我将改为修改查询以将源数据导入新的 table (sales_orders),这将在查询运行时覆盖现有数据,因此我不必删除table 并额外检查 TableExists