Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fehler in SQL-Anweisung bei zweifachem InnerJOIN? (https://www.delphipraxis.net/21459-fehler-sql-anweisung-bei-zweifachem-innerjoin.html)

daywalker-dj-k 3. Mai 2004 11:43


Fehler in SQL-Anweisung bei zweifachem InnerJOIN?
 
hallo,
guckt doch mal bitte über diese anweisung und sagt mir wo der fehler ist:

Delphi-Quellcode:
Query1.SQL.Add('SELECT * FROM auftragspositionen INNER JOIN (auftraege INNER JOIN kunden ON auftraege.bestellid = kunden.kdnr) ON auftraege.aufnr = auftragspositionen.aufnr WHERE auftraege.haltenbis = "'+MakeSQLDate(DateToStr(date))+'" and auftraege.ok = ""');
ich erhalte immer den fehler "ungültiger parameter". die tabellen- und spaltennamen stimmen aber. wenn ich ein INNER JOIN rausnehmen klappt es auch.

danke
mfg
tkliewe

AlphaBug 3. Mai 2004 11:59

Re: Fehler in SQL-Anweisung bei zweifachem InnerJOIN?
 
Hi daywalker-dj-k,

Delphi-Quellcode:
Query1.SQL.Add('SELECT * FROM auftragspositionen INNER JOIN (auftraege INNER JOIN kunden ON auftraege.bestellid = kunden.kdnr) ON auftraege.aufnr = auftragspositionen.aufnr WHERE auftraege.haltenbis = "'+MakeSQLDate(DateToStr(date))+'" and auftraege.ok = ""');
würde ich ersetzen durch:

Delphi-Quellcode:
Query1.SQL.Add('SELECT * FROM auftragspositionen INNER JOIN (auftraege INNER JOIN kunden ON auftraege.bestellid = kunden.kdnr) ON auftraege.aufnr = auftragspositionen.aufnr WHERE auftraege.haltenbis = :bis and auftraege.ok = ""');
Vor dem öffnen des Querys dann den Parameter setzen:

Delphi-Quellcode:
Query.ParamByName('bis').AsDate := Date;
Habs nicht getestet, sollte aber so in etwa laufen.

shmia 3. Mai 2004 12:36

Re: Fehler in SQL-Anweisung bei zweifachem InnerJOIN?
 
4 Dinge fallen mir auf:

:cyclops: die JOINs müssen mit runden Klammer richtig geschachtelt werden (speziell bei Access):
SQL-Code:
FROM (TabelleA INNER JOIN TabelleB ON TabelleA.Feld=TabelleB.Feld) INNER JOIN TabelleC ON TabelleB.Feld=TabelleC.Feld
:cyclops: Strings werden in SQL in einfache Hochkommas eingeschlossen (auch wenn z.B. Access doppelte Anführungszeichen zulässt)

:cyclops: SELECT * FROM {verjointe Tabellen} ist immer etwas problematisch, da in 2 (oder mehr)
Tabellen gleiche Feldnamen auftreten können.
Manche DBMS behelfen sich, indem sie den Tabellennamen dem Feldnamen vorneanfügen,
manche DBMS produzieren eine Fehlermeldung.
Deshalb besser so:
SQL-Code:
SELECT TabelleA.*, TabelleB.Feld1, TabelleB.Feld2, ... FROM {verjointe Tabellen}
:cyclops: Query1.SQL.Add(...
Besser ist Query1.SQL.Text := ... Dies erspart Query1.SQL.Clear;


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