Autor Beitrag
Freiberger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

WIN XP
Delphi 7
BeitragVerfasst: Do 21.02.08 20:36 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Do 21.02.08 20:41 
ausblenden 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;

_________________
Markus Kinzler.
Freiberger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

WIN XP
Delphi 7
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

WIN XP
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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.

_________________
Markus Kinzler.
Freiberger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

WIN XP
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Do 21.02.08 21:16 
Nur anhand der Position in der Ergebnismenge

_________________
Markus Kinzler.
Freiberger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

WIN XP
Delphi 7
BeitragVerfasst: Do 21.02.08 21:19 
wie weinst du das ?
Bei B.* weiß ich doch nicht, wieviele Felder es gibt ?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Do 21.02.08 21:21 
1. Feld mit dem Namen von Tabelle a, 2. von Tabelle c, ...

_________________
Markus Kinzler.
Freiberger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

WIN XP
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Do 21.02.08 21:29 
Das 1. Feld mit dem Namen 'Name' gehört dann trotzdem zu Tabelle a, das 2. zu B ...

_________________
Markus Kinzler.
Freiberger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

WIN XP
Delphi 7
BeitragVerfasst: 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.