Hallo zusammen,
für ein Lauf-Event soll eine Teilnehmerdatenbank mit Access 2000 erstellt werden.
Das Formular für die Dateneingabe der Läufer steht bereits. Es soll die Startnummer automatisch generiert werden. Und zwar nach folgendem Muster:
Pro Lauf (es gibt 4 verschiede) sind im Vorfeld bereits die Startnummerbereiche festgelegt worden, also Lauf A - Nummer 1-100, Lauf B -Nummer 101-200 usw.
Bei der Anmeldung kommen die Läufer jedoch durcheinander an. Wie stelle ich es an, dass für jeden Läufer automatisch beim Anlegen der Daten eine Startnummer generiert wird die auf Basis des jewiligen Laufes sich immer erhöht.
Bsp:
Läufer1-Lauf A-Startnummer1
Läufer 2-Lauf B-Startnummer 101
Läufer 3- Lauf B-Startnummer 102
Läufer4-Lauf A-Startnummer 2 usw.
Kann mir da jemand helfen ?
Viele Grüße
Rainy
Hallo,
ich könnte mir vorstellen, dass du dabei die Bezeichnung des Laufs zu Hilfe nehmen mußt.
Wobei ich davon ausgehe, dass du eine Tabelle hast in der die Startnummern, Laufnummern und neben anderen Daten auch die Läufer gespeichert sind.
Am Formular auf dem du die Läufer erfaßt mußt du mit angeben um welchen Lauf es sich handelt.
Das Kann durch Auswahl des Laufs aus einem Kombifeld (cboLauf) erfolgen, jedenfalls muss diese Angabe natürlich mit in die Tabelle!
Um die korrekte Startnummer zu erhalten, bedienst du dich dann VBA.
Die Anzeige der Nummer kann oder besser sollte in einem Textfeld erfolgen welches das Tabellenfeld 'Startnummer' als Steuerelementinhalt hat.
Im Ereignis 'Nach Aktualisieren' des Kombis kann der untenstehende Code die Nummern generieren.
Etwa so:
Select Case cboLauf
Case 1
If DCount("*","DeineTabelle","Laufnummer=1")>0 then
Me!DeinStartnummernfeld=DMax("Startnummer","DeineTabelle","Laufnummer=1") + 1
Else
Me!DeinStartnummernfeld = 1
End If
Case 2
If DCount("*","DeineTabelle","Laufnummer=2") > 0 Then
Me!DeinStartnummernfeld=DMax("Startnummer","DeineTabelle","Laufnummer=2") + 1
Else
Me!DeinStartnummernfeld = 101
End If
Case 3
If DCount("*","DeineTabelle","Laufnummer=3")>0 then
Me!DeinStartnummernfeld=DMax("Startnummer","DeineTabelle","Laufnummer=3") + 1
Else
Me!DeinStartnummernfeld = 201
End If
Case 4
If DCount("*","DeineTabelle","Laufnummer=4")>0 then
Me!DeinStartnummernfeld=DMax("Startnummer","DeineTabelle","Laufnummer=4") + 1
Else
Me!DeinStartnummernfeld = 301
End If
End Select
Ist natürlich ungetestet und ohne Kenntnis deiner Feldnamen und Tabellenaufbau...
HTH
Peter
Hallo Rainy,
falls du mal zahlreiche Startnummernbereiche hast, eine etwas andere Variante wie die von Peter.
Fur die Starter legst du die Felder Bereich (A, B; C...usw) und StartNr an; im Formular vergibst du zunächt für den Läufer den Bereich.
Über ein Button kannst du dann eine einmalige Nummer mit Bereich vergeben:
Private Sub Startnummer_Click()
Dim Nr As Long
If IsNull(Me!Bereich) Then
MsgBox "Bitte Bereich Eingeben"
Me!Bereich.SetFocus
End If
If IsNull(Me!StartNr) Then
If DCount("*", "tblSportler", "StartNr Like '" & Bereich & "*'") = 0 Then
Nr = 1
Else
Nr = DCount("*", "tblSportler", "StartNr Like '" & Bereich & "*'") + 1
End If
Me!StartNr = Bereich & "-" & Format(Nr, "000")
End If
End Sub
Feldbezeichnungen anpassen und Testen ;)
Gruß Oma
Hallo,
erst mal Danke für die schnellen Anregungen.
Ich habe zuerst die Variante von Peter ausprobiert.
Leider passiert da bei mir gar nichts. Ich habe eine Test-Tabelle erstellt (DeineTabelle) mit den Feldern Name, Laufnummer und Startnummer.
Im dazugehörigen Formular habe ich im Steuerelementfeld "Laufnummer" bei "nach aktualisieren" den Code in das VBA-Feld reinkopiert.
Wenn ich jetzt Daten in das Feld Laufnummer eingebe passiert nichts. Was mach ich falsch? Debugger bringt keinen Fehler. Das Feld Startnummer ändert sich nicht. Evtl. ein Formatierungsproblem?-alle Werte sind als Zahl-Long integer formatiert.
Die Zeile Me!DeinStartnummernfeld habe ich stehen lassen und das Feld mit der Startnummer umbenannt in DeinStartnummernfeld.
Gruß
Rainy
Hallo,
mache das doch entsprechend den Anweisungen von Peter!
Dort steht: Im Ereignis 'Nach Aktualisieren' des Kombis kann der untenstehende Code die Nummern generieren.
Die Bezeichnungen "DeineTabelle" und "DeinStartNummernfeld" bedeuten, dass du dort eben deine Tabellen- bzw. Feldnamen einsetzen sollst ;D
Gruß Oma
Tja,
da dürftest du entweder was nicht richtig verstanden oder einiges nicht richtig gemacht haben :-\
Aber dennoch bitte keine Panik auf der Titanic - Hilfe naht... im Anhang!
Schau' dir das Beispiel einfach mal genau an, vergleiche und finde deine Fehler! :)
Grüße
Peter
[Anhang gelöscht durch Administrator]
Hallo Peter,
kann die Datei leder nicht öffnen - habe Access 2000
Kannst du evtl. als mdb-Datei speichern.
Danke für die Mühe
Gruß
Rainy
Hallo,
jetzt hat es funktioniert, vielen Dank !
Letzte Frage zu diesem Thema. Wie würde eine Abbruchmeldung aussehen wenn versehentlich mehr Teilnehmer eingetragen werden wie die Vordefinition der Startnummern zulässt. Dann wären ja einige Startnummern doppelt.
Viele Grüße
Rainy
Hallo,
in Etwa so könnte das aussehen, wenn es in mein Beispiel von oben integriert werden soll (eine Möglichkeit) ...
Case 1
If DCount("*","DeineTabelle","Laufnummer=1")>0 then
If DMax("Startnummer","DeineTabelle","Laufnummer=1") < 100
Me!DeinStartnummernfeld=DMax("Startnummer","DeineTabelle","Laufnummer=1") + 1
Else
MsgBox "Der Nummernkreis wurde bereits ausgeschöpft! & vbCrLf & _
"Es kann keine weitere Startnummer für Lauf A vergeben werden!", vbExclamation, "Startnummern Lauf-A"
Exit Sub
End If
Else
Me!DeinStartnummernfeld = 1
End If
Analog dazu natürlich für jeden Lauf einzutragen.
HTH
Peter
Vielen Dank- funktioniert
Gruß
Rainy
Hallo Rainy,
freut mich, dass ich helfen konnte.
Bitte das Thema in deinem Startbeitrag auf 'gelöst' setzen!
DANKE
LG
Peter