Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Access SQL Hilfe für Query gesucht (https://www.delphipraxis.net/214974-access-sql-hilfe-fuer-query-gesucht.html)

HCB 15. Apr 2024 17:00

Datenbank: Access • Version: 2003 • Zugriff über: FireDac

Access SQL Hilfe für Query gesucht
 
Hallo Programmierprofis,
ich möchte gerne sehen, welche Artikel aus einem Angebot nicht gekauft wurden. Bis jetzt sieht meine Abfrage so aus:
(Hier zeigt es die 4 angebotenen Artikel aus dem Angebot(Offer) korrekt)
Delphi-Quellcode:
SELECT A.ABFDocErfNr,A.ABFDocKundenNr,B.ABFPosArtNr,B.ABFPosName1
FROM ABFPos AS B
     INNER JOIN ABFDok AS A ON B.ABFPosDocId = A.ABFDocID
where A.ABFDocErfNr like 'O*' and B.ABFPosType = 0  and A.ABFDocKundenNr = 'D018543';
der Kunde hat aber nur einen Artikel aus dem Angebot bestellt und die dazugehörige Rechnung wird hier korrekt angezeigt)
Delphi-Quellcode:
SELECT A.ABFDocErfNr,A.ABFDocKundenNr,B.ABFPosArtNr,B.ABFPosName1
FROM ABFPos AS B
     INNER JOIN ABFDok AS A ON B.ABFPosDocId = A.ABFDocID
where A.ABFDocErfNr like 'R*' and B.ABFPosType = 0  and A.ABFDocKundenNr = 'D018543';
Das Problem das ich habe ist, zu vergleichen welche Artikelnummern aus dem Angebot sich nicht in der Rechnung wiederfinden. Damit ich nur die Artikel sehe, welche nicht bestellt wurden (vermutlich zu teuer). Die Erfassungsnummern für Angebote beginnen mit O, die Lieferscheine mit L und Rechnungen mit R.

Würde mir jemand eine Hilfestellung dazu geben? Wie würdet Ihr das lösen?
Ich freue mich über jeden Tipp, Vielen Dank.

LG Harry

himitsu 15. Apr 2024 17:49

AW: Access SQL Hilfe für Query gesucht
 
einfach das andere Statement komplett als
Delphi-Quellcode:
where not exists(....)
mit anhängen
oder ein LEFT JOIN gegegen das andere Dokument und ein
Delphi-Quellcode:
IS NULL
auf das ID-Feld davon ins WHERE.

HCB 16. Apr 2024 10:43

AW: Access SQL Hilfe für Query gesucht
 
Danke himitsu,

die Dokumente Angebot und Rechnung liegen in der selben Tabelle ABFDok, die Artikel-Positionen dazu in der Tabelle ABFPos.
Nun müsste ich zuerst das Angebot holen und mit der zugehörigen Rechnung vergleichen, ob auch alle angebotenen Artikel sich auf der Rechnung befinden.
Wenn nicht, sollte die Abfrage nur die Positionen auswerfen, die nicht auf der Rechnung sind.

Mit 'where not exists' hat es nicht funktioniert. Vielleicht habe ich die Abfrage falsch.

LG Harry

Jasocul 16. Apr 2024 10:59

AW: Access SQL Hilfe für Query gesucht
 
Wenn ich die SQL-Satements richtig interpretiere, vergleichst du alle Angebote mit allen Rechnungen des Kunden (like O*, bzw like R*).
In deiner Ausgangsvoraussetzung schreibst du aber, dass du nur die Rechnung zum zugehörigen Angebot vergleichen willst.

Kann es sein, dass dir im SQL noch die passende Verknüpfung fehlt?

Ansonsten einfach mal deinen Versuch mit dem "not Exists" hier zeigen.

HCB 16. Apr 2024 12:00

AW: Access SQL Hilfe für Query gesucht
 
Hier so wie ich es probiert habe:
Delphi-Quellcode:
SELECT A.ABFDocErfNr,A.ABFDocKundenNr,B.ABFPosArtNr,B.ABFPosName1
FROM ABFPos AS B
     INNER JOIN ABFDok AS A ON B.ABFPosDocId = A.ABFDocID
where A.ABFDocErfNr like 'O*' and B.ABFPosType = 0 and A.ABFDocKundenNr = 'D018543'
where not exists (SELECT A.ABFDocErfNr,A.ABFDocKundenNr,B.ABFPosArtNr,B.ABFPosName1
                  FROM ABFPos AS B
                  INNER JOIN ABFDok AS A ON B.ABFPosDocId = A.ABFDocID
                  where A.ABFDocErfNr like 'R*' and B.ABFPosType = 0 and A.ABFDocKundenNr = 'D018543'
                  )
LG Harry

Jasocul 16. Apr 2024 13:08

AW: Access SQL Hilfe für Query gesucht
 
