![]() |
Fehler in SQL-Anweisung bei zweifachem InnerJOIN?
hallo,
guckt doch mal bitte über diese anweisung und sagt mir wo der fehler ist:
Delphi-Quellcode:
ich erhalte immer den fehler "ungültiger parameter". die tabellen- und spaltennamen stimmen aber. wenn ich ein INNER JOIN rausnehmen klappt es auch.
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 = ""');
danke mfg tkliewe |
Re: Fehler in SQL-Anweisung bei zweifachem InnerJOIN?
Hi daywalker-dj-k,
Delphi-Quellcode:
würde ich ersetzen durch:
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 = ""');
Delphi-Quellcode:
Vor dem öffnen des Querys dann den Parameter setzen:
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 = ""');
Delphi-Quellcode:
Habs nicht getestet, sollte aber so in etwa laufen.
Query.ParamByName('bis').AsDate := Date;
|
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:
:cyclops: Strings werden in SQL in einfache Hochkommas eingeschlossen (auch wenn z.B. Access doppelte Anführungszeichen zulässt)
FROM (TabelleA INNER JOIN TabelleB ON TabelleA.Feld=TabelleB.Feld) INNER JOIN TabelleC ON TabelleB.Feld=TabelleC.Feld
: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:
:cyclops: Query1.SQL.Add(...
SELECT TabelleA.*, TabelleB.Feld1, TabelleB.Feld2, ... FROM {verjointe Tabellen}
Besser ist Query1.SQL.Text := ... Dies erspart Query1.SQL.Clear; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 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