我可以在Access 2003中的单个查询中使用任何当前表单中的条件

时间:2013-09-03 19:07:47

标签: ms-access

我有一份报告(ReportX),我希望在我的数据库中以两种不同的形式(FormA和FormB)打开。我希望这样做是因为FormA和FormB解决了我的数据的不同方面,即使它们最终得到相同的输出。 ReportX基于QueryX的数据。

我遇到的问题是QueryX理想情况下会根据当前表单中的当前RecordID过滤数据。但我不知道如何做到这一点。我想设计QueryX,以便RecordID的标准基本上是CurrentForm!RecordID,但研究表明我不能这样做。我必须为每个表单单独但相同的查询和报告吗?或者,当我单击OpenReportX命令按钮时,有没有办法使用VBA来定义查询条件?

我已经尝试在OpenReport命令中使用WHERE条件:

DoCmd.OpenReport "ReportX", acViewPreview, ,"RecordID = " & RecordID

但是没有显示我希望的结果。我需要报表标题显示/打印每个RecordID和页脚中的页数,以仅反映相关RecordID的当前/总页数。 (换句话说,如果记录1是一页,记录2是两页,记录3是三页,那么当显示记录2的第一页时,ReportX应该说“第1页,共2页”而不是“第2页”。 6.“)因此,能够使用记录过滤器正确显示和打印单个记录也可以解决我的问题。

哪种解决方案最简单/最不可能?

2 个答案:

答案 0 :(得分:0)

打开报告时,您应该能够使用WHERE条件参数完成此操作:

DoCmd.OpenReport "rptName", acViewPreview, ,"RecordID = " & Me!RecordID

如果我需要更多地控制Report的记录源而不是Where条件参数可以为我做什么,我会将Reports RecordSource设置为空白(在设计报告之后)。接下来,我编写代码在Open Report按钮的Click事件中创建正确的SQL语句,然后是代码以打开报告并将SQL作为报告的开放参数传递。

Private Sub cmdOpenReport_Click()
    Dim sSQL as string
    sSQL = "SELECT * FROM tblWhatever WHERE RecordID = " & Me!RecordID
    DoCmd.OpenReport "rptReportName", acViewPreview, , , ,sSQL
End Sub

然后在报告的Open事件中,我编写代码来设置记录源:

Private Sub Report_Open(Cancel As Integer)
    If IsNull(Me.OpenArgs) = False Then
        Me.RecordSource = Me.OpenArgs
    End If
End Sub

如果这些都没有达到你想要的水平,那么你就会遇到不同的问题。我有点难以理解为什么你需要所有记录显示在标题中但只有一个记录在详细信息区域中。以及您希望如何实现这一目标。您可能最好先尝试编写一个查询,以便为您提供所需的确切结果,这样您就可以知道它可以完成。

作为旁注,我实际上在设计中使用了很少的已保存查询。这并不是说使用它们有什么问题,因为选项是为了您的方便。我经常在表单和报表上使用原始SQL,并将RecordSource设置为Form或Reports Open或Load事件上的SQL。

答案 1 :(得分:0)

是的,您可以指向查询中的表单数据项,然后在报表中使用该查询。表格需要在报告运行之前打开。至于每个记录都有一个标题,它在报告的设置中以及它如何显示数据中进行控制。

在Field或Critera中,您可以使用以下格式:

[Forms]![frm_Process_Candidates]![QuestionTemplate]

其中frm_Process_Candidates是分配给表单的名称,QuestionTemplate是表单上控件的名称,或者是表单数据源中的字段。

如果您有子表格,那么中间会有另一个[表格]电话。

[Forms]![frm_Dropdown_Admin]![frm_Dropdown_Admin_Detail].[Form]![text22]

访问应该从那里弄清楚。