August 11, 2022, 05:18:38

Neuigkeiten:

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


16 Datensätze in 16 Felder eines Formulares schreiben

Begonnen von joschi50, Juni 04, 2022, 09:32:37

⏪ vorheriges - nächstes ⏩

joschi50

Hallo,
ich stehe etwas auf dem Schlauch.
Ich habe eine Tabelle in der exakt 16 Datensätze, bestehend aus einem Namen und einer Zufallsnummer stehen.
Die Sortierung der Tabelle ist nach Zufallsnummer absteigend.
Nun möchte ich gerne, dass diese 16 Namen in dieser Reihenfolge in ein Formular übertragen werden das ebenso 16 Textfelder für die Namen enthält.
Kurz zur Erklärung:
Ich habe ein Turnier beim Boule (Petanque) mit 16 Teilnehmern. Diese Namen habe ich in ein Formular mit 16 Namensfeldern eingetragen. Jeder Name erhält eine Zufallszahl zwischen 0 und 1.
Danach erzeuge ich eine Tabelle mit den 16 Namen und Zahlen und sortiere diese.
So erhalte ich die erste ausgewählte Spielpaarung (Die ersten 2 in der Liste spielen gegen die nächsten 2 usw.)
Nun möchte ich diese Spielerliste wieder in ein Formular zurückschreiben in dem jedem Spieler nun auch noch Ergebnisfelder zugeordnet werden.
Kann mir hier jemand einen Tip geben ?

MzKlMu

Hallo,
Du solltest über das Vorhaben noch mal vom Ansatz her nachdenken. Grundsätzlich kann man in ein Formular nichts zurückschreiben, ein Formular kann keine Daten speichern. Für alles was Du speichern willst, wird ein Tabellenfeld benötigt, auch für das Ergebnis. Du brauchst auch keine 16 Felder im Formular, es bleibt bei den 16 Datensätzen die in einem Endlosformular (untereinander) dargestellt werden.
Und wie ist das mit dem Turnier ? Du hast doch bestimmt mehrere Turniere, also wird auch eine Tabelle für die Turniere benötigt.
Und wie ist das mit der Zufallszahl, wie sieht die aus ?

Hast Du bisher nur diese eine Tabelle ?
Wenn nein, zeige mal ein Bild des Beziehungsfensters.
Welcher Erfahrung hast Du mit Access ?
Gruß
Klaus

joschi50

Juni 04, 2022, 13:11:19 #2 Letzte Bearbeitung: Juni 04, 2022, 13:20:26 von joschi50
Hallo MzKIMu,

natürlich unterliegt das Formular in dem die 16 Feldnamen eingefügt werden einer Tabelle.
Diese besteht dann jedoch nur aus einem einzigen Datensatz.
Mir ist schon klar, dass ich das mit einem Endlosformular realisieren könnte, wäre für den Benutzer aber unübersichtlicher.
Ich habe mal ein Bild angehangen wie es aussehen müsste.
Es sind die ersten 4 von 16 Tabelleneinträgen aus der Namenstabelle (nur Beispiel von Hand eingetragen)
Dem Formular zugrunde liegt eine Tabelle tblrunde1
Die Nummern hinter den Spielernamen dienen nur der Veranschaulichung, dh. Maier ist der 1. Datensatz der Spielertabelle, Paulus der 2. usw.

joschi50

D.h.
Aus der Tabelle tblspieler mit 16 Einträgen sollen jetzt die 16 Spielernamen in meinem Formular (Screenshot), in der Reihenfolge wie sie in der Tabelle vorliegen, eingefügt werden.
Um diese Funktion geht es mir.
Die 4 Spielernamen sind von Hand eingefügt.
Mit Access beschäftige ich mich schon einige Jahre aber dieses Problem hatte ich noch nicht.

MzKlMu

Hallo,
ein Bild des Beziehungsfensters wäre wesentlich aussagefähiger.
Gruß
Klaus

joschi50

