Entwickler-Ecke

Datenbanken - Table vom Feldnamen finden


Freiberger - Do 21.02.08 20:36
Titel: Table vom Feldnamen finden
Hallo,

ich habe eine beliebige SQL-Abfrage...( die von verschieden User kommen kann )

zB. SELECT A.name,B.*,C.name,A.ort,C.name
FROM Kunde A
LEFT JOIN Table2 B WHERE B.pos=A.pos
LEFT JOIN Mitarbeiter C WHERE C.nr =B.nr

Die daraus entsehend Tabelle hat das Problem, dass die Feldnamen sehr "Benutzerunfreundlich" sind.

In einer anderen Tabelle habe ich eine Übersetzung in einen verständlichen Text.
Ich kann also alle Feldnamen durchlaufen, TABLE & FIELDNAME filtern und erhalte daraus einen Text, den ich dirkt nach der Abfrage in Query.Fields[x].DisplayLabel schreibe.
Das Problem ist nur, dass es zB bei Table A & C den Feldnamen "Name" gibt.

Wie kann ich jetzt rausbekommen, welcher FELDNAME zu welchem TABLE zuordenbar ist ?
Mit Query.Fields[x].origin geht es nur bei bestimmten Abfragen...

Bitte um Hilfe...


mkinzler - Do 21.02.08 20:41


SQL-Anweisung
1:
2:
3:
4:
5:
6:
SELECT 
    A.name as aname,B.*,C.name as c.name,A.ort
FROM 
    Kunde A
        LEFT JOIN Table2 B WHERE B.pos=A.pos
            LEFT JOIN Mitarbeiter C WHERE C.nr =B.nr;


Freiberger - Do 21.02.08 20:49

Hy, so etwas hatte ich auch schon versucht,

dann bekomme ich für A.name & C.name den Wert in origin angezeigt.

Die Abfragen kommen aber nicht von mir, ich will sie nur "übersetzen"
Ich könnte den SQL-Text durchlaufen und überal AS anhängen.
Aber bei B.* AS B.* bekomme ich keine Werte in Fields[x].origin

Gibt es keinen Bezug ? Fields[x].Table gibt es leider nicht...


Freiberger - Do 21.02.08 20:50

Hy, so etwas hatte ich auch schon versucht,

dann bekomme ich für A.name & C.name den Wert in origin angezeigt.

Die Abfragen kommen aber nicht von mir, ich will sie nur "übersetzen"
Ich könnte den SQL-Text durchlaufen und überal AS anhängen.
Aber bei B.* AS B.* bekomme ich keine Werte in Fields[x].origin

Gibt es keinen Bezug ? Fields[x].Table gibt es leider nicht...


mkinzler - Do 21.02.08 20:57

Eine andere Möglichkeit gibt es aber nicht, da in der Ergebnismenge keine Bezüge auf die Herkunft enthalten sind.
BTW. * Abfragen sollte man sowieso vermeiden und Abfargen mit mehrmaligen Feldname auch.


Freiberger - Do 21.02.08 21:09

Ja, das stimmt. Macht aber nicht jeder.
Und wenn ich in verschieden Tabellen den selben Feldnamen habe (zB als Index), dann habe ich ein rießen Problem.

Schade, es muß doch irgend wo einen Bezug geben...


mkinzler - Do 21.02.08 21:16

Nur anhand der Position in der Ergebnismenge


Freiberger - Do 21.02.08 21:19

wie weinst du das ?
Bei B.* weiß ich doch nicht, wieviele Felder es gibt ?


mkinzler - Do 21.02.08 21:21

1. Feld mit dem Namen von Tabelle a, 2. von Tabelle c, ...


Freiberger - Do 21.02.08 21:25

und wenn ich A.*,B.*,C.* habe ?
dann müßte ich rausbekommen, wieviele Felder A,B & C hat...


mkinzler - Do 21.02.08 21:29

Das 1. Feld mit dem Namen 'Name' gehört dann trotzdem zu Tabelle a, das 2. zu B ...


Freiberger - Do 21.02.08 21:38

das stimmt allerdings... sehr gute Idee
Aber ich muß an irgenwas erkennen können, wenn die nächste Tabelle anfängt. A.*,B.*,C.*
Das Feld "Name" kann ja an verschiedenen Positionen sein.