AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Abfrage eines SQL SELECT Befehls mit mehreren Tabellen
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage eines SQL SELECT Befehls mit mehreren Tabellen

Ein Thema von Vitus · begonnen am 28. Okt 2012 · letzter Beitrag vom 30. Okt 2012
Antwort Antwort
Vitus

Registriert seit: 24. Apr 2003
Ort: Auckland, Neuseeland
38 Beiträge
 
Delphi XE2 Professional
 
#1

Abfrage eines SQL SELECT Befehls mit mehreren Tabellen

  Alt 28. Okt 2012, 23:42
Datenbank: SQLite • Version: 3 • Zugriff über: Zeos query
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
Gott segne diese Heiden! [Homer J. Simpson]
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Abfrage eines SQL SELECT Befehls mit mehreren Tabellen

  Alt 29. Okt 2012, 00:00
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;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Vitus

Registriert seit: 24. Apr 2003
Ort: Auckland, Neuseeland
38 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Abfrage eines SQL SELECT Befehls mit mehreren Tabellen

  Alt 29. Okt 2012, 00:45
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.
Gott segne diese Heiden! [Homer J. Simpson]
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Abfrage eines SQL SELECT Befehls mit mehreren Tabellen

  Alt 29. Okt 2012, 00:52
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>
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Abfrage eines SQL SELECT Befehls mit mehreren Tabellen

  Alt 30. Okt 2012, 11:22
Dieses sowohl als auch in einer Abfrage liefert meist nur Ärger wenn man auf die Ergebnisfelder über die Namen zugreift (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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:43 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