首先让我说我对Access或VBA一点都不熟悉。但是,我是IT专家,在某个时候,有人创建了一个可以做某事的MS Access数据库,现在我必须予以支持。
我们有一个数据库,该数据库在打开时会删除任何旧数据并重新运行使该应用程序正常工作的外部查询。有时,该表中退出的程序的任何状态都不存在。这导致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
除了某种错误外,我似乎没有尝试给出任何结果。我要做的就是在此“启动”位中添加条件语句,该条件语句检查“ sales_order”表是否存在(如果不存在),然后检查下一条注释并忘记DoCmd.DeleteObject 。如何实现此功能?谢谢!
答案 0 :(得分:2)
TableExists
函数不是Access中的标准函数。您需要自己定义。
定义此类功能的主要方法有两种,一种是尝试捕获错误,另一种是遍历所有表并检查名称。
方法1(错误捕获):
Public Function TableExists(TableName As String) As Boolean
On Error Resume Next
TableExists = CurrentDb.TableDefs(TableName).Name = TableName
End Function
方法2(重复收集):
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
在公共模块中定义这两个功能之一,您的最后一种方法应该可以工作
答案 1 :(得分:0)