Office: (Office 2007) SKAT

Helfe beim Thema SKAT in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Ich soll eine Access-DB für Skat weiterentwickeln, deren Entwickler verstorben ist. Folgende Erweiterung wird gewünscht: Bei der Auswertung sollen so... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Franz Rueh, 25. Juli 2012.

  1. SKAT


    Ich soll eine Access-DB für Skat weiterentwickeln, deren Entwickler verstorben ist. Folgende Erweiterung wird gewünscht: Bei der Auswertung sollen so genannte Streichresultate berücksichtigt werden. Das Ganze soll ab der 26. Serie in 5er Schritten geschehen mit dem jeweils schlechtesten Punkteergebnis, das aus der Wertung genommen wird. D.h. also, von der 26. bis 30. Serie 1 Streichresultat, von der 31. - 50. Serie 2 Streichresultate usw.
    Die derzeitige Berechnung ohne Streichresultate sieht in SQL so aus:
    Code:
    Wer kann mir da weiterhelfen - wie muss der Code abgewandelt werden, damit das gewünschte Ergebnis erzielt wird?

    Franz

    :)
     
    Franz Rueh, 25. Juli 2012
    #1
  2. Hallo Franz,
    Deine Anforderung scheint sich in sich zu widersprechen. Wenn ab der 26. Serie jeweils in 5er-Schritten ein Streichresultat zu entfernen ist wieso schreibst Du dann von zwei Streichresulateten von der 51. bis zur 50. Serie. Das vestehe ich nicht.

    CU
     
    Thomas Möller, 27. Juli 2012
    #2
  3. Ich hätte die Vermutung, dass Du allein auf die SQL-Anweisung keine Lösung erhalten kannst.
    -> Wo nimmt man die Anzahl der Spielrunden her? Bezüglich Streichresultat: Mit TOP X kann man Ergebnisse wegnehmen, aber das kann abhängig von der konkreten Datenlage kompliziert werden. Ein TOP 1 auf 4 gleiche schlechteste Ergebnisse wählt eben 4 Datensätze aus und nicht nur einen.
    -> Wichtige und aufwändige Berechnungen würde ich zuerst nur mit den nötigen Daten vornehmen und erst dann restliche Daten hinzunehmen. Das dient der Übersicht, ist oft einfacher und bringt Performance. Am Beispiel obiger Abfrage: Dort würde ich nicht alle möglichen Tabellen verknüpfen und dann versuchen, etwas daraus zu machen, sondern da würde in der Abfrage die Tabelle tblPerson fehlen, die Gruppierung würde auf die SpielerNr erfolgen (auf indexierte Zahl sicher deutlich günstiger als auf einen zusammengesetzten String).
    -> Die vielen verwendeten Domänenaggregatfunktionen sind eher unschön.

    Ergo: Du müsstest sicher die beteiligten Tabellen mit den vorhandenen Beziehungen und aussagekräftigen Beispieldaten bereitstellen (für mich Acc2000-lesbar).
     
    ebs17, 27. Juli 2012
    #3
  4. SKAT

    Thomas, das ist ein Tippfehler - es sollte 31.-35. Serie heißen, dann 36.-40. usw. Wenn also jemand z.B. 38. Serien gespielt hat, dann sollten seine 3 schlechtesten ergebnisse wegfallen und damit sein Punkteschnitt sich verbessern. Der Sinn dahinter ist der, wurde mir erklärt, dass Spieler die viele Serien spielen durch diese Regelung belohnt werden sollen - viele Serien zahlen sich also für einen Spieler aus!

    Franz
     
    Franz Rueh, 27. Juli 2012
    #4
  5. Eberhard, wie gesagt, das ist die DB wie sie mir übermittelt wurde, weil der ursprüngliche Entwickler in der Zwischenzeit verstorben ist.
    Er hat die Domänenaggregatfunktionen offensichtlich gerne verwendet. Ich habe mir gedacht, dass ich an den funktionierenden Abfragen etc. eher nichts oder nur bei Bedarf etwas ändere und mich auf die gewünschte Erweiterung konzentriere, die sich als schwierig genug herausstellt - noch dazu, wo ich ein Access-Autodidakt bin und ich das Gefühl habe, die Sache könnte für mich zu schwierig werden.
    Daher würde ich deine Hilfe gerne in Anspruch nehmen - allerdings habe ich kein Access 2000 mehr, sondern nur ein Access2003 - würde das für dich lesbar sein?

    Ach ja, die Spielrunden finden sich als Wert "Teilnahmen"!

    Franz
     
    Franz Rueh, 27. Juli 2012
    #5
  6. Mit Acc2003 kannst Du locker auf Acc2000 herunterkonvertieren - oder Du lässt Dir von jemand anderem helfen.
     
    ebs17, 27. Juli 2012
    #6
  7. Hallo,
    Könnte es anbieten.
    Habe A2010, das liest und schreibt alles ab A2K.
    gruss ekkehard
     
    Beaker s.a., 27. Juli 2012
    #7
  8. SKAT

    Als Lösungsweg könnte ich mir folgendes als umsetzbar vorstellen:

    - Vor der Durchschnittsberechnung wird die Streichmenge ermittelt und abgezogen (per Inkonsistenzabfrage)
    - Die Streichmenge ermittelt man etwa so (symbolisch):
    Code:
    - Das X lässt sich berechnen aus ...
    Code:
    ... allerdings lässt sich eine solche Berechnung nicht direkt in eine SQL-Anweisung einsetzen, sondern muss per VBA eingesetzt werden (Replace auf einen Platzhalter oder Stringzusammensetzung).
     
    ebs17, 27. Juli 2012
    #8
  9. Eberhard, deine Überlegungen klingen gut - spannend wird allerdings die Umsetzung.
    Ich habe es in der Zwischenzeit geschafft, die DB in ein 2000 lesbares Format zu bekommen. Ich hänge die DB an.
    Die 2 m.E. wichtigstsen Abfragen sind
    1. qryAktuellerStand - diese Abfrage liefert das bisherige Ergebnis ohne Streichresultate, den Punkteschnitt - der sich durch die Streichresultate ja verbesssern sollte, und die Teilnahmen = Runden/Serien.
    2. qryAktuelleSpielProPerson - hier finden sich alle Spiele, die jemand gespielt hat, alle Spiele eines Spieldatums ergeben dann die Runde/Serie. Wichtig sind die "Punkte", die nach einer Formel berechnet werden. Und genau das jeweilig schlechteste "Punkte"-Ergebnis einer Rund/Serie soll im Falle eines Streichresultats aus der Wertung genommen werden.

    Franz
     
    Franz Rueh, 27. Juli 2012
    #9
  10. Hallo Franz,

    falls Du vermutest, ich hätte Dich und Dein Projekt beiseite gelegt: Nein, ich bin noch dran. Allerdings will ich auch nicht nur eine Lösung zusammenkopieren, weil ja Deine derzeitige Abfrage qryAktuellerStand mit den nicht so vielen Datensätzen schon etwa 4 Sekunden dauert. Wegen der oben beschriebenen Inkonsistenzabfrage und der TOP X-Ermittlung wäre unter anderen eine vielfache Schachtelung von Unterabfragen auch über den berechneten Wert Punkte erforderlich, was zum einen zu einer flächenhaften und sehr schwierig zu lesenden SQL-Anweisung führen würde, zum anderen fühle ich schon ohne praktischen Versuch eine inakzeptabel lange Zeit für die Ausführung.

    Zur Illustration die derzeitige Ermittlung der Punkte (Berechnung inkl. verwendeter Unterabfrage):
    Code:
    Rückfrage: SpielerNr 41 hat 99 Teilnahmen. Das ergibt dann also 15 Streichwerte?
     
  11. Eberhard, freue mich über dein anhaltendes Interesse an meiner Problemstellung. Das mit der Abfrage, im Speziellen die von dir zur Illustration ausgewählte, sehe ich nicht so problematisch - sie läuft auf meinem Rechner in 1 Sekunde ab - das Ergebnis ist praktisch sofort da.
    Ich bin in der Zwischenzeit auch nicht untätig gewesen und habe z.B. folgende Abfrage mit deiner Formel für die Anzahl der Streichwerte gebastelt - übrigens deine Berechnung von 15 Streichwerten bei 99 Teilnahmen ist korrekt.
    Code:
    Und ich habe mit den folgende zwei Abfragen die auf jeden Spieler zutreffenden Streichwerte ermitteln können - nach stundenlanger Suche im Internet und vielfachem trial and error:
    2a: Code:
    2b: Code:
     
    Franz Rueh, 29. Juli 2012
    #11
  12. Könntest Du bitte anhängendes Resultat (ich bin inzwischen auch zu einem gekommen) mit Deinen Vorstellungen vergleichen.

    Durch die Streichwerte ändern sich auch die Durchschnittswerte für GW und VL. Ist das so akzeptabel? Ich weiß nicht, wie diese Werte interpretiert werden.

    Kleiner Hinweis:
    / ... Zeichen für Division
    \ ... Zeichen für Ganzzahldivision (erspart das Int)
     
  13. SKAT

    Eberhard, das ging ja jetzt schnell - deine Werte stimmen bis auf eine Hundertstel, die du bei den Durschnittpunktewerten und den mir übermittelten "offiziellen" Werten liegst. Ich denke, das wird an der Rundung liegen.
    GW und VL sind in der mir vorliegenden Liste nicht verändert/angepasst worden - ich muss da nachfragen, ob das so bleiben soll/kann.
    Aber am meisten bin ich auf deine Art des Lösungswegs bzw. der Programmierung gespannt - mir hat meine Lösung alles abverlangt und elegant ist sie keinesfalls. Habe aber wieder einiges dazugelernt und möchte von dir noch einiges "abschauen".

    Schon jetzt eine großes Danke
    Franz
     
    Franz Rueh, 29. Juli 2012
    #13
  14. Ich werde ein Zwischenergebnis in einer externen Temp-DB ablegen und diese Tabelle mit Indexierungen weiterverwenden, quasi eine Variante zu der von Dir genannten Tabellenerstellungsabfrage. Damit wird dann auch der Gesamtablauf flüssig.

    Ich stelle das dann im Laufe des Tages als Demo zusammen.

    Wenn man die schlechtesten Ergebnisse wegnimmt, sollte das eigentlich Einfluss auf die Durchschnitte von Gewonnen und Verloren haben, in Korrespondenz zum Punktedurchschnitt. Außerdem ist das dann technisch einfacher.
     
  15. Eberhard, ich habe die Mitteilung vom Skatverein bekommen, dass GW und VL unabhängig von den Streichresultaten, also unverändert bleiben sollen.

    Franz
     
    Franz Rueh, 29. Juli 2012
    #15
Thema:

SKAT

  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden