Delphi-PRAXiS

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 12: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 12: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 12:28

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

Hansa 11. Aug 2004 12: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 12: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 12: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 12:44

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

MarcusB 11. Aug 2004 12: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 12: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 12: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!?

Hansa 11. Aug 2004 12:59

Re: SELECT über 2 Tabellen - Feldzugriff?
 
@RG : was soll vermieden werden ?

EIN * was soll das ? Betrifft das die Felder von Tabelle1 oder Tabelle2 ? SO geht es NICHT !! Wenn schon dann A.* und B.*.

Sharky 11. Aug 2004 13:02

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

Zitat von Hansa
...SO geht es NICHT !! Wenn schon dann A.* und B.*.

Und warum geht es dann, für diese spezielle Anfrage bei mir? Ein :
SQL-Code:
SELECT * FROM tabelle1 a , tabelle2 b
Liefert mir alle Felder aus beiden Tabellen. Wenn ich jetzt in beiden Tabellen Felder mit dem selben Namen besitze habe ich natürlich das schon beschriebene Problem.

Stevie 11. Aug 2004 13:05

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

Zitat von Hansa
EIN * was soll das ? Betrifft das die Felder von Tabelle1 oder Tabelle2 ? SO geht es NICHT !! Wenn schon dann A.* und B.*.

Natürlich geht das! :roll: Ich möchte nur wissen, wie dann die Felder benannt werden, wenn ich diesen SQL absetze!
Ob das unschön ist, brauchen wir nicht zu diskutieren, dass weiß ich... ;-)

P.S. Ich hab's mal auf ner Oracle-DB getestet, die setzt an das zweite der gleichnamigen Felder ein _1 usw. dran.

Hansa 11. Aug 2004 13:06

Re: SELECT über 2 Tabellen - Feldzugriff?
 
Sharkky hat Recht. Das geht ja doch so. Dann verstehe ich nun aber die Frage nicht mehr. Ich kann sogar die Umbenennung der Tabellen weglassen und erhalte alle Felder beider Tabellen. Um welche DB geht es eigentlich ?

Robert_G 11. Aug 2004 13:13

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

Zitat von Hansa
@RG : was soll vermieden werden ?

Sowas:
SQL-Code:
      ,A.Preis "Noch eine Spalte"

MarcusB 11. Aug 2004 13:17

Re: SELECT über 2 Tabellen - Feldzugriff?
 
Vielen Dank für die zahlreichen Antworten.

Ich muss wohl in den sauren Apfel beissen und alle Felder explizit benennen (heisst: viel :coder:).
So funktioniert es, habe es gerade mal ausprobiert.

PS: Ist eine mySQL DB


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:49 Uhr.

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