Da bestätigt sich mein Verdacht, dass du ALLE Angebote mit ALLEN Rechnungen des Kunden vergleichst. Außerdem brauchst du noch die Verbindung der Angebotspositionen zu den Rechnungspositionen
Du musst daher deine "like" anpassen. und die Artikelverbindung einbauen. Etwa so:
Code:
SELECT A.ABFDocErfNr,A.ABFDocKundenNr,B.ABFPosArtNr,B.ABFPosName1
FROM ABFPos AS B
     INNER JOIN ABFDok AS A ON B.ABFPosDocId = A.ABFDocID
where A.ABFDocErfNr = 'Angebotsnummer' and B.ABFPosType = 0 and A.ABFDocKundenNr = 'D018543'
where not exists (SELECT 1
                  FROM ABFPos AS BB
                  INNER JOIN ABFDok AS AA ON BB.ABFPosDocId = AA.ABFDocID
                  where AA.ABFDocErfNr = 'Rechnungsnummer' and BB.ABFPosType = 0 and AA.ABFDocKundenNr = 'D018543'
                  and BB.Artikelnummer = B.Artikelnummer
                  )
Angebotsnummer und Rechnungsnummer musst du natürlich noch eintragen. Vermutlich lässt sich das auch voneinander ableiten, aber dafür müsste man den DB-Aufbau kennen. Ich habe noch die Aliase angepasst, damit man die Artikelverbindung erstellen kann. Ich bin jetzt davon ausgegangen, dass dafür die Artikelnummer verwendet werden muss. Aber auch das hängt vom DB-Aufbau ab.

HCB 16. Apr 2024 14:07

AW: Access SQL Hilfe für Query gesucht
 
Vielen lieben Dank Jasocul, leider bringt mir das jetzt einen Fehler:

Syntaxfehler (fehlender Operator) in Abfrageausdruck 'A.ABFDocErfNr = 'O004714' and B.ABFPosType = 0 and A.ABFDocKundenNr = 'D018543'
where not exists (SELECT
FROM ABFPos AS BB
INNER JOIN ABFDok AS AA ON BB.ABFPosDocId = AA.ABFDocID
where AA.ABFDocErfNr = 'R042118' and BB.ABFPosType = 0 and AA.ABFDocKundenNr = 'D018543'
and BB.Artikelnummer = B.Artikelnummer
)'

so lautet nun die Abfrage die den Fehler bringt:

Delphi-Quellcode:
SELECT A.ABFDocErfNr,A.ABFDocKundenNr,B.ABFPosArtNr,B.ABFPosName1
FROM ABFPos AS B
     INNER JOIN ABFDok AS A ON B.ABFPosDocId = A.ABFDocID
where A.ABFDocErfNr = 'O004714' and B.ABFPosType = 0 and A.ABFDocKundenNr = 'D018543'
where not exists (SELECT
                  FROM ABFPos AS BB
                  INNER JOIN ABFDok AS AA ON BB.ABFPosDocId = AA.ABFDocID
                  where AA.ABFDocErfNr = 'R042118' and BB.ABFPosType = 0 and AA.ABFDocKundenNr = 'D018543'
                  and BB.Artikelnummer = B.Artikelnummer
                  )
Welcher Operator fehlt denn hier? Kann leider nichts erkennen. Bin Anfänger was die Programmierung mit Delphi betrifft :oops:

DeddyH 16. Apr 2024 14:08

AW: Access SQL Hilfe für Query gesucht
 
2 mal WHERE geht nicht, das hat mit Delphi nichts zu tun.

Jasocul 16. Apr 2024 14:17

AW: Access SQL Hilfe für Query gesucht
 
Den Fehler habe ich übersehen. Das zweite "where" in der Hauptabfrage durch ein "and" ersetzen sollte genügen.
Im Subselect (nach dem "not exists") muss nach dem select noch irgendwas stehen. Ich trage da meistens eine "1" ein, da Feldinhalte an der Stelle keine Rolle spielen. Man kann aber auch ein "*" oder Feldnamen eintragen.

HCB 16. Apr 2024 14:42

AW: Access SQL Hilfe für Query gesucht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
jetzt hab ich den Fehler:
2 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben!

Mit dieser Änderung:
Delphi-Quellcode:
SELECT A.ABFDocErfNr,A.ABFDocKundenNr,B.ABFPosArtNr,B.ABFPosName1
FROM ABFPos AS B
     INNER JOIN ABFDok AS A ON B.ABFPosDocId = A.ABFDocID
where A.ABFDocErfNr = 'O004714' and B.ABFPosType = 0 and A.ABFDocKundenNr = 'D018543'
and not exists (SELECT 1
                  FROM ABFPos AS BB
                  INNER JOIN ABFDok AS AA ON BB.ABFPosDocId = AA.ABFDocID
                  where AA.ABFDocErfNr = 'R042118' and BB.ABFPosType = 0 and AA.ABFDocKundenNr = 'D018543'
                  and BB.Artikelnummer = B.Artikelnummer
                  )
Zur besseren Übersicht anbei der Inhalt der Tabellen.

LG Harry


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 Uhr.
Seite 1 von 2  1 2      

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