-
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-
-
systemfile
hallo pwrdwnsys
guck mal die datenbank: qsys/qadbifld
lg
hans-joachim
-
und dann war da doch noch die qsys2/systables
k.
-
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
-
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
-
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-
-
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.
-
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).
-
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
-
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 !!!
-
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
-
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.
Similar Threads
-
By MatthiasK in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 10-01-07, 13:26
-
By schatte in forum NEWSboard Programmierung
Antworten: 19
Letzter Beitrag: 10-01-07, 11:32
-
By Squall in forum IBM i Hauptforum
Antworten: 82
Letzter Beitrag: 19-10-06, 15:37
-
By ExAzubi in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 18-07-06, 09:31
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks