Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 使用VBA检查查询是否存在_Ms Access_Vba - Fatal编程技术网

Ms access 使用VBA检查查询是否存在

Ms access 使用VBA检查查询是否存在,ms-access,vba,Ms Access,Vba,我在VBA中有一个过程,它根据用户在表单中的下拉列表(报表名称和分组条件)上选择的内容运行报表。此外,我有一个按钮,用户选择可以转移到Excel。 下面是我想测试查询是否存在的过程部分: If Not IsNull(Me.cmbGroup.Value) Or Me.cmbGroup.Value = "" Then strSQL = "SELECT * FROM qryCrossTotGroup WHERE [Group]='" & Me.cmbGroup.Value &

我在VBA中有一个过程,它根据用户在表单中的下拉列表(报表名称和分组条件)上选择的内容运行报表。此外,我有一个按钮,用户选择可以转移到Excel。 下面是我想测试查询是否存在的过程部分:

If Not IsNull(Me.cmbGroup.Value) Or Me.cmbGroup.Value = "" Then

    strSQL = "SELECT * FROM qryCrossTotGroup WHERE [Group]='" & Me.cmbGroup.Value & "'"
    'MsgBox strSQL

    With MyDatabase
        .QueryDefs.Delete ("tmpOutQry")
        Set MyQueryDef = .CreateQueryDef("tmpOutQry", strSQL)
    End With

    'Step 3: Open the query
    Set MyRecordset = MyDatabase.OpenRecordset(strSQL)

    'Step 4: Clear previous contents
    Dim xlApp As Object
    Set xlApp = CreateObject("Excel.Application")
    With xlApp
        .Visible = True
        .Workbooks.Add
        .Sheets("Sheet1").Select

    'Step 5: Copy the recordset to Excel
        .ActiveSheet.Range("A2").CopyFromRecordset MyRecordset

    'Step 6: Add column heading names to the spreadsheet
        For i = 1 To MyRecordset.Fields.Count
            xlApp.ActiveSheet.Cells(1, i).Value = MyRecordset.Fields(i - 1).Name
        Next i
        xlApp.Cells.EntireColumn.AutoFit
    End With

End If

我想测试查询“tmpOutQry”是否存在以便删除它。有人知道这行代码吗?

您不使用临时查询,因此可以将第一步简化为:

strSQL = "SELECT * FROM qryCrossTotGroup WHERE [Group]='" & Me.cmbGroup.Value & "'"
'MsgBox strSQL

'Step 3: Open the query
Set MyRecordset = MyDatabase.OpenRecordset(strSQL)

您不使用临时查询,因此可以将第一步简化为:

strSQL = "SELECT * FROM qryCrossTotGroup WHERE [Group]='" & Me.cmbGroup.Value & "'"
'MsgBox strSQL

'Step 3: Open the query
Set MyRecordset = MyDatabase.OpenRecordset(strSQL)

我尝试了这段代码并成功:

With MyDatabase
For Each MyQueryDef In CurrentDb.QueryDefs
 If MyQueryDef.Name = "tmpOutQry" Then

   .QueryDefs.Delete ("tmpOutQry")
   Exit For
   End If
   Next

    Set MyQueryDef = .CreateQueryDef("tmpOutQry", strSQL)
End With

我尝试了这段代码并成功:

With MyDatabase
For Each MyQueryDef In CurrentDb.QueryDefs
 If MyQueryDef.Name = "tmpOutQry" Then

   .QueryDefs.Delete ("tmpOutQry")
   Exit For
   End If
   Next

    Set MyQueryDef = .CreateQueryDef("tmpOutQry", strSQL)
End With

你有没有在谷歌上做过简单的搜索?如果是这样,你会得到第一个结果。我做了搜索,得到了当前页面作为第一个答案。我不认为仅仅因为你得到了一个特定的搜索响应,每个人都会得到相同的结果。只要说‘你做了一个简单的谷歌搜索吗?’?如果是这样,你会得到第一个结果。我做了搜索,得到了当前页面作为第一个答案。我不认为仅仅因为你得到了一个特定的搜索响应,每个人都会得到相同的结果。只要说‘我成功了!’!为其他人发布此消息:如果MyQueryDef.Name=“tmpOutQry”则使用CurrentDb.QueryDefs中每个MyQueryDef的MyDatabase,然后使用.querydef.Delete(“tmpOutQry”)退出,如果下一步设置MyQueryDef=.CreateQueryDef(“tmpOutQry”,strSQL)则结束,很高兴您能使用它,但是。。。。。您创建了
MyQueryDef
,然后在应该使用它的时候,使用
Set MyRecordset=MyDatabase.OpenRecordset(strSQL)
来查询数据库。我让它工作了!为其他人发布此消息:如果MyQueryDef.Name=“tmpOutQry”则使用CurrentDb.QueryDefs中每个MyQueryDef的MyDatabase,然后使用.querydef.Delete(“tmpOutQry”)退出,如果下一步设置MyQueryDef=.CreateQueryDef(“tmpOutQry”,strSQL)则结束,很高兴您能使用它,但是。。。。。您可以创建
MyQueryDef
,然后在应该使用它的地方,使用
Set MyRecordset=MyDatabase.OpenRecordset(strSQL)
来查询数据库。需要使用tmpOutQry来保存所选报表数据并将其导出到Excel中。每次选择新报表时,我都需要检查旧的临时查询,将其删除并创建一个新的临时查询以获取新数据并导出到excel。需要使用tmpOutQry保存所选报表数据并将其导出到excel。每次选择新报告时,我都需要检查旧的临时查询,将其删除并创建一个新的临时查询,以获取新数据并导出到excel。