我对这个有点失落。我有一个子表单,它显示基于我的组合框选择的记录。这是这样完成的(从Combobox After_Update调用代码):
Sub ShowResults1()
With Forms![MYForm].RecordsetClone
.FindFirst "[ID] = " & Forms![MyForm]![CmbSearch]
If Not .NoMatch Then
If Forms![MyForm].Dirty Then Forms![MyForm].Dirty = False
Forms![MyForm].MySubfom.SourceObject = "MySubform"
Forms![MyForm].Bookmark = .Bookmark
End If
End With
End Sub
主表单绑定到连接表,这是它的记录源(它通过ID链接到2个表中):
SELECT JoinTable.*, Table1.IDx AS IDx_Table1, Table1.Field1, Table1.Field2, Table1.Field3, Table2.IDy AS IDy_Table2, Table2.Field1, Table2.Field2, Table2.Field3
FROM Table2 INNER JOIN (Table1 INNER JOIN JoinTable ON Table1.IDx = JoinTable.IDx) ON Table2.IDy = JoinTable.IDy;
当执行高级代码时,我得到符合条件的子表单结果,所以这很好。
现在,我想要的是一份报告,它将准确显示已经显示的子窗体。这太复杂了,还是有任何简单的解决方案?
编辑:
我创建了一个新查询(名为" SearchReport"):
SELECT Table2.IDy, Table2.Field1, Table2.Field3
FROM Table2 INNER JOIN (Table1 INNER JOIN Join_Table ON Table1.IDx = JoinTable.IDx) ON Table2.IDy = JoinTable.IDy
WHERE JoinTable.IDy=3;
此查询成功显示了我想要的记录,但只显示了ID 3.现在我删除了" WHERE JoinTable.IDy = 3"来自Query,以便我可以根据我的组合框显示记录。这就是我尝试打开报告的方式:
DoCmd.OpenReport "MyReport", acViewReport, "SearchReport", WhereCondition:="JoinTable.IDy =" & Forms![MyForm]![CmbSearch]
但是当打开报告时,Access会一直询问输入IDy的参数值。即使我输入3,也会显示该查询中显示的所有记录。有什么不对?
答案 0 :(得分:1)
表单和报告都有Record Source
属性。
在此Record Source
属性中,您可以指定表,查询或纯SQL语句。
在VBA中,如果您的子窗体已打开并显示正确的信息,则可以说MyReport.RecordSource = MySubForm.RecordSource
。
但实现你想要的最合适的方法是:
在报告的代码中,添加以下公开子项:
Public Sub Open_This_Report(strSQL)
Me.RecordSource = strSQL
End Sub
在表单中,使用此ClickEvent添加一个按钮:
Private Sub myButton_Click()
DoCmd.OpenReport "name_of_the_report", acViewNormal
Call Report_name_of_the_report.Open_This_Report(me!SubFormName.Form.RecordSource)
'or
Call Report_name_of_the_report.Open_This_Report("specific SQL query")
End Sub
答案 1 :(得分:0)
解决。我必须从我在编辑中发布的Query中选择记录(命令button_click事件的完整代码 - 表单上的按钮):
Dim sql As String
sql = "SELECT Table2.IDy, Table2.Field1, Table2.Field3" & _
" FROM Table2 INNER JOIN (Table1 INNER JOIN Join_Table ON Table1.IDx =" & _
"JoinTable.IDx) ON Table2.IDy = JoinTable.IDy" & Forms![MyForm]![CmbSearch] DoCmd.OpenReport "APO_IIS", acViewReport
Reports![Myreport].RecordSource = sql