![]() |
Datenbank: Access mdb • Version: 2003 • Zugriff über: SQL / Delphi FireDac
SQL Query erweitern?
Hallo Profis,
ich habe dank euerer Hilfe diese funktionierende SQL Abfrage:
Delphi-Quellcode:
'
SELECT
Dok.ABFDocAuftragNr, Dok.ABFDocDatum, Dok.ABFDocKundeKurzbez, Dok.ABFDocNetto, Pos.ABFPosBuchNetto, Pos.ABFPosEKPreis, Pos.ABFPosBuchNetto / Pos.ABFPosMenge as EPreis, EPreis- Pos.ABFPosEKPreis as Erloes, Pos.ABFPosMenge as bestellt, Pos.ABFPosArtNr, Pos.ABFPosName1, (SELECT SUM(subPos.ABFPosMenge) FROM ABFDok subDok INNER JOIN ABFPos subPos ON subDok.ABFDocID = subPos.ABFPosdocID WHERE subDok.ABFDocAuftragNr = Dok.ABFDocAuftragNr AND subPos.ABFPosArtNr = Pos.ABFPosArtNr AND subDok.ABFDocOptFertig = false AND subDok.ABFDocVisType = 2 AND subPos.ABFPosEPreis > 0 AND subPos.ABFPosType IN (0,7) AND subPos.ABFPosNr <> '' ) AS geliefert FROM ABFDok Dok INNER JOIN ABFPos Pos ON Dok.ABFDocAuftragID = Pos.ABFPosDocID WHERE Dok.ABFDocOptFertig = false AND Dok.ABFDocVisType = 1 AND Pos.ABFPosEPreis > 0 AND Pos.ABFPosType IN (0, 7) AND Pos.ABFPosNr <> '' order by Dok.ABFDocAuftragNr; nun möchte ich noch den aktuellen Lagerbestand 'ArtBestand' aus der Tabelle 'ArtMenge' in die Abfrage einfügen, was mir nicht gelingt. Ich habe ein zusätzliches inner join eingefügt wie hier zusehen ist:
Delphi-Quellcode:
Ich erhalte hier die folgende Fehlermeldung:
SELECT
Dok.ABFDocAuftragNr, Dok.ABFDocDatum, Dok.ABFDocKundeKurzbez, Dok.ABFDocNetto, Pos.ABFPosBuchNetto, Pos.ABFPosEKPreis, Pos.ABFPosBuchNetto / Pos.ABFPosMenge AS EPreis, EPreis - Pos.ABFPosEKPreis AS Erloes, Pos.ABFPosMenge AS bestellt, Pos.ABFPosArtNr, Pos.ABFPosName1, (SELECT SUM(subPos.ABFPosMenge) FROM ABFDok subDok INNER JOIN ABFPos subPos ON subDok.ABFDocID = subPos.ABFPosdocID WHERE subDok.ABFDocAuftragNr = Dok.ABFDocAuftragNr AND subPos.ABFPosArtNr = Pos.ABFPosArtNr AND subDok.ABFDocOptFertig = False AND subDok.ABFDocVisType = 2 AND subPos.ABFPosEPreis > 0 AND subPos.ABFPosType IN (0, 7) AND subPos.ABFPosNr <> '') AS geliefert, ArtMenge.ArtBestand FROM ABFDok Dok INNER JOIN ABFPos Pos ON Dok.ABFDocAuftragID = Pos.ABFPosDocID INNER JOIN ArtMenge ON Pos.ABFPosArtNr = ArtMenge.ArtMengeNr WHERE Dok.ABFDocOptFertig = False AND Dok.ABFDocVisType = 1 AND Pos.ABFPosEPreis > 0 AND Pos.ABFPosType IN (0, 7) AND Pos.ABFPosNr <> '' ORDER BY Dok.ABFDocAuftragNr;
Delphi-Quellcode:
Kann mir hier wieder jemand helfen? Ich freue mich.
Syntaxfehler (fehlender Operator) in Abfrageausdruck 'Dok.ABFDocAuftragID = Pos.ABFPosDocID
INNER JOIN ArtMenge ON Pos.ABFPosArtNr = ArtMenge.ArtMengeNr' LG Harry P.S. Irgendwie lassen sich die Zeilen innerhalb des Delphi Codes nicht farblich markieren. |
AW: SQL Query erweitern?
Man kann auch due Code-Tags CODE=SQL verwenden, dann stellt das Forum das ggf. anders dar, anderes Highlighting.
Zum Fehler kann ich nichts sagen, sieht eigentlich richtig aus. Aber ist das vielleicht in der tatsächlichen Anwendung anders, fehlt da ein Komma irgendwo oder ähnliches. Ein Alias für ArtMenge (macht keinen Unterschied, klar) aber könnte vielleicht einen besseren Hinweis liefern, wo der Fehler tatsächlich passiert? |
AW: SQL Query erweitern?
Auf den ersten Blick konnte ich keinen Syntaxfehler sehen.
Bist du sicher, dass alle Bezeichner korrekt sind? Soweit ich erkennen kann, enthalten alle Tabellenfelder als Prefix auch den Tabellennamen (ABFDoc<Feldname>, ABFPos<Feldname>). Bei der Tabelle ArtMenge fällt mir aber folgendes auf:
Die Fehlermeldung ist dann möglicherweise "nur" ein Folgefehler. Oder ich übersehe doch einen Syntaxfehler :wink: [EDIT] Das Problem ist ACCESS. Diese "Datenbank" unterstützt nur ein join. Mehrere gehen nur mit Tricks. Was für dich passt kannst du dir dann mal selbst ansehen: ![]() |
AW: SQL Query erweitern?
Ich kenne Deine Datenbank (MS Access) nicht weiter, habe nie damit gearbeitet. Probier aber mal der Tabelle ArtMenge einen Alias im JOIN zu geben
SQL-Code:
Vielleicht ist Access da auch strikter und will diesen...
INNER JOIN
ArtMenge AM ON Pos.ABFPosArtNr = AM.ArtMengeNr |
AW: SQL Query erweitern?
Danke für die Hilfe.
Das Feld das hinzugefügt werden soll ist ArtBestand aus der Tabelle ArtMenge. Hier habe ich wegen der Übsersichtlichkeit ein reduziertes Query was läuft:
Delphi-Quellcode:
Hab also das M hinter ArtMenge M ON Pos.ABFPosArtNr = M.ArtMengeNr eingefügt, ohne ging wohl nicht.
SELECT
Dok.ABFDocAuftragNr, Pos.ABFPosArtNr, Pos.ABFPosName1, Pos.ABFPosDocID, M.ArtBestand, (SELECT SUM(subPos.ABFPosMenge) FROM ABFDok subDok INNER JOIN ABFPos subPos ON subDok.ABFDocID = subPos.ABFPosdocID WHERE subDok.ABFDocAuftragNr = Dok.ABFDocAuftragNr AND subPos.ABFPosArtNr = Pos.ABFPosArtNr AND subPos.ABFPosNr <> '') AS geliefert FROM (ABFDok Dok INNER JOIN ABFPos Pos ON Dok.ABFDocAuftragID = Pos.ABFPosDocID) INNER JOIN ArtMenge M ON Pos.ABFPosArtNr = M.ArtMengeNr WHERE Dok.ABFDocOptFertig = False AND Dok.ABFDocVisType = 1 AND Pos.ABFPosEPreis > 0 AND Pos.ABFPosType IN (0, 7) AND Pos.ABFPosNr <> '' ORDER BY Dok.ABFDocAuftragNr; Vielen Dank. LG Harry |
AW: SQL Query erweitern?
Laut
![]()
SQL-Code:
SELECT
Dok.ABFDocAuftragNr, Pos.ABFPosArtNr, Pos.ABFPosName1, AM.ArtBestand, (SELECT SUM(subPos.ABFPosMenge) FROM ABFDok subDok INNER JOIN ABFPos subPos ON subDok.ABFDocID = subPos.ABFPosdocID WHERE subDok.ABFDocAuftragNr = Dok.ABFDocAuftragNr AND subPos.ABFPosArtNr = Pos.ABFPosArtNr AND subPos.ABFPosNr <> '') AS geliefert FROM (ABFDok Dok INNER JOIN ABFPos Pos ON Dok.ABFDocAuftragID = Pos.ABFPosDocID) INNER JOIN ArtMenge AM ON AM.ArtMengeNr= Pos.ABFPosArtNr WHERE Dok.ABFDocOptFertig = False AND Dok.ABFDocVisType = 1 AND Pos.ABFPosEPreis > 0 AND Pos.ABFPosType IN (0, 7) AND Pos.ABFPosNr <> '' ORDER BY Dok.ABFDocAuftragNr; |
AW: SQL Query erweitern?
Ah, es waren die Klammern... :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 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