Sql 参数化查询&x2B;DoCmd.TransferSpreadsheet电子表格导出

Sql 参数化查询&x2B;DoCmd.TransferSpreadsheet电子表格导出,sql,ms-access,Sql,Ms Access,我需要将大量复杂数据导出到excel电子表格。为了实现这一点,我创建了几个大型查询。现在,我希望根据日期范围和其他一些花边信息过滤这些查询,但我不确定如何做到这一点 DoCmd.TransferSpreadsheet acExport,“概述\代理\查询”,xlsxPath,True,“代理” 这就是我当前将查询导出到Excel电子表格的方式。形成这些查询时,我没有意识到我不能传递记录集,只能传递表或查询的字符串名称。我的第二次尝试看起来像: StrAgents = "SELECT * FROM

我需要将大量复杂数据导出到excel电子表格。为了实现这一点,我创建了几个大型查询。现在,我希望根据日期范围和其他一些花边信息过滤这些查询,但我不确定如何做到这一点

DoCmd.TransferSpreadsheet acExport,“概述\代理\查询”,xlsxPath,True,“代理”

这就是我当前将查询导出到Excel电子表格的方式。形成这些查询时,我没有意识到我不能传递记录集,只能传递表或查询的字符串名称。我的第二次尝试看起来像:

StrAgents = "SELECT * FROM Overview_Agents_Query" 

# Build a WHERE clause here

Set qdfAgents = CurrentDb.CreateQueryDef("Temp_Agents_Query", StrAgents)

DoCmd.TransferSpreadsheet acExport, , qdfAgents.Name, xlsxPath, True, "Agents"

CurrentDb.QueryDefs.Delete qdfAgents.Name
它适用于两个简单的查询,但由于使用了嵌套查询、联接和联合,因此对于某些更复杂的查询是不切实际的。我想真的希望避免将大块SQL报表字符串直接硬编码到我的VBA代码中,尽管我认为如果没有解决方案,这总比什么都没有好

关于如何实现这一点,有什么想法吗?

选项:

  • 动态参数化查询-参数可以是表单上的输入弹出窗口或引用控件(我从不使用动态参数化查询)

  • 生成报告-通过引用表单上的控件,使用VBA构造筛选字符串,并在打开时将筛选条件应用于报告,然后使用
    DoCmd.OutputTo


  • 您可以修改查询以允许插入where子句:

    ' SQL of query:
    ' Select * From SomeTable Where {0}
    
    Dim SQL As String
    Dim Filter As String
    
    Filter = "(SomeField = '" & YourSearchString & "')"
    
    Set qd = CurrentDb.QueryDefs("YourQuery")
    SQL = qd.SQL
    qd.SQL = Replace(SQL, "{0}", Filter)
    qd.Close
    
    DoCmd.TransferSpreadsheet acExport, , qd.Name, xlsxPath, True, "Agents"
    
    ' Restore original SQL.
    Set qd = CurrentDb.QueryDefs("YourQuery")
    qd.SQL = SQL
    qd.Close
    

    研究使用或公共函数向查询传递参数。这不是我最喜欢的解决方案,但我最终选择了它。我不得不重新进行一些查询,因为它们叠加在子查询上,但至少可以完成工作。