# Parameterabfrage Ireport



## Carsa (18. Feb 2009)

Hallo. Ich hab mal wieder ein Problem mit Ireport. Und zwar hab ich eine Abfrage mit 2 Parametern. Nun soll nicht unbegingt einer von den parameter abgefragt werden. Kann also leer bleiben. Hier mal meine SQL Abfrage mit Parametern.

SELECT VC_I_RW_RECEIPE_EQUIPMENT.RE_NAME, VC_I_RW_RECEIPE_EQUIPMENT.EQ_NAME, VC_I_RW_RECEIPE_EQUIPMENT.RE_PRIORITY
FROM VC_I_RW_RECEIPE_EQUIPMENT
where VC_I_RW_RECEIPE_EQUIPMENT.RE_NAME = $P{Rezept}  
and VC_I_RW_RECEIPE_EQUIPMENT.EQ_NAME = $P{Betriebsmittel} 
order BY VC_I_RW_RECEIPE_EQUIPMENT.RE_NAME, VC_I_RW_RECEIPE_EQUIPMENT.EQ_NAME, 
VC_I_RW_RECEIPE_EQUIPMENT.RE_PRIORITY;

Was muß ich also tun, das ich das hinbekomme.
Danke schon mal für eure mühe.
LG
Carsa


----------



## SlaterB (18. Feb 2009)

na dann ändere die DB-Anfrage?

falls du für alle denkbaren Konstellationen nur eine DB-Anfrage haben willst (was du verschweigst..)
dann bietet sich als Trick folgendes Konstrukt an:
where (a = ?1 or 1 = ?2) and (b = ?3 or 1 = ?4)

sind Parameter für a und b vorhanden, so werden diese normal übergeben und für ?2 und ?4 z.B. der Wert 2,
soll die a-Bedingung nicht berücksichtigt werden, dann für ?1 irgendwas übergeben und ?2 auf 1 setzen


----------



## Carsa (18. Feb 2009)

Hi SlaterB, ich würde dir doch nie was verschweigen  Aber danke dir erstmal für die Antwort. Also meine Abfrage funktioniert ja soweit mit den Parametern $P{Rezept} und $P{Betriebsmittel}. Nur frage ich mich wo ich bei deiner Lösung die Spaltennamen und wo die Parameter einsetze. Bist du so gut und hilfst mir auf die sprünge. 

Also ich hab das grad mal mit Access gemacht. Das funktioniert auch.

SELECT VC_I_RW_RECEIPE_EQUIPMENT.RE_NAME, VC_I_RW_RECEIPE_EQUIPMENT.EQ_NAME, VC_I_RW_RECEIPE_EQUIPMENT.RE_PRIORITY
FROM VC_I_RW_RECEIPE_EQUIPMENT
WHERE ((([VC_I_RW_RECEIPE_EQUIPMENT.RE_NAME]) Like [Rezept] & "*") 
AND ((VC_I_RW_RECEIPE_EQUIPMENT.EQ_NAME) Like [Betriebsmittel] & "*"))
GROUP BY VC_I_RW_RECEIPE_EQUIPMENT.RE_NAME, VC_I_RW_RECEIPE_EQUIPMENT.EQ_NAME, VC_I_RW_RECEIPE_EQUIPMENT.RE_PRIORITY;

