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
首先让我说我对 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