2016-04-15 13 views
0

Ich habe ein Formular, das Schaltfläche für den Bericht hat. Ich möchte Report.Recordsource auf was auch immer auf dem Bildschirm einstellen, also muss ich im Grunde .RecordsetClone des Formulars an Report senden. Hier ist, was ich ausprobiert habe, aber es funktioniert nicht:Zugriff auf Bericht - Recordsetclone als. Recordsource

Me.Recordsource= Forms!Myform.RecordsetClone 

Ich bekomme ein ungültiges Argument darauf. Irgendwelche Ideen, wie man das löst?

EDIT:

ich das auch versucht - diese Schaltfläche auf dem Formular platziert wird, die Aufzeichnungen und öffnet Bericht hat:

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' will eine Zeichenfolge (Abfrage oder SQL). Sie können 'Set Me.Recordset = Forms! MyForm.RecordsetClone' versuchen, aber ich bin mir nicht sicher, ob das funktioniert. – Andre

+0

@Andre, wenn ich dies in Report_Open Ereignis einfügen, habe ich Fehler: "Diese Funktion ist nur in einem ADP verfügbar". Sieht so aus als ob es nicht funktioniert. – LuckyLuke82

Antwort

0

Gustav ist diese richtige Antwort. Ich habe einen anderen Thread dafür geöffnet, aber mir war nicht bewusst, was falsch ist und wo. Entschuldigung für das Crossposting. hier ist Link zu meinem Thread: 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 & ") 

Moderatoren einer der Threads löschen kann, kann ich das nicht tun.

0

Sie das nicht können, aber Sie können mit wegkommen:

Me.RecordSource = Forms!Myform.RecordSource 

obwohl das keinen Filter enthält, der auf das Formular angewendet wird. Allerdings kann der Filter auf die gleiche Weise kopiert werden, und dann:

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

beim Sortieren muss die übliche Art und Weise in dem Bericht angegeben werden.

Proof-of-Concept

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, wo und wie genau soll ich das versuchen, in Report_Open event? Ich habe es versucht, aber nichts passiert. Oder muss ich etwas im button_click Ereignis tun - wo ich Bericht öffne (DoCmd.Openreport, "myReport", AcViewPreview) – LuckyLuke82

+0

Ich würde das Klickenereignis verwenden - aber dann müssen Sie 'Me' durch 'Berichte ersetzen. [NameOfYourReport]' – Gustav

+0

Überprüfen Sie meine bearbeitete Frage Wenn das ist, was Sie meinten. Es funktioniert nicht. Versuchen Sie es mit einem leeren Formular - geben Sie 2 Zeilen ein und öffnen Sie den Bericht ohne das Formular zu schließen, um diese 2 Zeilen zu sehen - Sie sehen nur einen, zuletzt gespeicherten Datensatz. – LuckyLuke82

Verwandte Themen