为什么子表单不显示所有结果

时间:2018-03-27 08:14:13

标签: sql ms-access ms-access-2010

我有一个包含各种下拉菜单的访问表单。表单包含子表单中的报表。该报告基于以下SQL语句,该语句引用主窗体上的下拉列表:

SELECT imp_rule_CURRENT.target
    ,imp_rule_CURRENT.Phase
    ,imp_phase.SortOrder
    ,imp_rule_CURRENT.Solicitation
    ,imp_rule_CURRENT.Qualification
    ,imp_rule_CURRENT.Activity
    ,imp_rule_CURRENT.ClientLocation
    ,imp_rule_CURRENT.ProviderLocation
    ,imp_rule_CURRENT.Answer
    ,imp_rule_CURRENT.Comment
    ,imp_ActivityList_Test_PB_MetaversionC2.HeadingText
    ,imp_answer.full_name
    ,imp_answer.icon2
    ,imp_phase.Chapter
    ,tbl_Country.short_name
    ,IIf([Forms]![frm_ClientModel]![ckbYesOnly], InStr([Answer], "is_yes") > 0, - 1) AS Is_Yes
FROM imp_phase
INNER JOIN (
    imp_answer INNER JOIN (
        tbl_Country INNER JOIN (
            imp_ActivityList_Test_PB_MetaversionC2 INNER JOIN imp_rule_CURRENT 
                ON imp_ActivityList_Test_PB_MetaversionC2.SignatureTagSet = imp_rule_CURRENT.Activity
            ) ON tbl_Country.ISO_Country = imp_rule_CURRENT.target
        ) ON imp_answer.code_name = imp_rule_CURRENT.Answer
    ) ON imp_phase.code_name = imp_rule_CURRENT.Phase
WHERE (
        ((imp_rule_CURRENT.target) = [Forms]![frm_ClientModel]![cmbCountry])
        AND ((imp_rule_CURRENT.Phase) 
            LIKE IIf([Forms]![frm_ClientModel]![cmbPhase] = "ALL", "*", [Forms]![frm_ClientModel]![cmbPhase]))
        AND ((imp_rule_CURRENT.Solicitation) = [Forms]![frm_ClientModel]![txt_Initiative])
        AND ((imp_rule_CURRENT.Qualification) = [Forms]![frm_ClientModel]![txt_Qualification])
        AND ((imp_rule_CURRENT.ClientLocation) = [Forms]![frm_ClientModel]![txt_MeetingLocation_Client])
        AND ((imp_rule_CURRENT.ProviderLocation) = [Forms]![frm_ClientModel]![txt_MeetingLocation_Bank])
        AND ((imp_rule_CURRENT.Answer) <> "is_not_applicable")
        AND ((IIf([Forms]![frm_ClientModel]![ckbYesOnly], InStr([Answer], "is_yes") > 0, - 1)) = True)
        )
ORDER BY imp_phase.SortOrder;

当我打开表单并且SQL语句的以下部分评估为True Like IIf([Forms]![frm_ClientModel]![cmbPhase]="ALL","*",[Forms]![frm_ClientModel]![cmbPhase]))时,查询在手动打开时会显示所有结果,如我所料。然而,基于此查询的子表单没有显示结果。

问题:为什么子窗体不会显示任何结果?如何让子窗体显示它们?

更新2: 我已经测试并发现如果我查看子表单所基于的报告,那么正确的结果显示。如下面的评论中所述,当我选择&#34; ALL&#34;以外的任何内容时,子表单报告按预期工作。显示子表单中选中的每个其他项目的结果,而不是在我选择选项&#34; ALL&#34;时。这些结果没有显示在子查询中,但奇怪的是,如果我手动打开报告,它们会显示出来。那么问题可能与子表单有某种联系?

2 个答案:

答案 0 :(得分:1)

我仍然不明白为什么会出现这种情况,但我的问题的答案是必须调整mainform的查询以包含新语句。尽管子表单不是与主要表格相关联。

如我的更新中所述,当我手动打开查询时,它工作正常。当我打开基于查询的报表时,它运行正常。只有当我试图通过子表单打开报表时才会显示预期的结果。

这最终让我了解到,在某些情况下,可能会以某种方式限制所显示的记录集。

我设置的主要表单本身就是基于查询。我没有更新该查询以包含新的Like IIf([Forms]![frm_ClientModel]![cmbPhase]="ALL","*",[Forms]![frm_ClientModel]![cmbPhase]))命令。尽管我的子表单没有链接到主表单,但它限制了可用于显示的记录集。

答案 1 :(得分:0)

您是否在更新后重新查询子报表? 您的代码应包含以下内容,其中rvSubReportView是子报表对象:

rvSubReportView.Report.Requery

这将位于主窗体AfterUpdate()控件的ComboBox函数中。