Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Höchstens ein Datensatz kann von dieser Unterabfrage zurückgegeben werden

Begonnen von Beate1953, August 27, 2014, 12:04:15

⏪ vorheriges - nächstes ⏩

Beate1953

Hallo,

ich habe folgenden Code, der mir die Datensätze anzeigt, die z.B. in 2014 keinen E-Check hatten und dazu den letzten bekannten Standort des Gerätes. Jedes Gerät hat einen oder mehrere DS in der Tabelle E-Check, von denen jeder eine Ortsangabe hat; vom jüngsten dieser DS möchte ich den Ort haben.

Das seltsame ist, dass dieser Code monatelang funktioniert hat und jetzt zeigt er plötzlich die Fehlermeldung "Höchstens ein Datensatz kann von dieser Unterabfrage zurückgegeben werden." Ist da doch ein Fehler im Code? Denn alles andere wie Neustart, Bericht neu erstellen, Alle Objekte in eine neue DB importieren etc. habe ich bereits ohne Erfolg ausprobiert.

Private Sub Report_Open(Cancel As Integer)
SQLstr = "SELECT DISTINCT Posten.Barcode, Posten.[Bezeichnung (Typ, genaue Bezeichnung)], Gerätegruppen.Bezeichnung, Abteilungen.Ort "
SQLstr = SQLstr & "FROM (Gerätegruppen RIGHT JOIN Posten ON Gerätegruppen.GerätegruppeID = Posten.Gerätegruppe) LEFT JOIN (Abteilungen RIGHT JOIN [E-Check] ON Abteilungen.ID = [E-Check].Ort) ON Posten.Barcode = [E-Check].Barcode "
SQLstr = SQLstr & "WHERE ((Posten.Barcode Not In (SELECT Posten.Barcode FROM QRYGesamtbericht WHERE [E-Check].Datum "
SQLstr = SQLstr & "Between " & Format(Anfdat, "\#yyyy-mm-dd\#") & " AND " & Format(Enddat, "\#yyyy-mm-dd\#")
SQLstr = SQLstr & ") AND "
SQLstr = SQLstr & "(Posten.Barcode = [E-Check].Barcode AND [E-Check].ID = "
SQLstr = SQLstr & "(SELECT top 1 ID FROM [E-Check] AS E WHERE Posten.Barcode = E.Barcode ORDER BY E.Datum Desc))) "
SQLstr = SQLstr & "OR ((([E-Check].Barcode) = 0 Or ([E-Check].Barcode) Is Null))) "

SQLstr = SQLstr & "AND Posten.Entfernen = False "
SQLstr = SQLstr & "ORDER BY Abteilungen.Ort "
Me.RecordSource = SQLstr
End Sub

Ich bin für jede Hilfe dankbar!
Beate1953

DF6GL

Hallo,

ziemlich undurchsichtig, der SQL-String....

Versuch mal:

SQLstr = SQLstr & "(Posten.Barcode = [E-Check].Barcode AND [E-Check].ID Exists "
SQLstr = SQLstr & "(SELECT top 1 ID FROM [E-Check] AS E WHERE Posten.Barcode = E.Barcode ORDER BY E.Datum Desc))) "

Beate1953

Hallo,

wenn ich Exists verwende, meldet er 2x hintereinander einen Syntaxfehler.

Ich habe testweise einmal IN anstelle von Exists verwendet und erhalte damit wenigstens einen Teil der zutreffenden Datensätze. Und zwar ist es so:

Es fanden E-Check-Messungen in 2011, 2013 und 2014 statt.
Wenn ich für Anfdat und Enddat die Daten aus 2014 nehme, finde ich richtig alle DS die entweder nur in 2013 oder (in 2011 und 2013  aber nicht in 2014) einen E-Check hatten.

Was ich nicht finde, sind die Datensätze, die nur in 2011 einen E-Check hatten. Woran kann das liegen?

Macht der SQLstring mit IN statt Exists überhaupt einen Sinn? Ich blicke da nämlich von der Logik her nicht mehr durch.

Viele Grüße
Beate1953



DF6GL

Hallo,

"Ich blicke da nämlich von der Logik her nicht mehr durch."

ich ja auch nicht...

"IN" würde eh besser "passen" als Exists


Versteh diese Beschreibung hier nicht:

ZitatWenn ich für Anfdat und Enddat die Daten aus 2014 nehme, finde ich richtig alle DS die entweder nur in 2013 oder (in 2011 und 2013  aber nicht in 2014) einen E-Check hatten.

ZitatWas ich nicht finde, sind die Datensätze, die nur in 2011 einen E-Check hatten. Woran kann das liegen?

Da darf halt nicht "not in (select.." verwendet werden. Damit schließt Du ja den gwünschten Datumsbereich aus....

Beate1953

Hallo,
ich möchte alle Geräte finden, die für 2014 keinen DS in E-Check haben. Außerdem möchte ich zu jedem dieser Geräte den Standort aus dem jüngsten DS in E-Check (=letzter bekannter Standort) haben.

Ich habe folgende Konstellationen:
1.) Gerät hat nur für 2011 einen DS in E-Check
2.)Gerät hat nur für 2013 einen DS in E-Check
3.) Gerät hat für 2011 und 2013 Datensätze in E-Check, aber nicht für 2014

Die Konstellationen 2 und 3 finde ich mit meinem SQLstring. Konstellation 1 finde ich nicht!
Woran kann das liegen?

Viele Grüße
Beate1953


Beate1953

Hallo,

jetzt findet er wunderbarer Weise die DS mit Konstellation 1 ebenfalls, obwohl ich am Code nichts geändert habe. Bin gespannt, wie lange dieser Bericht funktioniert. Mit dem = statt IN hat es ja auch monatelang funktioniert.

Wunder der EDV!!!

Jedenfalls vielen Dank für Eure Hilfe
Viele Grüße
Beate1953