Automatische alphanumerische Nummerierung in Acces

Hallo liebe Community,
habe momentan in Access eine Herausforderung bei der ich einfach nicht weiterkomme.

Ich habe folgendes Datenmodell:
Gruppen - 1:1 - Kataloge - 1:n - Lieferanten

Der Katalog XY ist z.B. der Gruppe B zugeordnet. Ein Lieferant soll in einem Feld „GruppenNr“ automatisch eine entsprechende Nummer erhalten, z.B. „B1“, „B2“ bzw. wenn ein Lieferant einem anderen Katalog zugeordnet wird, dann z.B. Katalog „A1, A2“ usw.

Das Anlegen eines Lieferanten erfolgt über ein Formular, in dem der Benutzer über ein Kombinationsfeld den Katalog auswählt. Nach Auswahl des Katalogs soll dann also eine Funktion ausgelöst werden die diesem Lieferanten automatisch die nächsthöhere Nummer vergibt.

Wie kann sowas, vermutlich über VBA, realisiert werden? Ich danke euch für die Hilfe…

Viele Grüße,
Angelo

Hallo,

die beste Lösung ist, die Tabellen Gruppen und Kataloge in EINER Tabelle zusammenzufassen. Dann stellt sich das Problem gleich gar nicht.

1:1-Beziehungen sind (bis auf ein paar Ausnahmen) nicht(!!) zu empfehlen.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

So ganz verstehe ich das nicht: Wenn die Gruppen mit den Katalogen 1:1 zusammenhängen, dann sollte nach Auswahl des Katalogs doch wohl die zugehörige Gruppennummer und nicht eine beliebige um 1 erhöhte Gruppennummer vergeben werden!?

Es ist auch zu überlegen, ob man sich die 1:1-Verknüpfung überhaupt antut - meist ist es einfacher, die Informationen in einer Tabelle zusammenzufassen, als die Verknüpfung aufrecht zu erhalten. (Man muss ja z.B. bei Neuanlagen immer die jeweils andere Tabelle nachziehen - was in Access mangels Triggern nicht so einfach ist bzw. in letzter Konsequenz nicht sicher funktioniert).

Gruß aus dem Norden
Reinhard Kraasch
(http://www.dbwiki.de - das Datenbank-Wiki)

Grüß Dich Reinhard :smile:

Viele Grüße vom Bodensee
Franz , DF6GL

Gruß zurück in den Süden
Reinhard

Hi Ihr beiden,

vielen Dank für eure wirklich schnelle Antworten!

ich habe das Datenmodelll jetzt umgestellt. Der Gruppenname ist nun Bestandteil der Tabelle „Kataloge“. Das sieht jetzt folgendermaßen aus:

Kataloge - 1:n - Lieferanten

Tabelle Kataloge:

  • Supplier „X“ --> Gruppenname „A“
  • Supplier „Y“ --> Gruppenname „B“
  • usw.

Entsprechend sollte dann die Nummerierung erfolgen:

  • Lieferant_1 gehört zu Supplier „X“, dann ist die GruppenNr. „A1“. Der nächste Lieferant erhält dann „A2“ usw.
    Lieferant_2 gehört zu Supplier „Y“, dann ist die GruppenNr. „B1“. Der nächste dann „B2“ usw.

Das Datenmodell nun bereits angepasst. Nun müsste ich eben nur noch irgendwie diese Nummerierung automatisieren.

Heißt: der Anwender legt über ein Formular einen neuen Lieferanten an und wählt unter anderem über ein Kombinationsfeld einen Katalog aus. Daraufhin soll automatisch der nächsthöhere Wert vergeben werden, mit dem Gruppenname als erstem Zeichen…

Moin, Angelo,

so strickt man Redundanz in die Daten: Der Supplier erhält ein Synonym, der nächste Lieferant eine laufende Nummer innerhalb des Suppliers. Der Informationsgehalt von „A1“ ist nichts anderes als dass Lieferant zu Supplier gehört plus der mehr oder minder zufälligen Angabe, wann (genauer: als wievielter) er sich in die Schar eingereiht hat.

Technisch ist das nicht weiter schwer: Mit dem AfterInsert-Ereignis ist ein Update auf den Lieferanten auszulösen, der sich das Synonym des Suppliers besorgt, das mit der Anzahl der zum Supplier gehörenden Lieferanten verkettet und den Satz zurückschreibt.

Bevor ich diesen Krampf betriebe, würde ich versuchen, dem Kunden diesen unsittlichen Wunsch auszureden. Es ist schließlich keinerlei Mehraufwand, eine saubere Beziehung mitzupflegen und dem Kunden den Supplier zum Lieferanten direkt zu zeigen.

Gruß Ralf

Hallo Ralf,

die Redundanz ist da, richtig. Ich habe ein 1:n-Beziehung zw. Supplier und Lieferant die über „SupplierID“ verknüpft ist.

Dennoch benötige ich zusätzlich das Feld GruppenNr. das eben „A1“, „A2“, „B1“ usw. heißt.

Hintergrund: die Tabelle wird als CSV-Datei exportiert und in ein E-Procurement-System hochgeladen.Dieses System benötigt, um eine Hierarchie aufbauen zu können, diesen Wert.

Supplier „XY“ GruppenName „A“
–> Lieferant A GruppenNr „A1“
–> Lieferant B GruppenNr „A2“
–> usw.

Vllt. kannst du mir anhand des oben beschriebenem Szenario (Formular, Auswahl Supplier über Kombi-Feld) aufzeigen wie ich das realisieren könnte…

Grüße,
Angelo

halbautomatische alphanumerische Nummerierung
Moin, Angelo,

Vllt. kannst du mir anhand des oben beschriebenem Szenario
(Formular, Auswahl Supplier über Kombi-Feld) aufzeigen wie ich
das realisieren könnte…

klar geht das, dafür muss der Kunde aber noch etwas genauer werden: Was passiert mit der laufenden Nummer, wenn der Lieferant gelöscht wird? Muss sie nochmal vergeben werden?, Wenn nicht, bist Du aus dem Schneider.

Zuerst erweiterst Du den Katalogsatz um ein Feld „Supplier_Alias“ und legst einen eindeutigen Index darauf, hier gibt der Anwender das Kürzel vor, also zB „A“, außerdem ein numerisches Feld „max_Lieferant“.

Der Lieferantensatz bekommt ein Feld namens „Lieferanten_Alias“, das ebenfalls eindeutig sein muss. Beim Ereignis „BeforeInsert“ zum Lieferantensatz kommt dann die eigentliche Arbeit:

Sub Form\_BeforeInsert()
 Supplier\_Alias und max\_Lieferant besorgen (wenn nicht schon im Zugriff)
 Lieferanten\_Alias = Supplier\_Alias & CStr(max\_Lieferant + 1)
End Sub

Beim Ereignis AfterInsert muss der Suppliersatz den neuen Wert für max_Lieferant mitbekommen.

Gruß Ralf