PDA

View Full Version : DDS Feldname ermitteln



Seiten : [1] 2

pwrdwnsys
03-09-06, 18:10
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

jajonowak
04-09-06, 08:30
hallo pwrdwnsys

guck mal die datenbank: qsys/qadbifld

lg
hans-joachim

kuempi von stein
04-09-06, 08:52
und dann war da doch noch die qsys2/systables

k.

jajonowak
04-09-06, 09:07
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

KM
04-09-06, 11:54
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

pwrdwnsys
04-09-06, 22:20
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".

Fuerchau
05-09-06, 08:29
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.

Fuerchau
05-09-06, 12:25
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).

KM
05-09-06, 12:54
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

Fuerchau
05-09-06, 13:04
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 !!!