Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Beate1953 am Mai 28, 2014, 10:28:11

Titel: SQLstring abändern
Beitrag von: Beate1953 am Mai 28, 2014, 10:28:11
Hallo,

ich möchte alle Geräte sehen, die bei der vorletzten Inventur ( zwischen VoAnfdat und VoEnddat) in einer bestimmten Abteilung waren (z.B. Abt=7) und bei der letzten Inventur (zwischen LAnfdat und LEnddat) nicht mehr dort sind. Also alle Geräte, die von Abt=7 "weggewandert" sind.

Dazu habe ich folgenden SQLstring:
SQLstr = "SELECT DISTINCT Posten.Barcode, Posten.[Bezeichnung (Typ, genaue Bezeichnung)], Posten.Gerätegruppe, Posten.Standort, "
SQLstr = SQLstr & "Inventur.InvOrt, Inventur.Invdatum FROM Posten LEFT JOIN Inventur ON (Posten.Barcode = Inventur.INVBarcode) "
SQLstr = SQLstr & "WHERE Barcode In (SELECT Barcode FROM QYPoMitInv WHERE Invdatum "
SQLstr = SQLstr & "BETWEEN " & Format(VoAnfdat, "\#yyyy-mm-dd\#") & " AND " & Format(VoEnddat, "\#yyyy-mm-dd\#") & " AND "
SQLstr = SQLstr & "InvOrt= " & Abt & ") "
SQLstr = SQLstr & "AND (InvOrt <> " & Abt & " OR IsNull(InvOrt) OR InvOrt='') AND (Invdatum "
SQLstr = SQLstr & "Between " & Format(LAnfdat, "\#yyyy-mm-dd\#") & " AND " & Format(LEnddat, "\#yyyy-mm-dd\#") & ")"


Access findet korrekt alle Geräte, die in der vorletzten Inventur in Abt 7 waren und in der letzten Inventur in einer anderen Abteilung.

Was er nicht findet - aber finden soll!!! - sind die Geräte, die in der vorletzten Inventur in Abt 7 waren aber in der letzten Inventur gar keinen DS aufweisen (also Geräte, die bei der letzten Inventur vergessen worden sind oder "verschwunden" sind).

Wie muss ich meinen SQLstring dafür abändern?

Vielen Dank im Voraus
Beate1953
Titel: Re: SQLstring abändern
Beitrag von: MaggieMay am Mai 28, 2014, 11:36:15
Hallo Beate,

der LEFT JOIN ist schon mal der richtige Ansatz, nur musst du auch bei den Kriterien berücksichtigen, dass die Daten fehlen können.
Versuche es mal hiermit:WHERE
Barcode In (SELECT Barcode FROM QYPoMitInv WHERE [color=red]Invdatum BETWEEN #2012-01-01# AND #2012-12-31# AND InvOrt= 7[/color]) AND
(InvOrt <> 7 OR InvOrt Is Null) AND
(Invdatum Between #2013-01-01# AND #2013-12-31# OR Invdatum Is Null)
Wie mit dem Kriterium in der Unterabfrage umzugehen ist, kann ich nicht beurteilen, da ich die zugrunde liegende Abfrage nicht kenne.
Titel: Re: SQLstring abändern
Beitrag von: Beate1953 am Mai 28, 2014, 19:07:54
Hallo,

vielen Dank für die Antwort. Das mit dem Null hilft, wenn in der letzten Inventur ein Datensatz eingegeben wurde, bei dem im Feld InvOrt nichts steht. Vielen Dank.

Aber das Problem ist, wenn in der letzten Inventur gar kein Datensatz eingegeben wurde. Wie muss ich dafür den SQLstring abändern?

Viele Grüße
Beate1953
Titel: Re: SQLstring abändern
Beitrag von: MaggieMay am Mai 30, 2014, 15:01:04
Hallo Beate,

welche Rolle spielt denn die Tabelle "Posten" dabei und wie lautet der Code der Abfrage "QYPoMitInv"?