Es gibt zum derzeitigen Stand noch keine Beziehungen woher auch.
Es gibt nur eine Tabelle mit 16 Spielernamen und ein Formular mit 16 Namensfeldern.
Benötigt: Nimm aus Tabelle Spielername den Spielername des 1. Datensatzes und setze ihn im Formular Spielplan1 in das Feld Spielername1. Nimm dann aus der Tabelle den Spielernamen des 2. Datensatzes und setze ihn im Formular Spielplan1 in das Feld Spielername2. usw.

DF6GL

Juni 04, 2022, 15:33:33 #6 Letzte Bearbeitung: Juni 04, 2022, 15:44:55 von DF6GL
Hallo,

das Konzept ist db-technisch suboptimal...

Wenn permanenter Frust das Ziel der Aktion sein soll, dann mach es so:



Voraussetzung: Die Spielername-Textfeldnamen sind von 1 an bis 16 mit einer laufenden Nr. durchnummeriert, so wie es Beispiel in etwa dargestellt ist("SpName1", "SpName2", etc).




1. Feld links oben:  Nr. 1   ("SpName1")
1. Feld rechts oben: Nr. 3  ("SpName2")
2. Feld links oben:  Nr. 2   ("SpName3")
2. Feld rechts oben: Nr. 4  ("SpName4")
usw.

'(Luftcode, ungetestet!)

Sub btnFormFüllen_Click()

Dim rs As DAO.Recordset, i as Long


Set rs = Currentdb.Openrecordset ("Select * From tblSpieler Order by Zufallsfeld", dbOpensnapshot)


Do Until rs.EOF
 i = i+1

 Me("SpName" & i) = rs!Spielername

rs.MoveNext
Loop

rs.Close:Set rs = Nothing

End Sub



Wenn aber eine funktionierende und nachhaltige DB das Ziel ist, dann erstelle ein der Situation entspr. Tabellenkonzept, z. B. (minimalistisch!):

tbl_Turniere

tbl_Spieler

tbl_TurnierPaarungen



Pro Turnier werden die Turnierpaarungen durch Zufallsermittlung aus tbl_Teilnehmer zusammengestellt und dauerhaft gespeichert.

Danach können die restlichen Daten (Sieg, Punkte, in tbl_TurnierPaarungen) jederzeit ergänzt werden.




joschi50

Tausend Dank ! Das hat funktioniert.
Natürlich kommen noch die entsprechenden Tabellen für die Ergebnisse, Spielpaarungen etc.
Die Spieler habe ich jetzt in das Formular geladen und die Ergebnisse können eingetragen werden.
Danach werden diese Daten Zeilenweise in eine Tabelle geschrieben (Spielnummer, Spieler, Sieg, Punkte, Score).
Nach 4 Spielrunden enthält die Tabelle dann 64 Zeilen, für jeden Spieler 4
Daraus kann eine Ergebnisliste erzeugt werden.

Hast Du noch eine Idee, wie man diese 16 Spieler so mischen kann, dass bei 4 Spielen niemals 2 gleiche Spieler miteinander spielen?

Ein Bier hast Du auf alle Fälle schon mal gut bei mir :-)

DF6GL

Hallo,

es muss beim Laden der Spieler eben gecheckt werden, ob eine solche Paarung nicht schon in den vorherigen Runden vorhanden ist.....Ist eine vorhanden, muss zunächst eine neue (Zufalls-)Konstellation in der Tabelle ezeugt werden.

joschi50

Tja, da ist er wieder der Unterschied zwischen Theorie und Praxis.
Ich habe nun meine erste Gruppe durch die Zufallszahlen erzeugt. Die Paarungen könnte ich in eine Tabelle schreiben. Aber wie mische ich jetzt neu ? Mein Turnierplan sieht ja mehrere Runden vor.

DF6GL

Hallo,


ZitatAber wie mische ich jetzt neu

naja, das hast Du anfangs doch auch schon mal gemacht... Mach es eben nochmal so...