Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi INNER JOIN mit Access (https://www.delphipraxis.net/163494-inner-join-mit-access.html)

Kevin11 30. Sep 2011 13:28

Datenbank: Access • Version: 2010 • Zugriff über: Ado

INNER JOIN mit Access
 
Hallo,

ich versuche ein INNER JOIN über 3 Tabellen zu machen. Bekomme aber am laufenden Band fehler bei dieser Abfrage:
Delphi-Quellcode:
Form1.SQLQuery1.SQL.Add('SELECT Prüfling.*, Abteilung.*, Standort.*'+
' FROM Prüfling INNER JOIN Abteilung ON Prüfling."AbteilungID" = Abteilung."AbteilungID" INNER JOIN Standort'+
' ON Abteilung."StandortID" = Standort."StandortID"');
Vielen Dank für die Hilfe!

Union 30. Sep 2011 13:34

AW: INNER JOIN mit Access
 
Und die Fehlermeldung dürfen wir erraten oder teilst Du sie uns noch mit? Ich würde jetzt mal auf den ersten Blick raten, dass es an dem Tabellennamen liegt.

Jumpy 30. Sep 2011 13:36

AW: INNER JOIN mit Access
 
Ist jetzt schon was länger her bei mir, aber war das nicht bei Access immmer alles in eckigen Klamern [MeinFeld]?

mkinzler 30. Sep 2011 13:36

AW: INNER JOIN mit Access
 
Umlaute im Tabellennamen?

Kevin11 30. Sep 2011 13:37

AW: INNER JOIN mit Access
 
Sorry, die Fehlermeldung habe ich ja ganz vergessen. :oops:

Zitat:

"Syntaxfehler (fehlender Operator) in Abfrageausdruck
'Prüfling.AbteilungID = Abteilung.AbteilungID INNER JOIN Standort ON Abteilung.StandortID = Standort.StandortID'"

mkinzler 30. Sep 2011 13:43

AW: INNER JOIN mit Access
 
SQL-Code:
SELECT
    p.*,
    a.*,
    s.*
FROM
    Pruefling p
        INNER JOIN Abteilung a ON a."AbteilungID" = p."AbteilungID"
        INNER JOIN Standort s ON s."StandortID" = p."StandortID";

Kevin11 30. Sep 2011 13:49

AW: INNER JOIN mit Access
 
Zitat:

Zitat von mkinzler (Beitrag 1127747)
SQL-Code:
SELECT
    p.*,
    a.*,
    s.*
FROM
    Pruefling p
        INNER JOIN Abteilung a ON a."AbteilungID" = p."AbteilungID"
        INNER JOIN Standort s ON s."StandortID" = p."StandortID";

Erst einmal vielen Dank für deine Hilf, aber jetzt bekomme ich folgenden Fehler:

Ungültige Verwendung von '.', '!' oder '()'. in Abfrageausdruck 'a."AbteilungID" = p."AbteilungID"'+
' INNER JOIN Standort s ON s."StandortID" = p."StandortID"'

mkinzler 30. Sep 2011 13:55

AW: INNER JOIN mit Access
 
Lass mnal den 2. Join weg. Es scheint so, al ob Access damit Probleme hat

Union 30. Sep 2011 14:01

AW: INNER JOIN mit Access
 
Ja dann simulier den INNER JOIN durch OUTER JOIN und WHERE.

Kevin11 30. Sep 2011 14:03

AW: INNER JOIN mit Access
 
Zitat:

Zitat von mkinzler (Beitrag 1127750)
Lass mnal den 2. Join weg. Es scheint so, al ob Access damit Probleme hat

Nein, ich hab INNER JOIN, INNER, und JOIN mal weggelassen. Kommt immer des selbe Fehler.

DeddyH 30. Sep 2011 14:06

AW: INNER JOIN mit Access
 
Dann mach doch zum Testen erst einmal nur einen Join. BTW: Wozu sind eigentlich die Anführungszeichen? Sind die Pflicht bei Access?

Jumpy 30. Sep 2011 14:11

AW: INNER JOIN mit Access
 
Lass mal die Gänsefüßchen weg. Hab mal gerade einen Mini-DB gebaut und das getestet:

SQL-Code:
SELECT Feld.*, Test.*
FROM Feld INNER JOIN Test ON Feld.FeldID = Test.FeldID;

Kevin11 30. Sep 2011 14:31

AW: INNER JOIN mit Access
 
Es Funktioniert. Hier hat irgendjemand von Prüfungen das ü durch ein ue ersetzt und ich habe es rauskopiert. Das hab ich wieder vor lauter Bäumen den Wald nicht gesehen.

p80286 30. Sep 2011 15:00

AW: INNER JOIN mit Access
 
Zitat:

Zitat von mkinzler (Beitrag 1127744)
Umlaute im Tabellennamen?

!!!!!!!!!!!

Gruß
K-H

Kevin11 30. Sep 2011 15:08

AW: INNER JOIN mit Access
 
Zitat:

Zitat von Kevin11 (Beitrag 1127763)
Es Funktioniert. Hier hat irgendjemand von Prüfungen das ü durch ein ue ersetzt und ich habe es rauskopiert. Das hab ich wieder vor lauter Bäumen den Wald nicht gesehen.

Fehlalarm!
Es geht nur mit 2 Tabellen. Mit 3 Tabellen bekomme ich es nicht hin.

DeddyH 30. Sep 2011 15:14

AW: INNER JOIN mit Access
 
Wie sieht die Abfrage denn jetzt aus? Stimmen die Tabellen- und Feldbezeichner? Welche Fehler werden gemeldet?

Kevin11 30. Sep 2011 15:16

AW: INNER JOIN mit Access
 
Aktuelle Abfrage:
Delphi-Quellcode:
Form2.ADOQuery1.SQL.Add('SELECT p.*, a.*, s.* FROM Prüfling p (INNER JOIN Abteilung a ON a.AbteilungID = p.AbteilungID)'+
' (INNER JOIN Standort s ON s.StandortID = p.StandortID)');

Fehler:

Im Projekt ... ist eine Exception der Klasse EOleException mit der Meldung 'Syntaxfehler in FROM-Klausel' aufgetreten.

DeddyH 30. Sep 2011 15:25

AW: INNER JOIN mit Access
 
Und die Klammern müssen sein? Was ist, wenn Du nur SELECT * abfragst, das dürfte ja im Ergebnis dasselbe sein? An diese Access-Syntax werde ich mich nie gewöhnen.

Bummi 30. Sep 2011 15:38

AW: INNER JOIN mit Access
 
Code:
FROM (Prüfling INNER JOIN Abteilung ON Prüfling.AbteilungID = Abteilung.AbteilungID) INNER JOIN Standort ON Prüfling.StandortID = Standort.StandortID;

Kevin11 4. Okt 2011 07:22

AW: INNER JOIN mit Access
 
Zitat:

Zitat von Bummi (Beitrag 1127780)
Code:
FROM (Prüfling INNER JOIN Abteilung ON Prüfling.AbteilungID = Abteilung.AbteilungID) INNER JOIN Standort ON Prüfling.StandortID = Standort.StandortID;

Jetzt kommt dieser Fehler:
Zitat:

Für mindestens einen erforderlichen Paramater wurde kein Wert angegeben.
Mein Code:
Delphi-Quellcode:
     
Form2.ADOQuery1.SQL.Clear;
Form2.ADOQuery1.SQL.Add('SELECT Prüfling, Abteilung, Standort FROM (Prüfling INNER JOIN Abteilung ON Prüfling.AbteilungID = Abteilung.AbteilungID)INNER JOIN Standort ON Prüfling.StandortID = Standort.StandortID');
Form2.ADOQuery1.Open;

DeddyH 4. Okt 2011 07:28

AW: INNER JOIN mit Access
 
SQL-Code:
SELECT
  Tabelle1, Tabelle2, Tabelle3
...
Du willst ja wohl Felder abfragen und keine Tabellen, oder?

[edit] Wie ist es denn mit der "alten" Syntax, geht das?
SQL-Code:
SELECT
  * 
FROM
  Prüfling, Abteilung, Standort
WHERE
  Prüfling.AbteilungID = Abteilung.AbteilungID
AND
  Prüfling.StandortID = Standort.StandortID
[/edit]

Kevin11 4. Okt 2011 07:31

AW: INNER JOIN mit Access
 
Zitat:

Zitat von DeddyH (Beitrag 1128219)
SQL-Code:
SELECT
  Tabelle1, Tabelle2, Tabelle3
...
Du willst ja wohl Felder abfragen und keine Tabellen, oder?

Ja, will ich! Das ganze Accesszeug macht mich jetzt schon wieder ganz kirre.

Ich möchte von allen 3 Tabellen alle Spalten Abfragen.

Delphi-Quellcode:
Form2.ADOQuery1.SQL.Add('SELECT Prüfling.*, Abteilung.*, Standort.* FROM (Prüfling INNER JOIN Abteilung ON Prüfling.AbteilungID = Abteilung.AbteilungID)INNER JOIN Standort ON Prüfling.StandortID = Standort.StandortID');
Ist das so richtig?

Delphi-Quellcode:
Form2.ADOQuery1.SQL.Add('SELECT * FROM (Prüfling INNER JOIN Abteilung ON Prüfling.AbteilungID = Abteilung.AbteilungID)INNER JOIN Standort ON Prüfling.StandortID = Standort.StandortID');
Oder doch lieber so?

DeddyH 4. Okt 2011 07:33

AW: INNER JOIN mit Access
 
Hast Du mein Edit gesehen und ausprobiert? Bei einem INNER JOIN sollte das eigentlich unproblematisch sein.

Kevin11 4. Okt 2011 07:39

AW: INNER JOIN mit Access
 
Jop, alles ausprobiert. Der Fehler kommt immernoch, ich tippe so langsam darauf, dass es an der Open funktion liegt. Weil ich in der Delphi Hilfe kein Open gefunden habe für die tadoquery Komponente.

DeddyH 4. Okt 2011 07:46

AW: INNER JOIN mit Access
 
Open gibt es aber, da musst Du Dir keinen Kopf machen. Was mich etwas stört, sind die Umlaute bei "Prüfling". Ich weiß nicht, ob das nicht evtl. Probleme verursachen könnte.

Gollum 4. Okt 2011 07:50

AW: INNER JOIN mit Access
 
Hallo,

wenn Du die Abfrag benutzt, die Du gepostet hast, dann fehlt dort ein Leerzeichen vor dem 2. INNER JOIN.

Am Open liegt es sicher nicht.

Um alle Felder aus allen Tabellen anzuzeigen musst du diesen Teile nehmen:
Delphi-Quellcode:
ADOQuery1.Close();
ADOQuery.SQL.Text:=
  'SELECT Prüfling.*, Abteilung.*, Standort.* FROM (Prüfling INNER JOIN Abteilung ON Prüfling.AbteilungID = Abteilung.AbteilungID) INNER JOIN Standort ON Prüfling.StandortID = Standort.StandortID';
ADOQuery.Open();
Access ist die einzige DB, die ich kenne, bei der die JOIN-Parameter geklammert werden müssen. Die Klammerung beim o.g. Beispiel stimmt soweit.

Umlaute sind in Access auch kein Problem. Sowohl in Tabellen- wie auch in Feldnamen.

mkinzler 4. Okt 2011 11:19

AW: INNER JOIN mit Access
 
Zitat:

Umlaute sind in Access auch kein Problem. Sowohl in Tabellen- wie auch in Feldnamen.
Für die meisten DBMS aber, deshalb würde ich darauf verzichten


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 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-2025 by Thomas Breitkreuz