Hallo zusammen,
ich hab seit neuestem Access2013 (vorher mit 2010 gearbeitet) und kenn mich nicht so gut aus mit Access. Folgende Aufgabenstellung:
Es gibt einen Poker-Club, für den ich jährlich eine Rangliste erstelle.
Es werden Mittwoch, Donnerstag, Freitag & Sonntags Turniere gespielt.
Mittwoch & Sonntags gibt es folgende Punkteverteilung:
Platz 1 : 4,5 Punkte
Platz 2 : 4 Punkte
Platz 3 : 3,5 Punkte
Platz 4 : 3 Punkte
Platz 5 : 2,5 Punkte
Platz 6 : 2 Punkte
Platz 7 : 1,5 Punkte
Platz 8 : 1 Punkt
Platz 9 : 0,5 Punkte
Am Donnerstag gibt es eine andere Punkteverteilung:
Platz 1 : 9 Punkte
Platz 2 : 8 Punkte
Platz 3 : 7 Punkte
Platz 4 : 6 Punkte
Platz 5 : 5 Punkte
Platz 6 : 4 Punkte
Platz 7 : 3 Punkte
Platz 8 : 2 Punkte
Platz 9 : 1 Punkt
Außerdem gibt es ca.2 Turniere im Jahr (sog. Big Events) mit folgender Punkteverteilung:
Platz 1 : 13,5 Punkte
Platz 2 : 12 Punkte
Platz 3 : 10,5 Punkte
Platz 4 : 9 Punkte
Platz 5 : 7,5 Punkte
Platz 6 : 6 Punkte
Platz 7 : 4,5 Punkte
Platz 8 : 3 Punkte
Platz 9 : 1,5 Punkte
Ich hab es letztes Jahr schon hingebracht, dass ich ein Eingabefenster hatte, bei dem ich lediglich den Namen für den jeweiligen Platz eingeben musste (vorher das Datum auswählen), dann musste ich allerdings die Punkte selber eingeben. Ich weíß nicht, wie ich das elegant lösen kann. Access soll mir anhand des Datums sofort die richtigen Punkte für die Platzierung übernehmen...?!
Am Ende des Jahres soll dann eine Rangliste erstellt werden und wenn es geht, eine Grafik, die anzeigt, wie oft ein Spieler welche Platzierungen erreicht hat (auch welche Art von Turnier ((Mi&So oder Do&Fr oder Big)) ?!
Ich hab noch meine Schwächen beim Aufbau der Datenbank, dh. wenn ich falsch anfange, dann wird das nix. Ich hoffe, ihr könnt mir schon beim Beginn helfen und wir gehen das dann zusammen durch ;)
Ich hoffe, ich habe alles verständlich erklärt und dass jemand Zeit & Lust hat, an dem Projekt mitzuarbeiten ;) 8)
Hallo,
die Berechnung der Punkte anhand des Rangs und des Wochentags sollte doch kein Problem sein.
Hier mal ein Vorschlag:Private Sub Teilnehmer_AfterUpdate()
Dim faktor As Single
If Me.Parent.bigEvent Then
faktor = 1.5
Else
Select Case Weekday(Me.Datum, vbMonday)
Case 3, 7
faktor = 0.5
Case 4, 5
faktor = 1
Case Else
faktor = 0
End Select
End If
Me.Punkte = 10 * faktor - Me.Rang * faktor
End Sub
Und wo genau soll der Code hin ? Ich hatte ja ein Eingabefenster, in der ich die Punkte eingetragen hab, wie füge ich stattdessen diesen Code ein ?
Ich schick heute Abend mal n paar Screens, von der DB, die ich letztes Jahr hatte... dann kann man das vielleicht besser nachvollziehen.
Ich hab seit letztem Jahr nichts mehr an der DB gemacht, bin also wieder total aus der Übung ::)
ZitatIch hatte ja ein Eingabefenster, in der ich die Punkte eingetragen hab
Was ist denn das für ein "Fenster"? Ich dachte, du gibst die Daten über ein Formular ein. Dort kannst du dann im Ereignis "Nach Aktualisierung" des Feldes für den Teilnehmer die Ereignisprozedur nutzen.
Sorry, ja, natürlich is das ein Formular, wie gesagt, bin erst heute Abend wieder zu Hause, dann schick ich n paar Screens... Bzw. wär es toll, wenn ich die komplette DB irgendwo hochladen könnte, dann kann man ja zusammen dran arbeiten ?!
Du kannst die DB komprimiert und gezippt hier im Forum hochladen.
Hatte gestern keine Zeit mehr, sorry. Wollte gerade die DB hochladen, aber die max. Größe beträgt 300KB ... Sogar gezippt hat meine DB 970KB (normalerweise 1.7 MB) :-\
Und du hast sie vorher mit Access komprimiert? Gibt es Bilder oder andere Objekte, die die DB so "fett" machen?
Jep, sind auch Bilder dabei für das Formular...
Dann erstell eine Test-DB ohne diese Bilder.
:)
im Anhang befindet sich die testDB
Hallo,
du solltest in der Ergebnistabelle den Fremdschlüssel aus der Tabelle "Namensliste" (besser: "tblTeilnehmer") speichern und nicht den Namen selbst.
Im Hauptformular fehlt der Schalter für den "Big Event" und im Unterformular fehlt das Feld "Punkte".
Nachdem du beides hinzugefügt hast, kannst du folgende Ereignisprozedur einsetzen:Private Sub Platz_AfterUpdate()
Dim faktor As Single
If Nz(Me.Parent.bigEvent, 0) Then
faktor = 1.5
Else
Select Case Weekday(Me.Turnierdatum, vbMonday)
Case 3, 7
faktor = 0.5
Case 4, 5
faktor = 1
Case Else
faktor = 0
End Select
End If
Me.Punkte = 10 * faktor - Me.Platz * faktor
End Sub
Die Tabelle "Punkte" brauchst du dafür eigentlöich nicht. Du könntest höchstens den Berechnungsfaktor mit Hilfe einer Tabelle dynamisch halten.
Wozu du aber das Hauptformular ebenfalls an die Ergebnistabelle gebunden hast, ist mir unklar.
ZitatNachdem du beides hinzugefügt hast, kannst du folgende Ereignisprozedur einsetzen:
- Wo und wie einsetzen ?
ZitatWozu du aber das Hauptformular ebenfalls an die Ergebnistabelle gebunden hast, ist mir unklar.
-Wie, gebunden ?
Habs jetzt mal geändert, wie Du es geschrieben hast, aber mit dem BigEvent Knopf und dem Code passiert iwie nix :-[
Ich hatte angenommen, dass die Platzierungen im Unterformular eingegeben werden, dort würde dann auch die Ereignisprozedur hingehören.
Das Kennzeichen "Big Event" sollte ein Kontrollkästchen und kein Optionsfeld sein und es sollte nicht nur mit "Big Event" beschriftet werden sondern auch den Namen "BigEvent" (ohne Leerzeichen!) erhalten.
Das HF unterscheidet sich insofern zu deiner Eingangs-Beschreibung, dass es nicht nur das Veranstaltungsdatum enthält, sondern auch die ganzen Ergebnisdatensätze. Ich verstehe nicht ganz, wie du dir den Zweck dieses Formulars gedacht hast. Das solltest du also noch genauer beschreiben.
ZitatIch hab es letztes Jahr schon hingebracht, dass ich ein Eingabefenster hatte, bei dem ich lediglich den Namen für den jeweiligen Platz eingeben musste (vorher das Datum auswählen), dann musste ich allerdings die Punkte selber eingeben.
Wär nicht schlecht, wenn man diese Lösung noch einsehen könnte, denn darauf baut sich eigentlich mein Vorschlag auf.
So, hab mal ein Bild gemacht (Word-Dokument), auf dem man sieht, wie das ganze am Ende aussehen soll. Natürlich bin ich für Verbesserungsvorschläge offen ;)
Dok ist im Anhang 8)
Hallo,
ich würde das Unterformular zur Dateneingabe nurtzen, eine zusätzliche "Kontrollanzeige" ist nicht nötig. Die lfd. Nummer (Platz) könnte bei der Eingabe automatisch erzeugt werden, wenn die Eingabe stets in der Reihenfolge Platz 1 - 9 erfolgt. Die Punkte werden wie von mir vorgeschlagen berechnet.
OK, das könnten wir so machen ;) Hört sich alles gut an, aber wie mache ich das jetzt Schritt für Schritt ? ::)
Also Schritt für Schritt:
man nehme
- ein ungebundenes Hauptformular mit einem Kombifeld zur Auswahl des Veranstaltungsdatums (aus einer notfalls noch zu erstellenden "Event"-Tabelle) und mit einem Kontrollkästchen zur Markierung des "Big-Events"
- mit einem (über das Datum verknüpften) Unterfomular zur Erfassung bzw. Anzeige der Platzierungen
- dort (also im Unterformular) kann dann mein Code zur Ermittlung der Punkte zum Einsatz kommen
Für weitere Hilfe bitte konkrete Fragen stellen.
Könntest Du mir das erstellen und wieder hier hochladen ?
Ich krieg das nicht hin...
:o
Oder evtl. mal zusammen über Teamviewer ?
Gerne auch jemand anderes ??
Brauch echt noch Hilfe hierfür...
Hallo,
beschreibe bitte was du wie versucht hast und was dabei herausgekommen ist.
Oder stelle eine konkrete Frage, wo(mit) genau du nicht weiter kommst.
Zitat von: MaggieMay am Januar 19, 2015, 21:54:05
man nehme
- ein ungebundenes Hauptformular mit einem Kombifeld zur Auswahl des Veranstaltungsdatums (aus einer notfalls noch zu erstellenden "Event"-Tabelle) und mit einem Kontrollkästchen zur Markierung des "Big-Events"
Ich finde nirgends, wo ich ein ungebundenes Formular erstellen kann, außerdem...
Wie/Warum erstelle ich ein
ungebundenes Formular ? Die eingegeben Daten
sollen ja weitergegeben werden an eine Tabelle...oder hab ich da einen Denkfehler ?
Zitat
mit einem (über das Datum verknüpften) Unterfomular zur Erfassung bzw. Anzeige der Platzierungen
Wie verknüpfe ich das dann ? Über Beziehungen ?
Zitatdort (also im Unterformular) kann dann mein Code zur Ermittlung der Punkte zum Einsatz kommen
Wie/wo mach ich das ? Über den Visual Basic Editor bei "Makros und Code" ?
Es wäre glaub ich einfacher, wir könnten das mal zusammen machen über Teamviewer oder Skype ?[/list]
Ein ungebundenes Formular kannst du über den Button "Formularentwurf" im Ribbon "Erstellen" anlegen.
Die Daten werden dann nur über das (gebundene) Unterformular angezeigt, erfasst und bearbeitet.
Die Verknüpfung von Haupt- und Unterformular erfolgt über die Eigenschaften des Unterformularsteuerelements im Register "Daten".
Der VBA-Code zum Berechnen der Punkte wird bspw. an das Ereignis "Nach Aktualisierung" des Textfeldes für die Punkte gebunden.
Dazu geht man folgendermaßen vor:
- Ereigniseigenschaft auf "Ereignisprozedur" einstellen
- per Klick auf die drei Punkte in den VBA-Editor gehen
- Code innerhalb des vorgefertigten Prozedurrahmens einfügen
Ich hoffe, das hilft dir weiter. Andernfalls kann ich dir heute Abend (kann später werden) mal deine entsprechend angepasste DB hochladen. Mit Teamviewer kenne ich mich nicht so gut aus und ohne (begleitendes) Telefon wird das ja wohl auch nicht gehen, oder? ;-)
Ich habs heute nochmal versucht, scheitere aber immer...
Ein ungebundenes Formular konnte ich erstellen, aber das Unterformular ist ja dann automatisch schon gebunden, wenn ich die Daten auswähle, die das Formular enthalten soll ?!
Naja, is wohl zu kompliziert für mich, dachte es gibt da eine simple Lösung, alles was mir bisher ja nur gefehlt hat, war die automatische Zuordnung von Datum und Punkten (mit Option, ob Big Event)...
Wäre super, wenn Du mir die angepasste DB hochladen könntest...
Werde danach bestimmt weiterhin Hilfe brauchen ;)
Hallo,
ich bin dabei, deine Test-DB anzupassen, dabei bin ich auf folgende Frage gestoßen:
Du hattest eingangs geschrieben:
ZitatEs werden Mittwoch, Donnerstag, Freitag & Sonntags Turniere gespielt.
aber den Freitag nicht bei der Punktevergabe erwähnt. Wie sieht es damit aus?
Und finden die "Big Events" auch an diesen Wochentagen statt oder (immer/auch?) an anderen?
Freitags gibts wie am Donnerstag Punkte ;)
BigEvents sind eigentlich nur 2x im Jahr, meistens das Eröffnungsturnier und das Jubiläums-Turnier,
beim Jubiläums-Turnier kann es schon sein, dass es auch mal am Samstag stattfindet.
push...
Sorry, ich habe dich nicht vergessen, komme aber erst heute Nachmittag wieder dazu, den Lösungsvorschlag für dich "abzurunden".
Hi,
schau dir mal den Anhang an, ob du dich mit dieser Lösung anfreunden kannst.
Hi Maggie,
erstmal Danke für Deine Hilfe, ist auf den ersten Blick schon sehr gut :D
Auf den zweiten Blick: - Den Turnier-Ort brauche ich zwar nicht, aber ich denke, den kann ich ohne Probleme einfach raus nehmen, oder ? Nur im Entwurf- bzw. Layout-Fenster das Feld entfernen?! (oder muss ich dann noch evtl. bei der Abfrage was ändern ?)
- Kann man das so ändern, dass ich nur den Namen eingeben muss ? Die Punkte kommen ja schon automatisch (find ich klasse), Platz 1 bis 9 wäre halt super, wenn auch schon automatisch da stehen würde... Mehr wie 9 werden eh nicht gewertet...
Kann man es so machen, dass man später auch nur die Rangliste der Frauen extra berechnen kann ? Evtl. durch Spielermarkierung oder durch Geschlechtsvergabe bei der Namenseingabe ?
Turnierort?
- Das sollte nur ein Beispiel für ergänzende Daten zum Turnier sein.
Platzierung?
- könnte man automatisch ergänzen, wenn die Spieler in fester Reihenfolge eingegeben würden.
--- Ist das realistisch?
Für Ranglisten (und sonstige Auswertungen) nach Geschlecht gertrennt, brauchst du natürlich eine Erweiterung der Teilnehmer-Tabelle, sowie ein entsprechendes Erfassungsformular, dass dann auch im "NotInList"-Ereignis zum Einsatz kommen sollte.
ZitatPlatzierung?
- könnte man automatisch ergänzen, wenn die Spieler in fester Reihenfolge eingegeben würden.
--- Ist das realistisch?
- Absolut: Nur die ersten 9 Spieler bekommen Punkte (man könnte noch ein "Team-Poker"-Event einfügen, bei dem spielen immer 2 Spieler zusammen...sprich 18 Spieler, die dann Punkte bekommen (Wertung wie Donnerstags,Freitags = Faktor 1)
ZitatFür Ranglisten (und sonstige Auswertungen) nach Geschlecht gertrennt, brauchst du natürlich eine Erweiterung der Teilnehmer-Tabelle, sowie ein entsprechendes Erfassungsformular, dass dann auch im "NotInList"-Ereignis zum Einsatz kommen sollte
- Bei der Teilnehmer-Tabelle einfach ein neues Feld mit "Geschlecht" einfügen?
- Erfassungsformular: Ein Formular, dass nur die Teilnehmer (komplette Namensliste = über 500 Spieler + kommen immer wieder neue dazu) + Geschlecht enthält?
- "NotInList": Also sobald ein neuer Name eingegeben wird, dass Access dann gleich frägt, ob M oder W ? Ist das machbar ? Wäre super ! Aber wie ? :o ;D
Hallo,
was das "Team-Poker"-Event betrifft, so wirst du zusätzlich zu den Spielern auch die Teams in die Teilnehmer-Tabelle aufnehmen und die Spieler mit Hilfe einer zusätzlichen Tabelle den Teams zuordnen müssen.
Bei der Punktevergabe werden die Punkte den Teams zugeördnet, erst in der Auswertung werden die Beziehungen aufgedröselt.
ZitatBei der Teilnehmer-Tabelle einfach ein neues Feld mit "Geschlecht" einfügen?
Ja.
ZitatErfassungsformular: Ein Formular, dass nur die Teilnehmer [...] + Geschlecht enthält?
Ja, sofern nicht doch noch weitere Datenfelder benötigt werden.
Ich würde z.B. unbedingt Nachname und Vorname getrennt erfassen, vielleicht sogar eine Adresse, das Alter (bzw. Geburtsdatum) und was sonst noch Sinn machen könnte.
Zitat"NotInList": Also sobald ein neuer Name eingegeben wird, dass Access dann gleich frägt, ob M oder W ? Ist das machbar ?
Ja, das wäre machbar, bspw. mithilfe einer InputBox, ich würde aber einem Eingabeformular den Vorzug geben.
Hallo liebe Pokerfreunde! Ich wollte euch kurz auf das faszinierende Poker-Ranglisten-System mit Datumabhängigkeit aufmerksam machen. Es ist beeindruckend zu sehen, wie die Rankings sich im Laufe der Zeit entwickeln und die Spielerleistung reflektieren. Übrigens, habt ihr schon den neuen Doghouse Slot im Casino ausprobiert? Dieser Slot ist einfach der Wahnsinn! Die Grafiken sind top, und die Gewinnchancen sind nicht zu unterschätzen. Ich habe dort ein paar Runden gedreht und war positiv überrascht. Definitiv einen Blick wert! Vielleicht können wir uns ja auch mal an den Tischen oder am "Doghouse Slot (https://doghouse-game.com)" treffen. Viel Glück und gute Karten euch allen!