Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Klaus S. aus B am Januar 27, 2016, 09:36:53

Titel: Abfrage "letzter Wert" liefert falsches Ergebnis
Beitrag von: Klaus S. aus B am Januar 27, 2016, 09:36:53
Hallo zusammen,

ich habe (seit Gestern oder Vorgestern) ein ganz seltsames Phänomen.

Ich habe eine Tabelle "Version", aus der ich mittels einer Abfrage den letzten Wert auslese (und in einem Formularkopf anzeige).

Läuft seit Monaten einwandfrei.

Seit kurzem gibt die Abfrage aber den falschen Wert zurück. Es gibt schon zwei neuere Einträge, aber es wird immer ein bestimmter Wert angezeigt.

Um das Verhalten zu überprüfen, habe ich eine neue Abfrage erstellt und erstmal alle DS abgefragt. Das hat funktioniert, es werden auch die neuesten angezeigt.
Dann habe ich diese Abfrage geändert und immer den "letzten Wert" abgefragt. Und auch hier kommt der selbe (falsche, alte) DS als Ergebnis.  ???

Hier mal die Abfragedefinition:
SELECT Last(tbl_version.ID_ver) AS LetzterWertvonID_ver, Last(tbl_version.Ver) AS LetzterWertvonVer, Last(tbl_version.Dat) AS LetzterWertvonDat
FROM tbl_version;


Was kann das sein?

Gruß
Klaus
Titel: Re: Abfrage "letzter Wert" liefert falsches Ergebnis
Beitrag von: ebs17 am Januar 27, 2016, 09:59:37
First und Last sind höchst unsichere Kandidaten, denn sie bedingen zum Funktionieren eine bestimmte Reihenfolge der Datensätze.
Während der Abarbeitung von Abfragen ergeben sich aber Reihenfolgen nach dem verwendeten Ablaufplan und eingesetzten Indizes, sprich, das kann man im Vorfeld nicht überschauen.

ZitatLäuft seit Monaten einwandfrei.

Glück gehört auch zum Leben. Aber manche Dinge ändern sich.

Als Alternative könnte man eine simple TOP-X-Gestaltung verwenden (da muss auch explizit sortiert werden).
Titel: Re: Abfrage "letzter Wert" liefert falsches Ergebnis
Beitrag von: MzKlMu am Januar 27, 2016, 10:05:38
Hallo,
Last ist zur Bestimmung des letzten Wertes völlig ungeeignet. Ist auch mMn eine irreführende Bezeichnung. Last liefert einen zufälligen Wert aus der Datensatzgruppe. Oftmals geht das gut, aber eben nicht zuverlässig. Das kannst Du in der Hilfe zu Last auch nachlesen.
Zitat von: Hilfe zu DLast (Last)Mit den Funktionen DFirst und DLast können Sie einen zufälligen Wert eines bestimmten Feldes in einer Tabelle oder einer Abfrage zurückgeben, wenn Sie einen beliebigen Wert aus diesem Feld benötigen.

Du benötigst ein Kriterium an dem Du den letzten Wert fest machen kannst. Z.B. DMax.
Was ist denn die ID für eine Wert, ein Autowert ?
Titel: Re: Abfrage "letzter Wert" liefert falsches Ergebnis
Beitrag von: Klaus S. aus B am Januar 27, 2016, 11:31:42
Hallo,

ja mein ID ist ein Autowert.
Habe mal DMax in der Hilfe angeschaut. Dabei ist mir aber keine Idee gekommen, wie mir das helfen könnte.

...ist ja spannend. Welcher Programmierer kommt auf so eine Idee, so eine Funktion zu bauen und sie dann so zu benamen?  ;D

Gruß
Klaus
Titel: Re: Abfrage "letzter Wert" liefert falsches Ergebnis
Beitrag von: MzKlMu am Januar 27, 2016, 11:38:59
Hallo,
das geht auch ohne Abfrage direkt in einem Feld.
=Max(ID_ver)
Oder, wenn die Tabelle nicht in der Datenherkunft des Formulars ist:
=DomMax("ID_Ver";"tbl_version")
Jeweils als Eintrag in einem Feld des Formularkopfes.
Die Abfrage wird in beiden Fällen nicht benötigt.
Titel: Re: Abfrage "letzter Wert" liefert falsches Ergebnis
Beitrag von: Klaus S. aus B am Januar 27, 2016, 11:50:33
Hallo Klaus,

super, den richtigen ID_ver habe ich damit.

kannst Du mir auch einen Tipp geben, wie ich an den dazugehörigen Wert für "ver" (die eigentliche Version, die ich anzeigen will) bekomme?

Gruß
Klaus

@ebs: was ist eine "Top-x" Gestaltung?
Titel: Re: Abfrage "letzter Wert" liefert falsches Ergebnis
Beitrag von: ebs17 am Januar 27, 2016, 12:05:07
SELECT TOP 1
   ID_ver,
   Ver,
   Dat
FROM
   tbl_version
WHERE
   Dat <= Date()
ORDER BY
   Dat DESC

Die WHERE-Klausel würde dann auch bei vorrätig für die Zukunft eingetragenen Versionen auf die aktuelle filtern.
Titel: Re: Abfrage "letzter Wert" liefert falsches Ergebnis
Beitrag von: Klaus S. aus B am Januar 27, 2016, 14:19:32
Super, wieder etwas gelernt.

Vielen Dank!