Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Abfrage "letzter Wert" liefert falsches Ergebnis

Begonnen von Klaus S. aus B, Januar 27, 2016, 09:36:53

⏪ vorheriges - nächstes ⏩

Klaus S. aus B

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

ebs17

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).
Mit freundlichem Glück Auf!

Eberhard

MzKlMu

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 ?
Gruß Klaus

Klaus S. aus B

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

MzKlMu

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.
Gruß Klaus

Klaus S. aus B

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?

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard

Klaus S. aus B