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
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).
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 ?
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
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.
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?
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.
Super, wieder etwas gelernt.
Vielen Dank!