[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jul 2005
    Beiträge
    232

    DDS Feldname ermitteln

    Hallo @all,

    ich stehe vor dem problem, das ich beim Zugriff von einem PC über JDBC den ursprünglichen DDS-Feldnamen benötige. SQL liefert in den Metadaten ja nur den Aliasnamen. 2 Tage Suche waren ohne Erfolg. Da die Zeit drängt, habe ich eine Interimslösung gebastelt, indem ich mit über einen Befehl beim Zugriff mit "DSPFFD" die Beschreibung in eine Datei ausgebe und diese dann lese. Das dies nicht besonders performant und elegant ist dürfte auf der Hand liegen. Hat jemand eine bessere Lösung ?

    THX für Tips.
    Karsten
    __________________________________
    -An eye for an eye leaves the whole world blind- -Mahatma Ghandi-

  2. #2
    Registriert seit
    Jul 2002
    Beiträge
    218

    systemfile

    hallo pwrdwnsys

    guck mal die datenbank: qsys/qadbifld

    lg
    hans-joachim

  3. #3
    Registriert seit
    Aug 2004
    Beiträge
    923
    und dann war da doch noch die qsys2/systables

    k.

  4. #4
    Registriert seit
    Jul 2002
    Beiträge
    218
    hallo k v s

    das ist eine sicht der db: qadbxref

    aber da stehen nur die file-namen, nicht die feld-namen


    übrigens kann man aus den qadb.... ´ne menge info´s herausholen z.b. keyfelder, alle lf´s einer pf usw.


    lg
    hans-joachim

  5. #5
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Hallo Karsten,

    erweitere Deine Treiber-URL um die Option "extended metadata=true". Dann bekommst Du mit der Methode getColumnLabel den Feldnamen. Das hört sich zwar seltsam an, ist aber so.

    Gruß,
    KM

  6. #6
    Registriert seit
    Jul 2005
    Beiträge
    232
    Zitat Zitat von KM
    Hallo Karsten,

    erweitere Deine Treiber-URL um die Option "extended metadata=true". Dann bekommst Du mit der Methode getColumnLabel den Feldnamen. Das hört sich zwar seltsam an, ist aber so.

    Gruß,
    KM
    Hallo KM,

    das funktioniert nicht. Bekomme immer, in beiden Fällen den Wert aus "COLHDG". Ich setze V5R4 ein, zusammen mit dem mitgelieferten jt400. Habe hier im Forum auch einen anderen Beitrag gefunden, das sich mit dem Thema befasst. Dort wurde das als "Bug" bezeichnet. Vielleicht ist der mittlerweile draußen und es gilt nicht mehr das IBM-Motto "It's not a Bug, it's a feature".
    __________________________________
    -An eye for an eye leaves the whole world blind- -Mahatma Ghandi-

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Aus SQL-Sicht gilt ja auch der Alias-Name (langer Feldname), da der kurze Name ja generiert wurde.
    Um auf die Original-Namen zu kommen musst du auf die QSYS.QADBXFLD gehen.
    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

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Korrektur: QADBIFLD
    Allerdings fehlt da ggf. die Public-Berechtigung für den Zugriff.

    Die Korrekte Tabelle für SQL ist die QSYS2.SYSCOLUMNS !
    Diese enthält den kurzen und auch langen Namen.

    Allerdings sind diese Infos nicht per Metadaten abfragbar sondern müssen per eigenem SQL gelesen werden.

    Achtung:
    Je nach Treiberversion können Abfragen auf SYSCOLUMNS als Metadaten-Abfrage interpretiert werden, so dass das Resultset ggf. abweichende Feldnamen enthält als man im SQL-Statement benannt hat (aus NAME wird z.B. COLUMN_NAME).
    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

  9. #9
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Hallo Karsten,

    wenn Du sowohl ALIAS als auch COLHDG verwendest, hast Du wohl schlechte Karten.

    Die Methode getColumnLabel ermittelt nämlich den Wert von COLHDG und die Methode getColumnName den Wert von ALIAS.

    Wenn Du auf COLHDG verzichten könntest, würde getColumnLabel den Feldnamen ermitteln. Und wenn Du auf ALIAS verzichten könntest, würde getColumnName den Feldnamen ermitteln.

    An dieser Stelle ist der JDBC-Treiber wirklich noch verbesserungswürdig.

    Gruß,
    KM

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Vorsicht !

    COLHDG hat mit NAME und ALIAS überhaupt nichts zu tun.

    Beim CREATE TABLE wird sowohl der Name asl auch der ALIAS gesetzt. COLHDG bekommt erst mal den ALIAS-Namen und kann mittels LABEL ON geändert werden.

    COLHDG spiegelt also in keinster Weise den langen Namen wieder sondern nur die zu verwendende Überschrift.

    Der JDBC-Treiber verhält sich da vollkommen korrekt !!!
    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

  11. #11
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Das mag für SQL-DDL beschriebene Tabellen durchaus zutreffen. Da das hier aber nicht gefragt war, sondern es sich laut Karsten um DDS handelt, verhalten sich die Methoden getColumnName und getColumnLabel so wie ich es oben beschrieben habe, je nach Vorkommen der Schlüsselwörter ALIAS bzw. COLHDG.

    Gruß,
    KM

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das ist unerheblich für SQL oder DDS, da ich ähnliches in beiden erreichen kann.

    In DDS definiere ich den 10-stelligen Namen.
    Tue ich nichts weiter, gilt dieser auch für SQL, COLHDG wird automatisch gesetzt.
    Mit ALIAS definiere ich den (ggf.) langen Namen. COLHDG wird nun automatisch mit dem ALIAS gefüllt.
    Nun kann ich noch zusätzlich auch COLHDG selber bestimmen !

    A MYFIELD 30 ALIAS('MySQL-Field')
    COLHDG('Zeile 1' 'Zeile 2' 'Zeile 3)

    Mit SQL kann ich nun sowohl auf MYFIELD als auch auf "MySQL-Field" zugreifen (beachte die Anführungszeichen).

    getColumnName liefert immer "MySQL-Field"
    getColumnLabel liefert immer "Zeile 1 Zeile 2 Zeile 3"

    In SQL muss ich

    "MySql-Field" FOR COLUMN MYSQLFLD

    definieren. Mit
    LABEL ON COLUMN FILE (MYSQLFLD IS 'Zeile 1')

    wird dann die Überschrift definiert.

    Fazit:
    ALIAS und COLHDG können GLEICHZEITIG verwendet werden.
    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

Similar Threads

  1. PAGRTT aus Printer-File ermitteln
    By MatthiasK in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 10-01-07, 13:26
  2. Programmbibliothek in einem Cobol oder CL Programm ermitteln
    By schatte in forum NEWSboard Programmierung
    Antworten: 19
    Letzter Beitrag: 10-01-07, 11:32
  3. DDS in ILE RPG
    By Squall in forum IBM i Hauptforum
    Antworten: 82
    Letzter Beitrag: 19-10-06, 15:37
  4. DDS Font, was verbirgt sich hinter der Nummer?
    By ExAzubi in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 18-07-06, 09:31
  5. SQL Select mit SUM aus einer DB
    By JonnyRico in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 30-03-06, 12:33

Berechtigungen

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