首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要帮助纠正交叉表查询的SQL

需要帮助纠正交叉表查询的SQL
EN

Stack Overflow用户
提问于 2018-09-26 15:32:33
回答 2查看 133关注 0票数 1

我使用以下代码将交叉表查询导出到excel。

我尝试过Set rs1 = CurrentDb.OpenRecordset("qry_Comparison_Bulk"),但总是会出错:参数太少。19.该查询中存储了19个参数。我的下一个想法是在VBA中重新创建SQL。现在我遇到了错误:交叉表列标题太多了(424)。424是我数据库中条目的总数,所以我认为过滤器没有正常工作。

代码语言:javascript
运行
复制
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“。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-26 16:07:00

我猜您的qry_Comparison_Bulk查询引用表单控件类似于这个tbl_Formulas.BillType=[Forms]![frm_BulkComparison_Select]![bill1]

当从Access查询设计器运行时,查询工作。问题是,当您尝试使用带有OpenRecordset的命名查询时,这些控件中的每一个都被视为没有为其提供值的参数。

所以提供价值..。

代码语言:javascript
运行
复制
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

票数 2
EN

Stack Overflow用户

发布于 2018-09-26 15:50:32

我认为使用第一种方法可能会更好:在获得记录集之前,只需设置查询中的参数:

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52521424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档