PDA

Vollständige Version anzeigen : ErsterWert und LetzterWert nehmen falsche Sortierung


micmen
02.04.2004, 21:23
Hallo,
ich habe mit Ac2k ein Problem mit einer gruppierten Abfrage:

Ich habe in einem Formular ein Unterformular in Listenansicht, das seine Daten aus zwei Tabellen beziehen soll, die eine 1:n-Beziehung zueinander haben. Dabei muß jeder Datensatz (jede Zeile) des Unterformulars nur zwei Felder anzeigen, aus jeder Tabelle eines. Ich will die Situation mal mit nur 6 Feldern beschreiben (die Tabellen haben mehr):

Tabelle 1:
ID1 (Primärschlüssel)
FeldA (nicht eindeutig)

Tabelle 2:
ID2 (Primärschlüssel)
vID1 (Verweis auf ID1 von Tabelle 1, nicht eindeutig)
FeldB (nicht eindeutig)
FeldC (nicht eindeutig)

Die Beziehung besteht zwischen ID1 (1-Seite) und vID1 (n-Seite).

Das Formular soll aus allen Datensätzen FeldA auflisten und jeweils FeldC aus dem "ersten" Datensatz von Tab2 mit ausgeben. Da für jeden Datensatz aus Tab1 n Datensätze aus Tab2 existieren können, ich aber nur eine Zeile pro Datensatz aus Tab1 haben darf, muß ich auf ID1 gruppieren (und kann FeldA problemlos noch mit in die Gruppierung nehmen).
Innerhalb einer "Gruppe" von Datensätzen aus Tab2 (mit gleichem Inhalt in vID1) sollen diese normalerweise nach der ID2 sortiert sein (einem Autowert, also in Reihenfolge der Dateneingabe). Ab und zu ist aber in FeldB etwas eingetragen und dann sollen diese Inhalte in der Sortierung vorgehen. Und die Liste muß, wie gesagt, den ersten Eintrag für FeldC ausgeben. Eine "Gruppe" muß also zuerst aufsteigend nach FeldB und dann aufsteigend nach ID2 sortiert sein.

Das Problem:
Wenn ich in der gruppierten Abfrage für die Felder FeldB, ID2 und FeldC "ErsterWert" wähle, gibt sie mir die ersten Werte gemäß Sortierung der Tab2 aus. Sprich, ich bekomme den falschen Datensatz für FeldC, wenn FeldB im ersten Datensatz benutzt wurde und in der Sortierung hätte nach hinten rücken müssen.
Das verrückte ist, daß selbst wenn ich auf Tab2 eine Abfrage setze, die mir alle 4 Felder ausgibt und nur die Funktion hat, die Datensätze nach FeldB und ID2 aufsteigend zu sortieren, und ich dann mit der gruppierten Abfrage auf diese Hilfsabfrage statt direkt auf Tab2 schaue, immer noch die gleichen (falschen, unsortierten) Werte von FeldC herauskommen, genau exakt Sortierung in Tab2 (Autowert).

Laut Ac-Hilfe soll eine ORDER BY-Klausel aber von "ErsterWert" und "LetzterWert" berücksichtigt werden. Eine Sortierung innerhalb der gruppierten Abfrage hilft (natürlich...) auch nix.
Min von FeldB hilft mir leider auch nicht weiter, da ich dann nicht an den zugehörigen Inhalt von FeldC komme...


Ist das ein Access-Bug???
Kennt jemand das Problem oder weiß sonst eine Hilfe?

Vielen Dank!!

kama
03.04.2004, 08:52
Hallo
Das ist in der Tat die lösung

Laut Ac-Hilfe soll eine ORDER BY-Klausel aber von "ErsterWert" und "LetzterWert" berücksichtigt werden.

Bespiel

Du gruppierst aus eienm Datumsfeld

G_Monat:Format(Deinfeld;"mmmm")

sortiertt wird jetzt nach dem Alphabet

Wenns nun in chronologischer reihenfolge sien soll

Deinfeld>>>Erster wert wählen und hier die Sortierreihenfolge wählen.

micmen
05.04.2004, 13:27
Hi,
easy wurde getaket, das mit dem Schlafen erledige ich später!

