PDA

View Full Version : Queries



dino
30-07-07, 16:09
Ich habe eine recht umfangreiche Bibliothek mit Queries. Um bestimmte Queries bzw. speziell nach Satzselektionen suchen zu können, drucke ich die Queries (in mehere Steps aufgeteilt, da Auswahl "6" limitiert ist und packe die x-Spooldateien als Textdatei zusammen, um dann nach Konstanten usw. suchen zu können. Gibts es da eventuell etwas Eleganteres?

Fuerchau
30-07-07, 17:58
Nein, das ist schon der korrekte Weg.
Alles andere würde sich da auf MI-Ebene (ggf. als C-Funktionen) bewegen.

dino
31-07-07, 06:49
Danke für die Antwort; da ist die i-Series scheinbar etwas "schwach".

cbe
31-07-07, 09:00
Hallo dino,

noch eine Idee: Mit einem kleinen Progrämmchen, das für die QRY-Bibliotheken alle Objekte mit
DSPOBJD *ALL *QRYDFN OUTPUT(*OUTFILE)
ermittelt und die Quelle mit
RTVQMQRY QMQRY(lib/obj) SRCFILE(QRYSRC/lib) ALWQRYDFN(*YES)

herausgezogen hat.

Diese Quelldateien kann man dann rel. einfach mit den gängigen Suchbefehlen (25 oder FNDSTRPDM) verarbeiten.

Die Quelle dazu habe ich leider nicht mehr, ist ja aber eine nette Fingerübung...

Gruß
Christian

Spateneder
31-07-07, 16:58
Noch ein Vorschlag (wenn Du gern etwas zum Knabbern willst):
Das API QQQQRY mit der Option CHKQDT (Parameter 1) liefert alle Informationen über eine Query-Definition.
Dokumentation und Handhabung setzen aber eine gewisse Leidensfähigkeit voraus ;-)
Grüße
M. Spateneder

besen
01-08-07, 06:49
der Befehl RTVQMQRY findet aber nur Input-Files.

Ausgaben in eine Datei kann man somit nicht erkennen.

Gruß

Fuerchau
01-08-07, 15:32
Das ist der falsche Ansatz.
QM-Queries geben ihre DAten nicht selber aus sondern die Ausgabedatei wird beim STRQMQRY angegeben.

Die Ausgabedatei eines QRYDFN muss auch nicht stimmen, da sie beim RUNQRY geändert werden kann.

Michael Steibert
02-08-07, 15:25
Hallo dino,

ich hab ein Programm eingefügt, welches die Select-Kriterien
aus einem Query/400 - Objekt ausliest und in eine Outfile schreibt.
( funktioniert nur bis Systemwert QSECURITY <= 30 ).

Gruß
Michael


