Fraggla Geschrieben 16. August 2012 Geschrieben 16. August 2012 Hey, ich benutze hier Crystal Reports 2008 und als Distributions-Platform Business Objects (SAP). Ich würde gerne einen SQL Parameter abfragen, bevor auf die Datenbank zugegriffen wird, als Pre-Selektion. Anschließend läuft ja die SQL Abfrage, worauf die kaskadetischen Parameter zur Selektierung zugreifen. Das Problem hierbei ist, wenn ich z.B einen Bericht zu einem Artikel in einer bestimmen Saison abrufe, wird derzeit die Datenbank nicht vorselektiert, d.h größere Datenmengen als nötig werden abgerufen. Wenn ich dies nun aber in Crystal Reports so aufbaue, dass ich im SQL die Where Bedingung per Parameter z.b auf VSAS = 21 setzte (Abfrage bei Neugenerierung des Berichts), kommt nach dem ersten Parameterprompt noch ein 2ter Promt (für die kaskadetischen Parameter), die jedoch wieder die Verkaufssaison abfragen (und den Wert hierfür zurücksetzten) zusammen mit den anderen Parameter (Artikelnummer, Farbnummern, etc.) TL;DR: Bericht so gestalten, dass die erste Abfrage den SQL eingrenzt und die 2te Abfrage nur auf dem Resultat der ersten aufbaut. Zitieren
flashpixx Geschrieben 16. August 2012 Geschrieben 16. August 2012 Sorry, aber ich verstehe das Problem nicht. In der Routine in der CR aufgerufen wird, werden an den Report Parameter mitgegeben ggf auch die Datenbankverbindung, d.h. ich kann das ganz flexibel steuern. Der Prompt kommt nur, wenn ein Parameter nicht gesetzt wurde Zitieren
Fraggla Geschrieben 16. August 2012 Autor Geschrieben 16. August 2012 (bearbeitet) Problem: Im SQL-Teil WHERE VSAS = {?PVSAS} Im Bericht: {Befehl.MANR} = {?Mein Parameter - MANR} and {Befehl.MSAS} = {?Mein Parameter - MSAS} Wenn ich nun den Bericht neugeneriere, fragt er logischerweise zu erst nach VSAS und dann sollte er nach MANR und MSAS fragen. Stattdessen fragt er nach VSAS, dann nochmal nach VSAS (und ignoriert die erste eingabe) und gleichzeitig nach MANR + MSAS. D.h die erste Parameterangabe ignoriert er komplett. Bei 3,5 Mrd. Datensätze ein wenig ätzend, deswegen möchte ich ja die Preselection um die Daten vorher schon zu reduzieren. So wies im moment läuft, geht er egal was kommt durch die 3,5 mrd datensätze durch. Bearbeitet 16. August 2012 von Fraggla Zitieren
flashpixx Geschrieben 16. August 2012 Geschrieben 16. August 2012 Bist Du Dir sicher, dass die Parameter auch korrekt übergeben werden? Wenn er nach VSAS fragt, dann würde das heißen, dass der Parameter nicht aus der aufrufenden Routine gesetzt wurde. Soweit ich mich erinnere sieht der Aufruf in etwa so aus cr = createobject("CrytalReport.Report") cr.setReport("rpt-datei") cr.setDatabase("....") cr.setParameter(1, what-ever) cr.setParameter(2, what-ever) cr.setParameter(3, what-ever) cr.view() Das Problem sieht für mich nicht nach einem Fehler des Reports aus, sondern der Routine, die den Report aufruft. Zitieren
Fraggla Geschrieben 16. August 2012 Autor Geschrieben 16. August 2012 Ja die Parameter werden richtig übergeben: Bei der ersten Abfrage nach der VSAS habe ich als Test nun 31 angegeben. Bei der 2ten frägt er dann aber nochmal nach der VSAS und tut sie mit der 21 vorbesetzten. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.