Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Crystal Reports] SQL-Parameter pre Kaskadetische Parameter

Empfohlene Antworten

Veröffentlicht

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.

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

  • Autor

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 von Fraggla

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.

  • Autor

Ja die Parameter werden richtig übergeben:

post-73020-14430449277727_thumb.png

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.

post-73020-14430449277368_thumb.png

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.