Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SELECT über 2 Tabellen - Feldzugriff? (https://www.delphipraxis.net/27506-select-ueber-2-tabellen-feldzugriff.html)

MarcusB 11. Aug 2004 11:15


SELECT über 2 Tabellen - Feldzugriff?
 
Hallo Leutz,

ich hätte da mal wieder ein kleines Problem.
Ich habe folgende Query :

Delphi-Quellcode:
 Dataset.SQL.Text := 'SELECT * FROM tabelle1 AS a, tabelle2 AS b';
ich wollte dann folgendermaßen auf das Ergebnis zugreifen :

Delphi-Quellcode:
einFeld := DataSet.FieldByName('a.feld1').AsString;
Nun kommt der Fehler : "a.feld1 wurde nicht gefunden".

Was mache ich falsch?

Danke schon mal :-D

SirThornberry 11. Aug 2004 11:21

Re: SELECT über 2 Tabellen - Feldzugriff?
 
ich glaube bei den feldnamen im result wird nicht mehr angegeben aus welcher tabelle diese sind da ja bei entsprechender anweisung das Feld in aus beiden tabellen genommen wird und als eine spalte dargestellt werden kann

MarcusB 11. Aug 2004 11:28

Re: SELECT über 2 Tabellen - Feldzugriff?
 
Wie müsste denn das dann praktisch aussehen? :gruebel:

Hansa 11. Aug 2004 11:35

Re: SELECT über 2 Tabellen - Feldzugriff?
 
Zitat:

Zitat von SirThornberry
ich glaube bei den feldnamen im result wird nicht mehr angegeben aus welcher tabelle diese sind da ja bei entsprechender anweisung das Feld in aus beiden tabellen genommen wird und als eine spalte dargestellt werden kann

:shock: :shock: Wer soll das verstehen ? *singt* :mrgreen: Das AS bezieht sich schon auf die Feldnamen. Nicht auf die Tabellennamen !
Delphi-Quellcode:
Dataset.SQL.Text := 'SELECT * FROM tabelle1 AS a, tabelle2 AS b';
Was ist zu tun ? Das AS weglassen. :lol: Das AS wird eher verwendet bei Berechnungen. Also gut beides gemischt. Ich brauche einen Wert, der aus 2 Tabellen errechnet wird :

Delphi-Quellcode:
Dataset.SQL.Text := 'SELECT A.NR, A.PREIS, B.MENGE, A.PREIS * B.MENGE AS GESPREIS FROM TABLE1 A, TABLE2 B ORDER BY A.NR');

Sharky 11. Aug 2004 11:37

Re: SELECT über 2 Tabellen - Feldzugriff?
 
Zitat:

Zitat von MarcusB
Wie müsste denn das dann praktisch aussehen? :gruebel:

Einfach so:
Delphi-Quellcode:
  einFeld := DataSet.FieldByName('feld1').AsString;
Bei mir geht das dann.

Stevie 11. Aug 2004 11:39

Re: SELECT über 2 Tabellen - Feldzugriff?
 
Und wie werden die Felder benannt, wenn in beiden Tabellen ein Feld mit dem Namen "Feld1" vorhanden ist?

Hansa 11. Aug 2004 11:44

Re: SELECT über 2 Tabellen - Feldzugriff?
 
Das habe ich doch geschrieben. :gruebel: A.Feld1 und B.Feld1 :!:

MarcusB 11. Aug 2004 11:46

Re: SELECT über 2 Tabellen - Feldzugriff?
 
Danke schon mal für die Antworten. Funktioniert leider immer noch nicht :(

Ich habe mal das "AS" weggelassen, aber immer noch die selbe Fehlermeldung.
Nun habe ich mal die FieldList ausgegeben und da stehen alle Felder ohne die Tabellenbezeichnung "a." oder "b.", allerdings
sind die Felder, die in beiden Tabellen vorkommen mit "_1" gekennzeichnet.

Ich brauche aber alle Felder aus beiden Tabellen ohne aufwendige Unterscheidung ob ein Feld doppelt da ist oder nicht.

Das muss doch irgendwie gehen... oder steh ich nur auf'm Schlauch? :?

Robert_G 11. Aug 2004 11:46

Re: SELECT über 2 Tabellen - Feldzugriff?
 
Zitat:

Zitat von Hansa
Zitat:

Zitat von SirThornberry
ich glaube bei den feldnamen im result wird nicht mehr angegeben aus welcher tabelle diese sind da ja bei entsprechender anweisung das Feld in aus beiden tabellen genommen wird und als eine spalte dargestellt werden kann

:shock: :shock: Wer soll das verstehen ? *singt* :mrgreen: Das AS bezieht sich schon auf die Feldnamen. Nicht auf die Tabellennamen !
Delphi-Quellcode:
Dataset.SQL.Text := 'SELECT * FROM tabelle1 AS a, tabelle2 AS b';
Was ist zu tun ? Das AS weglassen. :lol: Das AS wird eher verwendet bei Berechnungen. Also gut beides gemischt. Ich brauche einen Wert, der aus 2 Tabellen errechnet wird :

Delphi-Quellcode:
Dataset.SQL.Text := 'SELECT A.NR, A.PREIS, B.MENGE, A.PREIS * B.MENGE AS GESPREIS FROM TABLE1 A, TABLE2 B ORDER BY A.NR');

*auch klugscheißen will* *g*

'AS' sagt nur aus, dass du in der Abfrage einer Spalte einen bestimmten Namen geben willst.
Im SQL Standard darf man 'AS' _NICHT_ für Tabellen aliase verwenden!
Da das TDataSet keine Ahnung von der Tabelle hat, aus der Spalte kommt, musst du die Spalten in der Abfrage eindeutig benennen.

Die 2. Möglichkeit sollte aber tunlichst vermieden werden. ;)

SQL-Code:
SELECT A.Nr as SomeCol
      ,A.Preis "Noch eine Spalte"
      ,B.Menge Miep
      ,A.Preis * B.MENGE as GesPreis
FROM  Table1 A
      ,Table2 B
ORDER BY A.Nr
Wesentlich besser ist aber der Zugriff über den Index.
Delphi-Quellcode:
SomeTDataSetDesc.Fields(1).AsInteger
Edit: Ich hatte FiledByName(1)!

Stevie 11. Aug 2004 11:46

Re: SELECT über 2 Tabellen - Feldzugriff?
 
Zitat:

Zitat von Hansa
Das habe ich doch geschrieben. :gruebel: A.Feld1 und B.Feld1 :!:

Wenn ich
SQL-Code:
SELECT * FROM Tabelle1, Tabelle2
mache!?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 Uhr.
Seite 1 von 2  1 2      

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