Wenn das die Lösung sein soll, dann habe ich also wirklich auf meinen PCs einen Access-Bug, oder wie soll ich das verstehen? Ganz klar ist mir das nicht, denn die Antwort ist ja identisch mit dem, was ich gemäß meines Textes selbst gemacht habe und wobei genau das beschriebene Problem auftrat...


Mal das mit der Sortierung einzeln und deutlich formuliert:
Die erste Abfrage, die ich Hilfsabfrage genannt habe (da sie ja nichts anderes bewirkt, als die Sortierung der Datensätze der zweiten Tabelle zu ändern), kann ich sortieren, wie ich will, meine gruppierte Abfrage berücksichtigt das in keiner Weise. Selbst wenn ich genau die beiden Felder, für die ich den ersten Wert benötige, ab- statt aufsteigend sortiere, bringt die gruppierte Abfrage ein identisches Ergebnis, nämlich mit dem Datensatz des ersten Werts gemäß Reihenfolge in der zugrundeliegenden Tabelle (= Eingabe-Reihenfolge).
Die eigentliche, nämlich die gruppierte Abfrage kann ich zwar (genauso wie die erste) sortieren und das funktioniert auch bei der genauso wie bei der ersten, aber das ändert ja nun nichts mehr am Ergebnis der Abfrage, sondern nur an der Reihenfolge, in der sie mir das (falsche) Ergebnis anzeigt.


Also: Ich kann beide Abfragen sortieren und die Sortierungen funktionieren ganz normal. Was nicht funktioniert bzw. das Problem verursacht, ist, daß die zweite Abfrage die (korrekte) Sortierung der ersten ignoriert.

Worauf es ankäme ist, daß die gruppierte Abfrage für ihr Kriterium ErsterWert die richtige Sortierung ihrer Datenquelle (erste Abfrage) berücksichtigt, damit sie auch wirklich den Inhalt des ersten Datensatzes bringt. Sie nimmt stattdessen aber einen falschen Datensatz, nämlich den, der gemäß Reihenfolge der Eingabe in die Tabelle (zufällig) der erste ist. Und damit bringt sie ein falsches Ergebnis, was durch Sortieren natürlich nicht mehr korrigiert werden kann.


Ich hoffe, das ist jetzt verständlicher?
Oder ist es wirklich so, daß das bei jedem anderen funktioniert und nur ich (auf 2 Rechnern) einen Access-Fehler habe?

Danke nochmals!

kama
05.04.2004, 17:53
daß die zweite Abfrage die (korrekte) Sortierung der ersten ignoriert.

Das Verhalten ist IMHO ja auch richtig. es entsteht ja in der zweiten Abfrage eine vollkommen neue tabelle deren sortierkriterium du neu bestimmen musst.

Um dir weiterzuhelfen müsste man mal eine Test DB haben.

micmen
05.04.2004, 19:26
Hallo & merci,
das soll kein Problem sein...

Abfrage1 bringt durch die Gruppierung (korrekt) nur 2 Datensätze.
Gemäß der Sortierung von Abfrage2 sollten für den Datensatz "eins" der Text "D" und für "drei" der Text "F" ausgegeben werden, da von den 4 "eins"-Datensätzen der 4. den niedrigsten Wert in FeldB eingetragen hat und von den beiden "drei"-Datensätzen der 6. nichts in FeldB eingetragen hat.

Stattdessen gibt die Abfrage aber "A" und "C" aus - nämlich die Datensätze, die gemäß Sortierung von Tabelle1 die jeweils ersten Werte sind. Die Sortierung, die durch Abfrage2 eigentlich vorgegeben sein sollte, wird also ignoriert. :mad:

reinir
05.04.2004, 20:07
wenn Du die Abfrage2 auch gruppierst liefert Abfrage1 die von Dir gewünschten korrekten Werte .. in dem Bsp., dass Du angehängt hast

micmen
06.04.2004, 10:03
...erscheinen unergründlich??

Mir jedenfalls: Warum er sich das soooo gedacht hat, verstehe ich nicht.

Aber 1000 Dank, die Sache funktioniert jetzt!!! :)