2016-04-15 65 views
0

我有一个表格,它有报告按钮。我想设置Report.Recordsource到屏幕上的任何东西,所以基本上我需要.RecordsetClone的形式发送到报告。这是我试过的,但它不起作用:访问报告 - Recordsetclone as。记录源

Me.Recordsource= Forms!Myform.RecordsetClone 

我得到一个无效的参数。任何想法如何解决这个问题?

编辑:

我想这太 - 这个按钮被放置在具有记录和打开Report形式:

Private Sub cmdOpenReport_Click() 

DoCmd.OpenReport "MyReport", acViewReport 
    Reports![MyReport].RecordSource = Me.RecordSource 
Reports![MyReport].Filter = Me.Filter 
Reports![MyReport].FilterOn = True 

End Sub 
+0

'Recordsource'需要一个字符串(查询或SQL)。你可以尝试'Set Me.Recordset = Forms!Myform.RecordsetClone',但我不确定这是否有效。 – Andre

+0

@Andre,在Report_Open事件中粘贴时,出现错误:“此功能仅在ADP中可用”。看起来它不起作用。 – LuckyLuke82

回答

0

古斯塔夫证明,这是正确的答案。我为此打开了另一条线索,但我并不知道哪里出了什么问题。对不起,您可以交叉发送。这里是链接到我的主题: Access Report - show current recordsource of another form

Dim strWhere As String 

     Me.Dirty = False 

     With Me.Recordset.Clone 
      Do Until .EOF 
       strWhere = strWhere & "," & !ID 
       .MoveNext 
      Loop 
     End With 
     strWhere = Mid(strWhere, 2) 
     DoCmd.OpenReport "MyReport", acViewReport, WhereCondition:="ID In (" & strWhere & ") 

版主可以删除一个线程,我不能这样做。

0

你不能这样做,但你可能会逃脱:

Me.RecordSource = Forms!Myform.RecordSource 

虽然这不包括应用于窗体的过滤器。但是,过滤器可以以同样的方式复制,然后:

Me.Filter = Forms!Myform.Filter 
Me.FilterOn = True 

虽然排序必须在报告中以常规方式指定。

概念

Private Sub Report_Open(Cancel As Integer) 

    If MsgBox("Mod 2?", vbQuestion + vbYesNo, "Select") = vbYes Then 
     Me.RecordSource = "Select * From TestTable Where Id Mod 2 = 0" 
    End If 

End Sub 
+0

Gustav,我在哪里以及如何在Report_Open事件中尝试此操作?我试过了,但没有任何反应。或者我必须在button_click事件中做些什么 - 我在哪里打开报告(DoCmd.Openreport,“myReport”,AcViewPreview) – LuckyLuke82

+0

我会使用点击事件 - 但那么您必须用'Reports来替换'Me'。[NameOfYourReport]' – Gustav

+0

检查我编辑的问题如果这是你的意思。它不工作。尝试使用一些空白的连续表单进行测试 - 输入2行,然后打开报告而不关闭表单,查看这2行 - 只会看到一个最后保存的记录。 – LuckyLuke82