AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Query erweitern?

Ein Thema von HCB · begonnen am 9. Jan 2025 · letzter Beitrag vom 10. Jan 2025
Antwort Antwort
HCB

Registriert seit: 12. Feb 2020
195 Beiträge
 
Delphi 12 Athens
 
#1

SQL Query erweitern?

  Alt Gestern, 18:09
Datenbank: Access mdb • Version: 2003 • Zugriff über: SQL / Delphi FireDac
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:
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;
Ich erhalte hier die folgende Fehlermeldung:
Delphi-Quellcode:
Syntaxfehler (fehlender Operator) in Abfrageausdruck 'Dok.ABFDocAuftragID = Pos.ABFPosDocID
INNER JOIN
ArtMenge ON Pos.ABFPosArtNr = ArtMenge.ArtMengeNr
'
Kann mir hier wieder jemand helfen? Ich freue mich.

LG Harry
P.S. Irgendwie lassen sich die Zeilen innerhalb des Delphi Codes nicht farblich markieren.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: SQL Query erweitern?

  Alt Gestern, 19:02
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?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.357 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: SQL Query erweitern?

  Alt Heute, 06:31
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:
  • ArtMenge.ArtBestand hat nur "Art" als Prefix
  • Beim Inner Join steht aber wieder ArtMenge bei den Feldern als Prefix (ArtMenge.ArtMengeNr)
Vielleicht wird in der Tabelle ArtMenge von eurem Standard abgewichen und die verwendest daher die falschen Feldnamen.
Die Fehlermeldung ist dann möglicherweise "nur" ein Folgefehler.

Oder ich übersehe doch einen Syntaxfehler

[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: Bei Google suchenAccess SQL multiple joins
Peter

Geändert von Jasocul (Heute um 06:41 Uhr) Grund: Neue Infos
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
683 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: SQL Query erweitern?

  Alt Heute, 09:09
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:
 INNER JOIN
    ArtMenge AM ON Pos.ABFPosArtNr = AM.ArtMengeNr
Vielleicht ist Access da auch strikter und will diesen...
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
195 Beiträge
 
Delphi 12 Athens
 
#5

AW: SQL Query erweitern?

  Alt Heute, 09:21
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:
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;
Hab also das M hinter ArtMenge M ON Pos.ABFPosArtNr = M.ArtMengeNr eingefügt, ohne ging wohl nicht.
Vielen Dank.

LG Harry

Geändert von HCB (Heute um 09:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.636 Beiträge
 
Delphi 12 Athens
 
#6

AW: SQL Query erweitern?

  Alt Heute, 09:37
Laut https://stackoverflow.com/questions/...join-statement könnte es möglicherweise so oder ähnlich funktionieren:
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
683 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: SQL Query erweitern?

  Alt Heute, 10:43
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:
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;
Hab also das M hinter ArtMenge M ON Pos.ABFPosArtNr = M.ArtMengeNr eingefügt, ohne ging wohl nicht.
Vielen Dank.

LG Harry
Gut, dann ist Access so strikt, wie ich vermutete, und will das Tabellen-Alias.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 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 by Thomas Breitkreuz