Nur kann Ireport mit der Abfrage nicht anfangen :-(

Danke
Carsa


----------



## SlaterB (18. Feb 2009)

was IReport an Parametern erlaubt und ob das richtiges SQL ist, kann ich nicht sagen,
ein einfach "OR (1 = noch ein Parameter)" kann doch aber nicht so schwer sein, falls grudsätzlich erlaubt

was du nun mit Access, Like, & und "*" vorhast, kann ich nicht nachvollziehen


----------



## Carsa (18. Feb 2009)

In Access hab ich das nur mal ausprobiert. Da ich da ja auch mit Bedingungen arbeiten kann. Mach ich die Abfrage mit where und or dann gehts ja auch mit nur einem Parameter. Nur spuckt er mir dann bei angabe von 2 Parametern völlig falsche werte aus. Kannst du mir vielleicht in meine Abfrage was einbauen? 

SELECT VC_I_RW_RECEIPE_EQUIPMENT.RE_NAME, VC_I_RW_RECEIPE_EQUIPMENT.EQ_NAME, VC_I_RW_RECEIPE_EQUIPMENT.RE_PRIORITY
FROM VC_I_RW_RECEIPE_EQUIPMENT
where VC_I_RW_RECEIPE_EQUIPMENT.RE_NAME = $P{Rezept} 
or VC_I_RW_RECEIPE_EQUIPMENT.EQ_NAME = $P{Betriebsmittel} 
order BY VC_I_RW_RECEIPE_EQUIPMENT.RE_NAME, VC_I_RW_RECEIPE_EQUIPMENT.EQ_NAME, 
VC_I_RW_RECEIPE_EQUIPMENT.RE_PRIORITY;

Danke
Carsa


----------



## SlaterB (18. Feb 2009)

diese Anfrage entspricht nicht dem Original, da ist ein OR statt AND, entscheidender Unterschied

aufs Original bezogen:

where (VC_I_RW_RECEIPE_EQUIPMENT.RE_NAME = $P{Rezept} or 1 = $P{Dummy1})
and (VC_I_RW_RECEIPE_EQUIPMENT.EQ_NAME = $P{Betriebsmittel} or 1 = $P{Dummy2})

ohne irgendwas der verwendeten Syntax zu kennen,
aber was war daran denn schwer? einfach nur or .. zu jedem Argument dazu,
ist doch simpelst-einfach aus meinem ersten Post abzuleiten?!

obs funktioniert, ist natürlich eine andere Frage


----------



## Carsa (18. Feb 2009)

Das mit dem OR statt AND ist schon klar. Leider funktioniert das so nicht wie du es jetzt beschrieben hast. Naja, muß ich noch mal nen paar sachen ausprobieren. Danke dir jedenfalls für deine mühe.

Carsa


----------



## Carsa (19. Feb 2009)

Moin SlaterB. Also ich hab gestern noch als rumprobiert. Leider kam ich zu keinem Erfolg. Vielleicht fällt dir ja noch was ein.

Carsa


----------



## SlaterB (19. Feb 2009)

ich habe kein IReport zum testen (was dann auch recht aufwendig wäre) 
und bekomme von dir keinerlei Rückmeldung, inwiefern das nicht klappen könnte
(du verschweigst wieder was  )


----------



## Carsa (19. Feb 2009)

Ja, ich bin sehr verschwiegen  Aber hast recht, hätte mal nen bissl mehr schreiben können. Gut, fangen wir noch mal an. Wenn ich das jetzt so mache wie von dir vorgeschlagen,

where (VC_I_RW_RECEIPE_EQUIPMENT.RE_NAME = $P{Rezept} or 1 = $P{Dummy1})
and (VC_I_RW_RECEIPE_EQUIPMENT.EQ_NAME = $P{Betriebsmittel} or 1 = $P{Dummy2})

muß ich ja erstmal 2 neue Parameter "Dummy1" und "Dummy2" anlegen was ja kein Thema ist. Es soll hinterher ja so funktionieren.

1. Eingabe Rezeptnummer, eingabe Betriebsmittel = nur Betriebsmittel mit dem Rezept
2. Eingabe Rezeptnummer, keine eingabe Betriebsmittel = alle Betriebsmittel auf dem das rezept laufen kann
3. keine eingabe Rezeptnummer, Eingabe Betriebsmittel = alle Rezepte die die zu dem Betriebsmittel gehören.

Mach ich das dann wie von dir beschrieben, kommt immer der 1. fall raus.

Hoffe ich hab nicht wieder was verschwiegen ;-)

Carsa


----------



## SlaterB (19. Feb 2009)

aber die Logik durch die or-Verknüpfung ist dir schon verständlich oder?
hast du bei 2. und 3. denn auch richtige Dummy-Werte gewählt? (anders als bei 1.!)

> kommt immer der 1. fall raus.

wie kann bei 2. mit 'keine eingabe Betriebsmittel' das von 1. rauskommen wo Betriebsmittel angegeben ist,
dann muss bei dem Ergebnis zu 2. ja ein bestimmtes Betriebsmittel herauskommen, welches ist das, das der letzen 1.-Anfrage?, zufällig gewählt?

---

teste eine derartige Anfrage am besten direkt in SQL in einem normalen Datenbank-Client,
wenn IReport aus einer korrekten SQL-Anfrage nichts gutes liefert, dann habe ich dazu keine Antwort


----------



## Carsa (25. Feb 2009)

Moin Slater. Sorry das ich mich erst heute melde. Das mit der or-verknüpfung habe ich verstanden. Aber leider komm ich nicht zu dem gewünschten ergebnis. Man kann ja bei Ireport dem Parameter auch einen Defaultwert zu weisen. Aber da steh ich auch grad auf dem Schlauch. Hast du da nen tipp für mich. 

Danke
Carsa


----------



## SlaterB (25. Feb 2009)

ich sehe keinen Zusammenhang zwischen der Möglichkeit eines Defaultwertes und dem Nichtgelingen der Anfrage,
auch sonst ist mir keine Fehlermöglichkeit ersichtlich,

übergib zu jedem Zeitpunkt die 4 korrekten Parameter und es müsste die korrekte Query herauskommen,
falls du vermutest, dass Ireport, was immer das auch ist, dort noch dazwischenfunkt, bietet sich zur Überprüfung ein Log in der Datenbank an,
sofern vorhanden

Code der relevanten Stellen (Definition, Befüllung) kann auch nicht schaden

-----

das ganze war von Anfang an auch nur eine denkbare Idee, du musst es ja nicht so machen 
(ich kann allerdings keine andere nennen)


----------

