我有一个创建两个查询的表单,将它们导出到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:
为澄清起见,我想删除整个查询。其他替代解决方案也将受到欢迎!
答案 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