AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Access SQL Hilfe für Query gesucht
Thema durchsuchen
Ansicht
Themen-Optionen

Access SQL Hilfe für Query gesucht

Ein Thema von HCB · begonnen am 15. Apr 2024 · letzter Beitrag vom 16. Apr 2024
Antwort Antwort
Seite 1 von 2  1 2      
HCB

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

Access SQL Hilfe für Query gesucht

  Alt 15. Apr 2024, 18:00
Datenbank: Access • Version: 2003 • Zugriff über: FireDac
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Access SQL Hilfe für Query gesucht

  Alt 15. Apr 2024, 18:49
einfach das andere Statement komplett als where not exists(....) mit anhängen
oder ein LEFT JOIN gegegen das andere Dokument und ein IS NULL auf das ID-Feld davon ins WHERE.
$2B or not $2B
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
177 Beiträge
 
Delphi 12 Athens
 
#3

AW: Access SQL Hilfe für Query gesucht

  Alt 16. Apr 2024, 11:43
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
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

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

AW: Access SQL Hilfe für Query gesucht

  Alt 16. Apr 2024, 11:59
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.
Peter
  Mit Zitat antworten Zitat
HCB

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

AW: Access SQL Hilfe für Query gesucht

  Alt 16. Apr 2024, 13:00
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
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

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

AW: Access SQL Hilfe für Query gesucht

  Alt 16. Apr 2024, 14:08
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.
Peter
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
177 Beiträge
 
Delphi 12 Athens
 
#7

AW: Access SQL Hilfe für Query gesucht

  Alt 16. Apr 2024, 15:07
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 = 'O004714and 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 = 'R042118and 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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Access SQL Hilfe für Query gesucht

  Alt 16. Apr 2024, 15:08
2 mal WHERE geht nicht, das hat mit Delphi nichts zu tun.
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 Jasocul
Jasocul

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

AW: Access SQL Hilfe für Query gesucht

  Alt 16. Apr 2024, 15:17
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.
Peter
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
177 Beiträge
 
Delphi 12 Athens
 
#10

AW: Access SQL Hilfe für Query gesucht

  Alt 16. Apr 2024, 15:42
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 = 'O004714and 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 = 'R042118and BB.ABFPosType = 0 and AA.ABFDocKundenNr = 'D018543'
                  and BB.Artikelnummer = B.Artikelnummer
                  )
Zur besseren Übersicht anbei der Inhalt der Tabellen.

LG Harry
Miniaturansicht angehängter Grafiken
tabellen.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:18 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