Anmelden

View Full Version : QRY und PARAMeter



Seiten : 1 [2] 3

Sven Schneider
10-09-01, 20:35
Jetzt zum Thema :

1. Lösung (Query Manager)
- SQL-Source mit SEU erstellen
- die Abfrage muss Variablen enthalten z.B.
select * from QIWS/QCUSTCDT where state = &var1
- Die Abfrage mit CRTQMQRY erstellen
- Die Abfrage mit STRQMQRY ausführen
Wird kein Wert im Parameter SETVAR eingegeben, fragt OS/400 die Variablen der Reihe nach ab.

2. Lösung (Query/400)
Diese Lösung ist nur für einfache Abfragen
Sie stammt aus OV/400 Zeiten für Text-Merge.
- Query mit WRKQRY erstellen
- in "Sätze auswählen" z.B."STATE EQ :VAR1" eingeben. Abhängige Werte werden mit führendem ":" angegeben.
- in der nachfolgenden Maske "Qualifikationsmerkmale für abhängige Werte angeben" irgend etwas gültiges eingeben.
-Die Query/400-Abfrage mit STRQMQRY ausführen; der Parameter ALWQRYDFN(*YES) ist so zu setzen
Wird kein Wert im Parameter SETVAR eingegeben, fragt OS/400 die Variablen der Reihe nach ab.

Anmerkungen zum 2. Beispiel :
Intern erstellt der Query Manager aus dem *QRYDFN-Objekt eine SQL-Abfrage.
Die Umsetzung ist nicht immer korrekt.
(z.B. funktioniert kein "left outer join" bzw. "Mit Primärdatei gleiche Sätze", wenn mehrere Dateien verknüpft werden)
Am Besten ist es, wenn man mit dem Befehl RTVQMQRY (nicht vergessen ALWQRYDFN(*YES))
aus dem *QRYDFN-Objekt eine SQL-Source erstellt. Die abgeleitete Source entspricht dem was STRQMQRY ausführt.

Fazit:
Lösung 1 ist am flexiblesten und benötigt kein zusätzliches Lizenzprodukt.


[Dieser Beitrag wurde von Sven Schneider am 10. September 2001 editiert.]

chera
11-09-01, 14:41
Hallo Leute!

Ich habe diesen Artikel mit Spannung gelesen und gleich mal ausprobiert. Das mit den Parametern funktioniert bei mir nur interakiv(STRQM). Wenn ich einen Parameter an ein CL übergebe und im CL STRQYQRM aufrufe, erhalte ich folgende Fehlermeldung:
Operanden des Vergleichsoperators = nicht verträglich.
Befehl RUN für Objekt QUERY mit SQLCODE -401 fehlgeschlagen.
Der Parameter wurde richtig übergeben!
Hat einer von euch eine Idee

Vielen Dank im voraus
Chera

[Dieser Beitrag wurde von chera am 11. September 2001 editiert.]

Sven Schneider
11-09-01, 20:56
Für das oben angegebene Beispiel folgendes angeben :

STRQMQRY QMQRY(Queryname)
ALWQRYDFN(*YES)
SETVAR((STATE '''TX'''))

Also Strings immer in doppelte Hochkommas einbetten.

good luck
Sveb

Fuerchau
17-09-01, 09:09
Eine weitere Möglichkeit ist das von mir entwickelte Tool SQLCPY. Dieses Tool startet einen Query als ganz normalen CL-Befehl, der auch dynamisch zusammengesetzt werden kann.
Eine Vielzahl von zusätzlichen Optionen erlaubt das Auswählen beliebiger Dateien, Verknüpfungen (Join's), WHERE- und GROUP-Klauseln usw., mit der Möglichkeit auch neue Dateien zu erstellen.
Weiteres unter www.fuerchau.de (http://www.fuerchau.de)

Sven Schneider
17-09-01, 18:26
Oder man nutzt ein kostenloses Tool wie RUNSQL.

Referenz :
NEWS 3X/400, Aug. 1991, Fig. 2, pg. 132

Achtung : Es gab da nochmal eine Korrekur, da diese Version einen Fehler beim Zusammensetzen des SQL-String enthält.
Leider weis ich nicht mehr in welcher Ausgabe von NEWS/400.

oder

von Paul Conte gibt es auch ein Tool "Quick Query" von 1996 !!!
unter http://www.as400forum.de/news400/abo/down/tools/prog1.zip

Sven

[Dieser Beitrag wurde von Sven Schneider am 17. September 2001 editiert.]

HoScHiE
20-09-01, 12:06
Hallo,
zur Info an Alle und zur Bestätigung von Schreibr:
Wenn auf der Maschine Qry/400 ist dann ist auch automatisch QMQRY drauf.
Ich nur zur deppert ;-) es zu bedienen.

So nun möchte ich nochmal genau wissen,
wie mein SQL Statement aussehen muss wenn ich die Variable &FELDA aus dem CL and das QMQRY übergeben.

Beispiel:
Select * from Adresse where ADNO = &FELDA

Danke

COS
21-09-01, 12:21
> So nun möchte ich nochmal genau wissen, wie
> mein SQL Statement aussehen muss wenn ich
> die Variable &FELDA aus dem CL and das > QMQRY übergeben.

in der QMQRYSRC:
Select ..... where dateifeld = &FELDA

im CLP:
STRQMQRY QMQRY(xxxx) QMFORM(*QMQRY) +
SETVAR((FELDA &FELDA))

die erste Angabe ist der VariablenName im QMQRY (ohne &)
die zweite Angabe ist der VariablenName im CLP (mit &)

HTH

Fuerchau
21-09-01, 14:42
Wichtig beim SETVAR ist der Feldtyp. Obige version funktioniert nur bei numerischen Feldern. Alphawerte müssen in SQL in Hochkommata übergeben werden:

... SETVAR((FELDA ('''' *CAT &FELDA *CAT '''')))

HoScHiE
25-09-01, 07:48
Hallo,

ich habe es jetzt endlich mal geschafft und ein QMYQRY aus einer SQL Source erstellt.

Dspf erstellt(&VAR1), CL erstellt.

IM CL: STRQMQRY ..... bei QMFORM (geht nur *SYSDFT) aber im o.g. Beispiel *QMQRY, denke mal das er ein Form dafür hat.

Wenn ich das ganze jetzt starte und einen Wert im DSPF eingebe dann fragt OS/400 mich nach der Eingabe des Wertes ?
obwohl ich SETvar mit ('''' *CAT &VAR1 *CAT ...)
gemacht habe.

Woran liegts `?

Thx,
HoScHiE

HoScHiE
25-09-01, 10:09
Habe was gefunden ..

Mein SQL lautet."Select ... where FELD1(alpha) = &FELD1(alpha)

dann kommt trotzdem immer die Aufforderung einen Wert einzugeben.

wenn aber jetzt im SQL :FELD1 = '&FELD1' mache, dann kommt diese Aufforderung nicht mehr... aber es werden auch keine Datensätze ausgegeben = 0 DS.

Kann mir jemand mal sagen wie der SQL und SETVAR aussehen müssen wenn.

1. Dateifeld(Alpha) & &FELD(Alpha)
2. Dateifeld(num) & &FELD(Alpha)
3. Dateifeld(num) & &FELD(num)

Ich danke Euch.

HoScHiE