* Author:
* Michael Steibert
* Description:
* Auslesen Select-Kriterien aus Query/400-Objekt
* - erstelle Outfile in QTEMP (APPEND)
* - lese Query-Objekt (*QRYDFN) aus Parameterübergabe
* - Ausgabe Select-Kriterien
* Compile it with:
D*B CRTSQLRPGI GETSELECT
D*B+ COMMIT(*NONE)
D*B+ OBJTYPE(*PGM)
D*B+ DATFMT(*ISO)
D*B+ DBGVIEW(*SOURCE)
H BndDir('QC2LE') DftActGrp(*No) ActGrp(*Caller)
* Entry Parm
D getSelectCrit PR extpgm('GETSELECT')
D QueryLib 10A CONST
D QueryName 10A CONST
*
* resolve System Pointer
D rslvsp Pr * ProcPtr ExtProc( 'rslvsp' )
D ObjTyp 2a Value
D ObjNam * Value Options( *String )
D ObjLib * Value Options( *String )
D AutReq 2a Value
*
* set Space Pointer from Systempointer
D setsppfp Pr * ExtProc( 'setsppfp' )
D Object * Value ProcPtr
*
* set Spacepointer offset
D setsppo Pr * ExtProc( 'setsppo' )
D SpcPtr * Value
D Offset 10i 0 Value
*
* copy memory from address to address
D MemCpy Pr * ExtProc( 'memcpy' )
D pOutMem * Value
D pInpMem * Value
D iMemSiz 10u 0 Value
**
d createOutfile pr
d insertOutfile pr
**
d getSelectCrit pi
D QueryLib 10A CONST
D QueryName 10A CONST
**
** object pointer
D pQryObject s * ProcPtr
D pQryTemplate s *
D QryTemplate s 32767a Based( pQryTemplate )
**
** selection criteria
D SelCriHeader Ds inz qualified
D TotLen 10i 0 Inz
D 10i 0 Inz
D 10i 0 Inz
D 10i 0 Inz
D NbrCri 5i 0 Inz
D SelCriDetail Ds inz qualified
D Len 5i 0 Inz
D 10i 0 Inz
D 10i 0 Inz
D Operater 10i 0 Inz
D logicOperation 1a Overlay( Operater: 4 )
D Arg1 14a
D CompOpr 2a
D Arg2Lin 5i 0 Inz
D Arg2Len 5i 0 Inz
D Arg2Dta 4096a
**
** work variables
d offset s 5i 0
D i s 10i 0
**
/free
createOutfile();
pQryObject =
rslvsp( x'1911'
: %TrimR( QueryName )
: %TrimR( QueryLib )
: x'0000'
);
pQryTemplate = setsppfp( pQryObject );
pQryTemplate = setsppo( pQryTemplate: 94 ) ;
MemCpy( %Addr( offset )
: pQryTemplate
: %Size( offset )
) ;
pQryTemplate = setsppo( pQryTemplate: offset ) ;
MemCpy( %Addr( SelCriHeader )
: pQryTemplate
: %Size( SelCriHeader )
) ;
offset = offset + %Size( SelCriHeader ) ;
for i = 1 to SelCriHeader.NbrCri ;
pQryTemplate = setsppo( pQryTemplate: offset ) ;
MemCpy( %Addr( SelCriDetail )
: pQryTemplate
: 34
) ;
MemCpy( %Addr( SelCriDetail )
: pQryTemplate
: SelCriDetail.Len
) ;
insertOutfile();
offset = offset + SelCriDetail.Len ;
endfor;
return;
/end-free
/*-------------------------------------------------------------*/
P createOutfile b
d createOutfile pi
c/exec sql
c+ create table qtemp/selects
c+ ( qrylib CHAR(10) ccsid 273 not null default '',
c+ qryobj CHAR(10) ccsid 273 not null default '',
c+ logoper CHAR(03) ccsid 273 not null default '',
c+ arg1 CHAR(14) ccsid 273 not null default '',
c+ opr CHAR(02) ccsid 273 not null default '',
c+ arg2 CHAR(256) ccsid 273 not null default '' )
c/end-exec
/free
return;
/end-free
P createOutfile e
/*-------------------------------------------------------------*/
P insertOutfile b
d insertOutfile pi
d logicOperation s 3a
d arg2 s 256a
/free
if SelCriDetail.logicOperation = x'40';
logicOperation = 'AND';
elseif SelCriDetail.logicOperation = x'80';
logicOperation = 'OR';
else;
logicOperation = '';
endif;
arg2 = %subst( SelCriDetail.Arg2Dta : 1
: SelCriDetail.Arg2Len ) ;
/end-free
c/exec sql
c+ insert into qtemp/selects
c+ (qrylib, qryobj, logoper, arg1, opr, arg2)
c+ VALUES(:QueryLib,
c+ :QueryName,
c+ :logicOperation,
c+ :SelCriDetail.Arg1,
c+ :SelCriDetail.CompOpr,
c+ :Arg2 )
c/end-exec
/free
return;
/end-free
P insertOutfile e
/*-------------------------------------------------------------*/