Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Startnummernvergabe

Begonnen von Rainy, Juni 03, 2010, 17:56:54

⏪ vorheriges - nächstes ⏩

Rainy

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


database

#1
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

oma

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
nichts ist fertig!

Rainy

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

oma

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
nichts ist fertig!

database

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]

Rainy

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

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

database

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

Rainy

Vielen Dank- funktioniert

Gruß
Rainy

database

Hallo Rainy,

freut mich, dass ich helfen konnte.
Bitte das Thema in deinem Startbeitrag auf 'gelöst' setzen!

DANKE

LG

Peter