Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi verknüpfte Abfrage ... Wie macht mans richtig? (https://www.delphipraxis.net/141997-verknuepfte-abfrage-wie-macht-mans-richtig.html)

torud 20. Okt 2009 13:21

Datenbank: MDAC • Zugriff über: ADO

verknüpfte Abfrage ... Wie macht mans richtig?
 
Hallo Wissende,

ich weiss leider nicht, ob meine Themenbezeichnung korrekt ist.

Folgende Abfrage funktioniert wunderbar:

Delphi-Quellcode:
DataModule1.ADOQuery1.Close;
DataModule1.ADOQuery1.SQL.Clear;

DataModule1.ADOQuery1.SQL.Add('
select
id,
round,
matches.team_a_id AS Team_A, <= statt die team_id, den Teamnamen
matches.team_b_id AS Team_B, <= statt die team_id, den Teamnamen
matches.result_a AS Res_A,
matches.result_b AS Res_B from matches where league_id = ' + internal_league_id + ' and round = ' + cmb_rounds.Text);

DataModule1.ADOQuery1.Open;
DataModule1.ADOQuery1.ExecSQL;
Nun möchte ich aber, dass in dem Grid NICHT die ID der Teams A und B angezeigt wird, sondern der richtige Teamname.

In der Datenbanktabelle Teams würde diese in Vergleich mit der ID gefunden werden. Leider weiss ich nun nicht, wie ich die Abfrage hierzu korrekt ändern muss.

Könnte mir einer von Euch hierzu Schützenhilfe geben und erklären warum es so macht? Das wäre echt lieb.

DeddyH 20. Okt 2009 13:27

Re: verknüpfte Abfrage ... Wie macht mans richtig?
 
SQL-Code:
SELECT M.id, M.round, T1.Name AS Team_A, T2.Name AS Team_B, M.result_a AS Res_A, M.result_b AS Res_B
FROM matches M
JOIN Teams T1 ON M.team_a_id = T1.ID
JOIN Teams T2 ON M.team_b_id = T2.ID
WHERE league_id = :internal_league_id
AND round = :cmb_roundsText
Ungetestet, wenn es funktioren sollte, erkläre ich es auch gerne ;)

[edit] Tabellenalias vergessen, siehe Posts unten [/edit]

torud 20. Okt 2009 14:51

Re: verknüpfte Abfrage ... Wie macht mans richtig?
 
Servus Detlef,

es hat leider nicht funktioniert.

Hier mal der resultierende SQL-Code:

SELECT M.id, M.round, T1.Name AS Team_A, T2.Name AS Team_B, M.result_a AS Res_A, M.result_b AS Res_B FROM matches JOIN Teams T1 ON M.team_a_id = T1.ID JOIN Teams T2 ON M.team_b_id = T2.ID WHERE league_id = 2 AND round = 1

Um es etwas zu vereinfachen, liste ich hier mal die Felder der Tabellen.

Tabelle Matches:
id
season_id
league_id
round
team_a_id
team_b_id
result_a
result_b

Tabelle Teams
id
name_short
name_long
teamname
coach

team_a_id bzw. team_b_id entsprechen immer einer id aus der teams-tabelle. Von daher muss es eigentlich gehen. Ich nehme mal an, dass es an der Namenskonvention im Code liegt und habe schon aus T1.Name T1.name_short gemacht, aber es geht trotzdem nicht.

Folgende Fehlermeldung habe ich erhalten:
Syntaxfehler in FROM-Klausel.

Danke erstmal soweit. So langsam, verstehe ich das aber und werde hier und da noch einiges versuchen.

fajac 20. Okt 2009 15:10

Re: verknüpfte Abfrage ... Wie macht mans richtig?
 
vielleicht geht es wenn man

SQL-Code:
...
FROM matches M
...
schreibt.

DeddyH 20. Okt 2009 15:32

Re: verknüpfte Abfrage ... Wie macht mans richtig?
 
:oops: natürlich, der Tabellenalias muss ja auch vergeben werden. Das kommt davon, wenn man auf der Arbeit mal nebenher SQL tippt.

torud 20. Okt 2009 16:40

Re: verknüpfte Abfrage ... Wie macht mans richtig?
 
Also selbst wenn ich folgenden Code verwende erhalte ich eine Fehlermeldung wegen falscher Syntax:

SELECT M.id, M.round, T1.name_short AS Team_A, T2.name_short AS Team_B, M.result_a AS Res_A, M.result_b AS Res_B FROM matches M JOIN Teams T1 ON M.team_a_id = T1.ID JOIN Teams T2 ON M.team_b_id = T2.ID WHERE league_id = 1 AND round = 1

Im Access habe ich diese Abfrage mal so probiert und die gleiche Fehlermeldung erhalten, wobei das erste JOIN dabei selektiert wurde. Müssen da Klammern rein oder wo liegt der Hase im Pfeffer begraben? :?

Wenn alle Stricke reißen, stelle ich auch mal die MDB-Datei ein.

DeddyH 20. Okt 2009 17:01

Re: verknüpfte Abfrage ... Wie macht mans richtig?
 
*Uff* Access hat doch so eine kranke Klammer-Syntax. Wie das da nuun genau aussehen muss, weiß ich leider auch gerade nicht. Du könntest Dir ja einmal von Access selbst eine Abfrage generieren lassen, diese hier reinstellen und dann versuchen wir es nochmal.

torud 20. Okt 2009 17:31

Re: verknüpfte Abfrage ... Wie macht mans richtig?
 
Also ich bin leider absolut kein DB- oder ACCESS-Crack.

Die Abfrage, die mir ERGEBNISLOS im Access erzeugt wurde, sieht so aus:

SELECT matches.id, matches.round, matches.league_id, matches.team_a_id, matches.team_b_id
FROM matches INNER JOIN teams ON (matches.team_b_id = teams.id) AND (matches.team_a_id = teams.id)
where matches.league_id = 1 and matches.round = 1

Fakt ist, dass ich mind. 9 Datensätze habe, die die Leagueid 1 und die round 1 haben. Irgendwo ist da noch was nicht ganz koscher. Aber man sieht hier schon ganz schön die Klammer-Orgie. :-)

DeddyH 20. Okt 2009 18:08

Re: verknüpfte Abfrage ... Wie macht mans richtig?
 
Hm...
SQL-Code:
SELECT M.id, M.round, T1.Name AS Team_A, T2.Name AS Team_B, M.result_a AS Res_A, M.result_b AS Res_B
FROM matches M
JOIN Teams T1 ON (M.team_a_id = T1.ID)
JOIN Teams T2 ON (M.team_b_id = T2.ID)
WHERE (M.league_id = 1)
AND (M.round = 1)
Kommt dabei etwas heraus?

SirThornberry 20. Okt 2009 18:16

Re: verknüpfte Abfrage ... Wie macht mans richtig?
 
@torud: Könntest du deinem Beitrag eventuell einen aussagekräftigen Titel geben der ansatzweise erkennen lässt um welches Probleme es innerhalb dieses Themas geht? :)

[Edit]"bitte" durch "eventuell" ersetzt da es wohl etwas schwieriger sein könnte einen aussagekräftigeren Titel zu finden[/Edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:14 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