Parameterabfrage Ireport

Status
Nicht offen für weitere Antworten.

Carsa

Mitglied
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
 
S

SlaterB

Gast
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

Mitglied
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
 
Zuletzt bearbeitet:
S

SlaterB

Gast
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

Mitglied
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
 
S

SlaterB

Gast
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

Mitglied
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

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

Carsa
 
S

SlaterB

Gast
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

Mitglied
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
 
S

SlaterB

Gast
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

Mitglied
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
 
S

SlaterB

Gast
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)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben