Anmelden

View Full Version : Speizielle Query Abfrage



Techniker
09-10-08, 14:48
Hallo die Damen!

ich habe mir ein mini CL gebastellt, welches per STRQMQRY eine Query definition ausführt. Das tolle daran ist, dass ich ein Variable mit in die Queryabfrage schicken kann. Klappt auch super.
Das CL sieht so aus:

PGM
DCL VAR(&EINGABE) TYPE(*CHAR) LEN(12) +
VALUE('ABCDEFGH')

DCL VAR(&FELD) TYPE(*CHAR) LEN(13)
CHGVAR VAR(&FELD) VALUE('''' *CAT &EINGABE +
*CAT '''')
STRQMQRY QMQRY(Bibliothek/QUERY) QMFORM(*QMQRY) +
ALWQRYDFN(*YES) SETVAR((CTRCV &FELD))

endpgm

In meinem Query habe ich unter "Sätze auswählen " folgendes eingetragen:

AND/OR Feld Test Wert

CTRCV EQ :CTRCV

OR CTAWC EQ :CTRCV

OR CTIBC EQ :CTRCV


klappt super.

Jetzt wollte ich das ganze etwas erweitern um auch nach Fragmenten in meinem PF zu suchen. Habe da an folgendes gedacht:

AND/OR Feld Test Wert

CTRCV LIKE :CTRCV

OR CTAWC LIKE :CTRCV

OR CTIBC LIKE :CTRCV


leider motzt die AS dann und sagt ich soll :CTRCV in Hochkommatas setzen. Aber das macht ja gar keinen sinn.

Manuell fünktioniert LIKE ja super, aber eben nicht mit einer Variablen.

Manuel und dann F5 sieht z.b. so aus:

AND/OR Feld Test Wert

CTRCV LIKE '______GH'

OR CTAWC LIKE '______GH'

OR CTIBC LIKE '______GH'

Gibt es einen TRick? Kann ich nur bei *EQ mit Variablen arbeiten?

MFG
Der Techniker

Fuerchau
09-10-08, 14:52
Du sollst den Inhalt in Hochkomma übergeben:

setvar(('''' *CAT &MYVAR *TCAT '''') (...))

Techniker
09-10-08, 15:01
Mein Problem bei der Umstellung von *EQ auf LIKE beginnt schon im QUERY.
Denn, wenn ich LIKE eingebe und dann :CTRCV , dann Motzt die AS und speichert mir die Veränderung nicht mal ab. Also denke ich mir das es wohl nicht geht. Ich meine LIKE und eine Variable. Oder doch?

Pikachu
09-10-08, 15:14
Das Mischen (http://publib.boulder.ibm.com/iseries/v5r1/ic2924/info/q400/rbaf9mst114.htm#HDRDEPCOL) geht bei Query/400 anscheinend nicht bei LIKE. Nimm' stattdessen besser eine Query Manger Query mit SQL.

Techniker
09-10-08, 16:06
Ähhhh, gib mir mal ein startpunkt. Ich meine nach was ich suchen kann!

Danke.

Pikachu
09-10-08, 16:57
STRQM und Auswahl 1. Mit "F19=Abfrageerstellungsmodus ändern" kannst du fürs Erstellen einer QM-Query zwischen PROMPT und SQL wechseln.

Deine Query/400 Abfrage kannst du aber auch mit RTVQMQRY ALWQRYDFN(*YES) auffinden und die QM-Query mit CRTQMQRY erstellen. Danach weiter mit STRQM und Auswahl 1.

Techniker
09-10-08, 17:32
Geil!

Daaaaanke!!!

Jetzt habe ich ein neues Spielzeug:) :) :)

Fuerchau
09-10-08, 18:35
Und ausserdem viel flexibler, da native SQL im Spiel ist.
Vorsicht allerdings mit QMForm's.
Die sind zwar ganz nett, bieten hier allerdings wieder weniger als Query!
QMForms sind amerikanisiert, insbesonders die Dezimalaufbereitung nach deutschem Muster ist nicht möglich.
Andererseits erlauben QMForms die Ausgabe von Ergebnissen in Kopf- und/oder Fusszeilen.

Jedem halt das seine...

Ich mach das meist so, dass ich per QMQRY die Daten selektiere (vor allem CTE's und eigene Join-Beziehungen, Casts, case, ...), das Ergebnis in eine Datei ausgebe und dann mit Query formatiere (ggf. Gruppenwechsel, Summen).

Techniker
10-10-08, 13:29
Ok, Danke.

Ein guter Tip.

Die hilfe von euch war wie immer goldwert!!!;)