我使用以下代码将交叉表查询导出到excel。
我尝试过Set rs1 = CurrentDb.OpenRecordset("qry_Comparison_Bulk")
,但总是会出错:参数太少。19.该查询中存储了19个参数。我的下一个想法是在VBA中重新创建SQL。现在我遇到了错误:交叉表列标题太多了(424)。424是我数据库中条目的总数,所以我认为过滤器没有正常工作。
Set rs1 = CurrentDb.OpenRecordset("TRANSFORM Sum(tbl_Formulas.Input) AS SumOfInput " _
& "SELECT tbl_Formulas.BillType, tbl_Formulas.RawMaterial " _
& "FROM tbl_Formulas " _
& "WHERE (tbl_Formulas.BillType)='" & [Forms]![frm_BulkComparison_Select]![bill1] & "' Or (tbl_Formulas.BillType)='" & [Forms]! [frm_BulkComparison_Select]![bill2] & "' Or (tbl_Formulas.BillType)='" & [Forms]![frm_BulkComparison_Select]![bill3] & "' AND (tbl_Formulas.Item)='" &[Forms]![frm_BulkComparison_Select]![Item 1] & "' Or " _
& "(tbl_Formulas.Item)='" & [Forms]![frm_BulkComparison_Select]![Item 2] & "' Or (tbl_Formulas.Item)='" & [Forms]![frm_BulkComparison_Select]![Item 3] & "' Or (tbl_Formulas.Item)='" & [Forms]![frm_BulkComparison_Select]![Item 4] & "' Or (tbl_Formulas.Item)='" & [Forms]![frm_BulkComparison_Select]![Item 5] & "' Or " _
& "(tbl_Formulas.Item)='" & [Forms]![frm_BulkComparison_Select]![Item 6] & "' Or (tbl_Formulas.Item)='" & [Forms]![frm_BulkComparison_Select]![Item 7] & "' Or (tbl_Formulas.Item)='" & [Forms]![frm_BulkComparison_Select]![Item 8] & "' Or (tbl_Formulas.Item)='" & [Forms]![frm_BulkComparison_Select]![Item 9] & "' Or " _
& "(tbl_Formulas.Item)='" & [Forms]![frm_BulkComparison_Select]![Item 10] & "' Or (tbl_Formulas.Item)='" & [Forms]![frm_BulkComparison_Select]![Item 11] & "' Or (tbl_Formulas.Item)='" & [Forms]![frm_BulkComparison_Select]![Item 12] & "' Or (tbl_Formulas.Item)='" & [Forms]![frm_BulkComparison_Select]![Item 13] & "' Or " _
& "(tbl_Formulas.Item)='" & [Forms]![frm_BulkComparison_Select]![Item 14] & "' Or (tbl_Formulas.Item)='" & [Forms]![frm_BulkComparison_Select]![Item 15] & "' AND (tbl_Formulas.BP)='" & [Forms]![frm_BulkComparison_Select]![BP] & "' " _
& "GROUP BY tbl_Formulas.BillType, tbl_Formulas.RawMaterial " _
& "PIVOT tbl_Formulas.Item;")
存在‘’&…&‘’分隔符,以避免使用参数,因为每个字段的值都是文本。
此外,我的表单中有15个文本框用于"Item",3个文本框用于"BillType",1个文本框用于"BP“。
发布于 2018-09-26 16:07:00
我猜您的qry_Comparison_Bulk
查询引用表单控件类似于这个tbl_Formulas.BillType=[Forms]![frm_BulkComparison_Select]![bill1]
当从Access查询设计器运行时,查询工作。问题是,当您尝试使用带有OpenRecordset
的命名查询时,这些控件中的每一个都被视为没有为其提供值的参数。
所以提供价值..。
Dim qdf As DAO.QueryDef
Dim prm As DAO.Parameter
Dim rs As DAO.Recordset
Set qdf = CurrentDb.QueryDefs("qry_Comparison_Bulk")
For Each prm In qdf.Parameters
prm.Value = Eval(prm.Name)
Next
Set rs = qdf.OpenRecordset()
prm.Name
将是Access解释为参数名的内容.比如[Forms]![frm_BulkComparison_Select]![bill1]
..。所以Eval(prm.Name)
相当于Eval([Forms]![frm_BulkComparison_Select]![bill1])
..。并返回控件的值..。然后将其分配给prm.Value
发布于 2018-09-26 15:50:32
我认为使用第一种方法可能会更好:在获得记录集之前,只需设置查询中的参数:
Public Sub ProcessQuery()
Dim db As DAO.Database, qdf As DAO.QueryDef, rs As DAO.Recordset
Set db = CurrentDb
Set qdf = db.QueryDefs("qry_Comparison_Bulk")
' set parameters
qdf.Parameters(1).value = [Forms]![frm_BulkComparison_Select]![Item 1]
Set rs1 = qdf.OpenRecordset
End Sub
https://stackoverflow.com/questions/52521424
复制相似问题