如果查询已经存在,则删除整个查询

时间:2018-07-27 16:22:47

标签: vba ms-access

我有一个创建两个查询的表单,将它们导出到Excel,然后将其删除。但是,当我在导出时遇到错误时,它不会将其删除。我将如何检查它们是否已经存在?如果确实如此,请将其删除,以便我可以使用新的/更新的数据重新创建它们?

到目前为止的代码:

Dim qdfNewQry As Object
Dim qdfNewWS As Object

'//----- qdfNewQry
If Not IsNull(DLookup("myExportQry", "MSysObjects", "Name='myExportQry'")) Then
    CurrentDb.QueryDefs.Delete qdfNewQry.Name
    Set qdfNewQry = CurrentDb.CreateQueryDef("myExportQry", exportQry)
Else
    Set qdfNewQry = CurrentDb.CreateQueryDef("myExportQry", exportQry)
End If

'//----- qdfNewWS
If Not IsNull(DLookup("myExportWS", "MSysObjects", "Name='myExportWS'")) Then
    CurrentDb.QueryDefs.Delete qdfNewWS.Name
    Set qdfNewWS = CurrentDb.CreateQueryDef("myExportWS", exportWS)
Else
    Set qdfNewWS = CurrentDb.CreateQueryDef("myExportWS", exportWS)
End If

在行If Not IsNull(DLookup("myExportQry", "MSysObjects", "Name='myExportQry'")) Then上出现错误“您作为查询参数输入的表达式产生了此错误:'myExportQry'”

我似乎很迷路。任何帮助/建议/更正将不胜感激!

EDIT1:

为澄清起见,我想删除整个查询。其他替代解决方案也将受到欢迎!

3 个答案:

答案 0 :(得分:1)

DLookup使用以下格式:

DLookup([Field], [Table], [Criteria])

MSysObjects中没有名为“ MyExportQuery”的字段。因此,DLookup()中的第一个参数是错误的。

另外,请记住,当使用保留字(例如“名称”)时,需要将其括在方括号中。

,你想说,

DLookup("[ID]", "MSysObjects", "[Name]='myExportQry'")

应该返回一个数字或一个NULL,这样将为您提供确定查询是否已存在的条件。

以上内容未经测试,但从逻辑上讲对我来说很有意义。

答案 1 :(得分:1)

我用这个。如果查询不存在,DeleteObject将被“跳过”

On Error Resume Next
DoCmd.DeleteObject acQuery, "myExportQry"
Set qdfTemp = CurrentDb.CreateQueryDef("myExportQry", "SELECT From ....")

答案 2 :(得分:0)

我不会为此使用Dlookup函数!

Private Sub Command1_Click()
Dim db As DAO.Database
Dim qdf As DAO.QueryDef

Set db = CurrentDb()
For Each qdf In db.QueryDefs
  Debug.Print qdf.Name
       If qdf.Name = "strQry" Then
          CurrentDb.QueryDefs.Delete "strQry"
          CurrentDb.QueryDefs.Refresh
          Exit For
       End If
Next qdf
Set qdf = Nothing
Set db = Nothing
End Sub