[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jul 2002
    Beiträge
    331

    Question Bibliotheksnamen Variable im Query einbauen?

    Moinsen,

    ich hab da mal ´ne Frage: Ich habe gehört,
    das man Bibliotheksnamen in einem Query auch als Variable übergeben kann.
    Stimmt das und wenn ja, wie? Da wir viele Kunden haben, mit verschiedenen Datenbibliotheken, müssen wir die Querys immer anpassen, was bei bei 2-3 ja noch kein Aufwand ist, aber bei fast 100?!
    Schönen Dank im Voraus.

  2. #2
    hs is offline [professional_User]
    Registriert seit
    Jun 2001
    Beiträge
    364

    Smile

    so sieht das CL aus:

    PGM PARM(&BIBLIOTHEK)
    DCL VAR(&BIBLIOTHEK) TYPE(*CHAR) LEN(10)
    RUNQRY QRY(QRYBIB/MEINEQRY) +
    QRYFILE((&BIBLIOTHEK/DATEI))
    ENDPGM

    Aufruf des CL-Programms:

    CALL MEINPROG 'MEINEBIB'

    Gruß
    HS

  3. #3
    Registriert seit
    Jul 2001
    Beiträge
    177

    Post

    Helau!

    Folgende Lösungen bieten sich an:

    1. Beim Runqry die Datei (MIT BIBLIOTHEK) mitgeben.

    2. Per OVRDBF vor dem RUNQRY die Datei(en) "umlenken".

    Problem bei beiden Lösungen ist, daß man für jedes Query eine besondere Routine schreiben muß....

    Grüße

    Andreas Göring

    BTW: Wer viel mit Query arbeitet sollte sich mal unseren **QueryOptimizer** ansehen: http://www.goering.de/deu/qopti.html
    Hier ist ein CMD integriert, der den OVRDBF erheblich erleichtern kann.

    [Dieser Beitrag wurde von andigoering am 04. März 2003 editiert.]

  4. #4
    Registriert seit
    Nov 2002
    Beiträge
    173

    Post

    Hallöchen!

    Wie meine beiden Vorredner schon sagten ist das zwar möglich, das Query mittels RUNQRY und/oder OVRDBF flexibel auszuführen, was Du dir aber immer vor Augen halten solltest ist der Anpassungsaufwand:

    Änderst Du das Query, so daß sich die Reihenfolge der Dateien ändert fällst Du auf die Nase, gleiches gilt wenn Du eine Datei hinzufügst oder entfernst.

    Ich habe leidvolle Erfahrungen damit gemacht, wir sind mittlerweile dazu übergegangen, die meisten Queries auf QM-Query umzuschreiben, was den weiteren Vorteil bietet, daß man volle SQL-Syntax nutzen kann. Das erspart einem z.B. die Bildung des kartesischen Produktes bei Verknüpfung mit *ALL in Query/400 wenn die Schlüsselfelder mal von der Definition nicht zusammenpassen sollten (ist bei sauberem Design nicht der Fall, kommt aber in den besten Familien vor :-).

    Grüße

    Martin

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.243

    Post

    Das ganze etwas variabler zu gestalten geht nur mit etwas Hilfe:

    In diesem Beitrag: http://www.as400-forum.de/ubb/Forum1/HTML/000170.html

    ist die Quelle eines MI-Programmes enthalten, dass die verwendeten Dateien eines Queries ausliest.
    Diese Liste kann dann in einem CLP bearbeitet werden, so dass alle Dateien über RTVOBJD ... RTNLIB(&LIB) und anschließendem OVRDBF umgeleitet werden können.
    Die Dateien sollten natürlich in der aktuellen Bibliotheksliste zu finden sein, so dass, je nach Umgebung mit den entsprechenden Dateien gearbeitet werden kann.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Dec 2000
    Beiträge
    281

    Cool

    Guten Morgen
    Verschiedene Bibliotheken bedeutet doch auch normalerweise verschiedene Anwendungen.
    also warum nicht mittels CL Programm die Bibliotheksliste temporär umstellen. und im QRY mit *lib/Datei arbeiten.

    Ich mach das etwa so

    /* * ERSETZEN DER BIBLITHEKSLISTE UND NACH PROGRAMMAUFRUF ** */
    /* * WIEDER IN DEN ALTEN ZUSTAND SETZEN ** */
    DCL VAR(&LIBL) TYPE(*CHAR) LEN(275)
    DCL VAR(&LIBLALT) TYPE(*CHAR) LEN(289)
    RTVJOBA USRLIBL(&LIBL)


    dann CHGLIBL

    dann

    /* * HIER WIRD DIE ALTE BIBLIOTHEKSLISTE WIEDER EINGESETZT ** */
    /* * MIT HILFE VON QCMDEXC ** */
    CHGVAR %SST(&LIBLALT 1 8) VALUE('CHGLIBL ')
    CHGVAR %SST(&LIBLALT 9 5) VALUE('LIBL(')
    CHGVAR %SST(&LIBLALT 14 275) VALUE(&LIBL)
    CHGVAR %SST(&LIBLALT 289 1) VALUE(')')
    CALL PGM(QCMDEXC) PARM(&LIBLALT 289)
    Programmierung

  7. #7
    Registriert seit
    Jul 2001
    Beiträge
    177

    Post

    Guten Morgen "K_tippi"!

    Das mit der LIBL ist ja eine prima Sache....

    Jedoch: Bei Query erreichst Du damit NICHTS.

    Sobald Du bei der Dateiauswahl Datenfreigabe drückst wird aus *LIBL die tatsächliche Bibliothek..

    Es bleibt nur der Weg wie beschrieben....

    Wer es komfotabler möchte dem sei der QueryOptimizer bei http://www.goering.de empfohlen.

    Einen schönen Tag wünscht

    Andreas Göring

  8. #8
    Registriert seit
    Jun 2001
    Beiträge
    727

    Post

    Hallo Andreas,

    soweit ich das verstehe geht es nicht um die Dateinangaben im WRKQRY sondern um den Parameter QRYFile im RUNQRY, also z.B.

    RUNQRY QRY(TESTQRY)
    QRYFILE((*LIBL/TESTFILE))

    Sven

  9. #9
    Registriert seit
    Mar 2003
    Beiträge
    80
    So ein Zufall.
    Ich habe vorgestern eine Lösung programmiert:

    Mit RTVQMQRY SQL-Anweisungen ausgeben
    Mit kleinem RPG Dateinamen auslesen und
    String (File1)(File2)... an CL-Programm zurückgeben.
    Dort RUNQRY QRYFILE(&QRYFILE) ausführen

Similar Threads

  1. QueryManager / Query ---> Aufruf mit Variablen
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 29-11-06, 18:07
  2. Variable Zahlenkonvertieren
    By Xanas in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 28-08-06, 12:21
  3. Query Manager -_-
    By Azubiiiiii in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 03-08-06, 09:44
  4. String mit HexInhalt muss als Hex-Wert in Variable
    By cheffe1008 in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 16-05-06, 07:45
  5. Query und Datum
    By Hubert Brethauer in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 05-05-06, 12:37

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •