Form.RecordsetClone nicht als Quelle für Bericht nutzbar?
-
domingo, 26 de febrero de 2012 9:01
Hallo Allseits,
ein rs aus einem SQL-String ist ja ohne Probleme als Quelle für einen Bericht nutzbar.
Ist ein rs aus einem Form.RecordsetClone ein 'anderer' rs-Typ? Es kommt dann immer Fehlermeldung 'Typen passen nicht zusammen'.
Hintergrund ist Euch sicher bekannt: So kann bzw.könnte im Fo beliebig gefiltert werden.
Gibt es da eine Lösung?
Meine Code:Set rsReport = Forms![Fo_Tab01_LV-3_00a].Form.RecordsetClone
rsReport.MoveLast
anzahl = rsReport.RecordCount
MsgBox anzahl 'Anzahl wird korrekt angezeigtDoCmd.OpenReport "Be01_GA-RTF", acViewPreview
rsReport.Close
Set rsReport = NothingUnd dann im OpenBericht:
Me.RecordSource = rsReport
Ich danke für Euren Tipp - Gruß Steffen
Todas las respuestas
-
domingo, 26 de febrero de 2012 15:29
Hallo!
Grund für Fehlermeldung:
Recordsource ist ein String. RecordsetClone ist entweder ein DAO.Recordset oder ADODB.Recordset.
Du müsstest im Report Me.Recordset verweden. Das hilft allerdings auch nicht, da das nur ein einem ADP verfügbar ist.Du könntest den Filter aus dem Formular an den Bericht (über Docmd.Openreport) übergeben.
mfg
JosefCode-Bibliothek für Access-Entwickler
AccUnit - Testen von Access-Anwendungen
Virtueller Access-Stammtisch -
lunes, 27 de febrero de 2012 3:05
-
lunes, 27 de febrero de 2012 10:32
Hallo Henry,
mit Me.RecordSource = rsReport.Name -> dann kommen alle Sätze im Bericht an.
Zu Deinem: "Falls Du auch noch Filter und Sortier Kriterien gesetzt hast, musst Du auch diese aus dem Form übernehmen."
Genau dies wollte ich mit dem clone vermeiden, weil ja im Fo auch benutzerdefiniert gefiltert werden kann und diese Filter dann nicht in Me.Filter drin stehen. Weißt Du wie ich meine?
Gruß Steffen
-
martes, 28 de febrero de 2012 2:28
Hallo Steffen
Wieso steht der Filter nicht in Me.Filter drin? Wenn das Formular gefiltert wird, selbst über den formularbasierenden Filter, wird dieser Filter immer in Me.Filter abgelegt und kann von dort ausgelesen werden.
In Deinem Fall müsstest Du dann einfach diesen Filter dem Report ebenfalls übergeben, falls Me.FilterOn True ist.
Aber aufgepasst: rsReport.Name beinhaltet nur die ersten 255 Zeichen des SQL Statements, das dem Recordset zu Grunde liegt. Du müsstest hier also noch ein bisschen was einbauen, falls da mal eine längere Query als Basis für das Formular verwendet wird, damit hier eine Fehlermeldung kommt.
Gruss
Henry
-
martes, 28 de febrero de 2012 9:30
Hallo Henry,
ich habe es jetzt so (wohl "klassisch") gemacht:
Dim filterReport As String
filterReport = Forms![Fo_Tab01_LV-3_00a].Filter
DoCmd.OpenReport "Be01_GA-RTF", acViewPreview, , filterReportund im Report:
Me.FilterOn = TrueSchade zwar, dass der Report nicht eine rsclone annehmen kann und ich da jetzt wieder die Quelle im Report angeben muss (sollte für weitere Reportplanungen ohne Quelle sein), egal: Hauptsache es funktioniert erst mal.
Ich danke Dir und Josef. Gruß Steffen
-
martes, 28 de febrero de 2012 12:47
Hallo!
Falls du den Bericht mit unterschiedlichen Quellen (nicht nur unterschiedliche Filter) verwenden willst, könntest du überlegen, ob du den Bericht fix auf eine Abfrage einstellst und diese Abfrage vor dem Aufruf anpasst.
mfg
JosefCode-Bibliothek für Access-Entwickler
AccUnit - Testen von Access-Anwendungen
Virtueller Access-Stammtisch -
martes, 28 de febrero de 2012 16:19
Josef, danke für Deinen Tipp zur Abfrage.
Noch kurz, weil es dazu passt:
OpenReport funktioniert mit dem Fo-Filter.
Ist es möglich auch OutputReport diesen Fo-Filter 'irgendwie' mitzugeben?DoCmd.OutputTo acOutputReport, "Be01_GA-RTF", "RichTextFormat(*.rtf)", "", False, "", 0, acExportQualityScreen
Danke Euch - Gruß Steffen
-
martes, 28 de febrero de 2012 17:11
Hallo!
Wenn du zuvor den Bericht (z. B. unsichtbar) öffnest, sollte nur der gefilterte Datensatz verwendet werden.
OutputReportTo "repPersonen", "idPerson=" & Me!idPerson, "RichTextFormat(*.rtf)", "", False, "", 0, acExportQualityScreen
Mit:
Private Function OutputReportTo(ByVal ReportName As String, ByVal WhereCondition As String, _ Optional ByVal OutPutFormat As Variant, Optional OutputFile As Variant, _ Optional ByVal AutoStart As Variant, Optional ByVal TemplateFile As Variant, _ Optional ByVal Encoding As Variant, Optional ByVal OutputQuality As AcExportQuality) DoCmd.OpenReport ReportName, acViewPreview, , WhereCondition, acHidden DoCmd.OutputTo acOutputReport, ReportName, OutPutFormat, OutputFile, AutoStart, TemplateFile, Encoding, OutputQuality DoCmd.Close acReport, ReportName End Function
mfg
Josef
Code-Bibliothek für Access-Entwickler
AccUnit - Testen von Access-Anwendungen
Virtueller Access-Stammtisch- Editado Josef PötzlMVP martes, 28 de febrero de 2012 17:12
- Editado Josef PötzlMVP martes, 28 de febrero de 2012 17:12
- Editado Josef PötzlMVP martes, 28 de febrero de 2012 17:20
- Editado Josef PötzlMVP martes, 28 de febrero de 2012 17:21
- Editado Josef PötzlMVP martes, 28 de febrero de 2012 17:21
- Editado Josef PötzlMVP martes, 28 de febrero de 2012 17:22
- Editado Josef PötzlMVP martes, 28 de febrero de 2012 17:23
- Marcado como respuesta Steffen Brose jueves, 01 de marzo de 2012 11:33
-
jueves, 01 de marzo de 2012 11:25
Hallo Josef,
so:
filterReport = Forms![Fo_Tab01_LV-3_00a].Filter
DoCmd.OpenReport "Be01_GA-RTF", acViewPreview, "Ab01_LV", filterReport, acHidden
DoCmd.OutputTo acOutputReport, "Be01_GA-RTF", "RichTextFormat(*.rtf)", "", False, "", 0, acExportQualityScreen
DoCmd.Close acReport, "Be01_GA-RTF"funktioniert es. Ich danke Dir - Gruß Steffen
-
jueves, 01 de marzo de 2012 13:36
[OT]
Hallo!
Ich würde mir solche wiederverwendbaren Code-Abläufe in einer Hilfsprozedur ablegen.
OutputReportTo "repPersonen", "idPerson=" & Me!idPerson, "RichTextFormat(*.rtf)", "", False, "", 0, acExportQualityScreen
im restlichen Code ist für mich übersichtlicher als
filterReport = Forms![Fo_Tab01_LV-3_00a].Filter DoCmd.OpenReport "Be01_GA-RTF", acViewPreview, "Ab01_LV", filterReport, acHidden DoCmd.OutputTo acOutputReport, "Be01_GA-RTF", "RichTextFormat(*.rtf)", "", False, "", 0, acExportQualityScreen DoCmd.Close acReport, "Be01_GA-RTF"
mfg
Josef
Code-Bibliothek für Access-Entwickler
AccUnit - Testen von Access-Anwendungen
Virtueller Access-Stammtisch- Editado Josef PötzlMVP jueves, 01 de marzo de 2012 13:49
-
jueves, 01 de marzo de 2012 15:33
Hallo Josef, ich probier mal ob ich Deine OutputReportTo - Funktion hinbekomme.
Gruß Steffen
-
jueves, 01 de marzo de 2012 16:00
Hallo Josef, mit:
filterReport = Forms![Fo_Tab01_LV-3_00a].Filter
OutputReportTo "Be01_GA-RTF", filterReport, "RichTextFormat(*.rtf)", "", False, "", 0, acExportQualityScreenfunktioniert es 1A. Jetzt brauche ich anderer Stelle nur auswechseln und fertig ist. Funktionen müsste man 'könnnen'...
Danke Dir - Gruß Steffen
-
jueves, 01 de marzo de 2012 16:09
Hallo!
Noch etwas:
filterReport = Forms![Fo_Tab01_LV-3_00a].Filter
Wenn du das im Formular Fo_Tab01_LV-3_00a verwendest, würde ich Me.Filter schreiben, damit du das Formular auch einmal umbenennen oder als Unterformular verwenden kannst und dann nicht auch noch den Code umgestalten musst. Außerdem wäre es mit Me.Filter auch Mehr-Instanzen-fähig.
mfg
JosefPS: Bitte nicht meine Vorschläge zur Codeänderung nicht als Nörgelei von funktionierenden Code verstehen. Ich bin nur ein Freund von Code, der keine Kommentare benötigt, weil der Code selbst alles zeigt, was man zum Verstehen benötigt.
... Nicht umsonst freue ich mich immer wieder, wenn beim Live-Meeting das Thema "Code-Optimierung" - oder wie beim nächsten LM eventuell das Thema "VBA-Code-Inspector" (Tool von Thomas Möller) am Programm steht. ... diese Schleichwerbung musste einfach sein. :-)Code-Bibliothek für Access-Entwickler
AccUnit - Testen von Access-Anwendungen
Virtueller Access-Stammtisch -
sábado, 03 de marzo de 2012 11:52
Hallo Josef,
mit dem Teil - steht jetzt im Fo -:
Private Sub Befehl67_Click()
filterReport = Me.Filter
OutputReportTo "Be01_GA-RTF", filterReport, "RichTextFormat(*.rtf)", "", True, "", 0, acExportQualityScreen
End Sub- funktioniert es wie gewünscht. Ich danke Dir.
Der Hintergrund der ganzen Aktion ist:
Für die Weitergabe von Ergebnissen aus einer A-DB ist sehr praktisch, zusätzlich zum pdf-Report ein Wordfile mitzugeben. So kann der Empfänger - wenn er denn muss/möchte - hier noch etwas einfügen (Überschriften, Kommentare etc.)... oder was immer er noch gedenkt zu tun.
In der selbigen Art für zahlenlastige Reports - je nach Bedarf - dann auch neben dem pdf-Report ein Excelfile (mittels rs-Export a'la AEK9 von Michael).
Zurück zu Word: Das nächste Thema ist da eben noch (meine Anfrage hast Du ja mit Sicherheit auch gelesen), dass das rtf-Teil zum Beispiel Seitenumbrüche einsetzt und jede Textzeile (in Access ist die Quelle ein Memo ohne Zeilenumbrüche) mit einem Zeilenumbruch bestückt.
Dies lässt sich wohl auch nicht so einfach umgehen. Mein nächster Ansatz: Nach der rtf-Fertigstellung aus Access heraus das rtf 'bereinigen'. Deine Meinung zu diesem 'Ansatz'?Gruß Steffen
Dein P.S.: Josef, ich und Andere - die dieses Thema evtl. auch interessiert - haben zu danken -, nicht umgekehrt... -
sábado, 03 de marzo de 2012 12:21
Hallo!
Beim letzten Code-Beispiel fehlt mir die Variablendeklaration von filterReport. Ich würde in den VBA-Optionen die Einstellung "Variablendeklaration erforderlich" verwenden, damit bei neuen Code-Modulen automatisch "Option Explictit" im Modulkopf eingefügt wird.
mfg
Josef
Code-Bibliothek für Access-Entwickler
AccUnit - Testen von Access-Anwendungen
Virtueller Access-Stammtisch- Editado Josef PötzlMVP sábado, 03 de marzo de 2012 12:21

