Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Abfrage eines SQL SELECT Befehls mit mehreren Tabellen (https://www.delphipraxis.net/171262-abfrage-eines-sql-select-befehls-mit-mehreren-tabellen.html)

Vitus 28. Okt 2012 22:42

Datenbank: SQLite • Version: 3 • Zugriff über: Zeos query

Abfrage eines SQL SELECT Befehls mit mehreren Tabellen
 
Guten Morgen,

ich benutze eine SQL SELECT Anweisung in der ich zwei Tabellen miteinander verbinde:
Code:
SELECT * FROM poly, poly_type WHERE poly.poly_type = poly_type.id AND poly.id=<something>
nun stellt sich das Problem dass beide Tabellen gemeinsame Feldnamen benutzen, wie zum Beispiel "name" oder "id". Das ist bei allen SQL Anweisungen kein Problem da die jeweiligen Felder mit dem zugehoerigen Tabellennamen verknuepft werden koennen:
Code:
SELECT poly.name, poly_type.name FROM poly, poly_type WHERE poly.poly_type = poly_type.id AND poly.id=<something>
Nun moechte ich den Datensatz der Query allerdings in Delphi auslesen, doch wenn ich dies versuche:
Code:
edtPolygonName.Text := dataSet.FieldByName('poly.name').AsString;
bekomme ich einen Laufzeitfehler der besagt dass "poly.name" nicht bekannt ist. Aendere ich den Code nach "name" funktioniert es, allerdings habe ich dann nur Zugriff auf das erste Feld mit der Bezeichnung "name". Wie kann ich in Delphi die Adresse meiner Felder genauer spezifizieren?

Besten Gruss,
Vitus

Union 28. Okt 2012 23:00

AW: Abfrage eines SQL SELECT Befehls mit mehreren Tabellen
 
Das leigt nicht nur an Delphi sondern an dem SQL Statement. Du musst die Feldduplikate vermeiden, weil sonst die Felder abhängig vom jeweiligen SQL Dialekt umbenannt werden (z.b. in Name_1 oder EXPR oder so was).

Code:
SELECT poly.name as PolyName, poly_type.name as PolyTypName FROM poly, poly_type WHERE poly.poly_type = poly_type.id AND poly.id=<something>
Und im Dataset hast Du keine Tabellenaliase.
Code:
edtPolygonName.Text := dataSet.FieldByName('PolyName').AsString;

Vitus 28. Okt 2012 23:45

AW: Abfrage eines SQL SELECT Befehls mit mehreren Tabellen
 
Hallo Union,

aaah! Vielen Dank fuer den Tipp!
Gibt es eine Moeglichkeit die SELECT Anweisung so zu erweitern dass alle weiteren Felder mit dem urspruenglichen Namen angezeigt werden? Also quasi ein SELECT * wo jedoch, wie von Dir gezeigt, einige Feldnamen ausgetauscht werden?

Ich kann dies machen:
Code:
SELECT *, poly.name as PolyName, poly_type.name as PolyTypeName FROM poly, poly_type WHERE poly.poly_type = poly_type.id AND poly.id=<something>
Allerdings wird die Tabelle ja dann um die neuen FEldnamen ergaenzt anstatt ersetzt.

Bummi 28. Okt 2012 23:52

AW: Abfrage eines SQL SELECT Befehls mit mehreren Tabellen
 
klar ... Du kannst aber auch nur einen Teil mit Alias versehen
Code:
SELECT poly.*, poly_type.name as PolyTypeName FROM poly, poly_type WHERE poly.poly_type = poly_type.id AND poly.id=<something>

p80286 30. Okt 2012 10:22

AW: Abfrage eines SQL SELECT Befehls mit mehreren Tabellen
 
Dieses sowohl als auch in einer Abfrage liefert meist nur Ärger wenn man auf die Ergebnisfelder über die Namen zugreift (
Delphi-Quellcode:
FieldbyName('wasweisich').
). In dem Falle rate ich dazu immer Aliasse zu verwenden, auch wenn es doppelte Schreibarbeit ergibt (Tab1.Name as Name).
Die andere Möglichkeit wäre mit Fields.count und Fields.Name und Fields.Value die Ergebnisse auszulesen. dann bekommst du die Zuordnung über den entsprechenden Index.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz