Guten Morgen,
folgendes Problem bei Access2013:
Ich habe eine Tabelle tbl_Artikel (ID=Autowert) mit dem Feld
ArtikelName.
Nun gibt es mehrere Artikel gleichen Namens, weil diese
zusammengehören.
Nun möchte ich mit Hilfe einer Abfrage die Artikel
durchnummerieren.
„(ID:5) DGH-2483“ soll zu „(ID:5) DGH-2483 1/5“ und „(ID: 82)
DGH-2483“ soll zu „(ID:82) DGH-2483 2/5)“ usw. werden.
Anzahl der gleiche Artikel Namen iss ja kein Problem, aber
Rest…
Hallo mimich2,
so etwa?
Laufende Nummer fuer kategorisierte Datensaetze vergeben.
Haeufig sollen Datensaetze, die einer gemeinsamen Gruppe angehoeren, in einer Abfrage oder in einem Bericht mit einer laufenden Nummer innerhalb der Gruppe ausgegeben werden. Das Problem in der Abfrage oder dem Bericht zu loesen, erfordert eine VBA-Funktion, durch die die Loesung recht langsam wird.
Einfacher und schneller als mit einer Abfrage gelangt man zum Ziel, wenn die laufende Nummer direkt bei der Anlage eines neuen Datensatzes zugeordnet und in der Tabelle gespeichert wird. Sehe Dir dazu als Beispiel eine auf einer Tabelle „Artikel“ basierende Artikelverwaltung an, bei der alle Artikel mit einer Kategorie versehen sind und in der nun innerhalb der Kategorie fortlaufend nummeriert werden soll. Gehe dazu folgendermassen vor:
-
Oeffne die Tabelle „Artikel“ im Entwurfsmodus,
fuege ein Feld „LaufendeNummer“ vom Datentyp „Zahl“
mit der Feldgroesse „Long Integer“ hinzu, speichere die Aenderungen und verlasse den Tabellenentwurf wieder.
-
Oeffne das zur Verwaltung der Artikel verwendete
Formular, also zum Beispiel „Artikelverwaltung“, im
Entwurfsmodus und fuege das Feld „LaufendeNummer“ an
passender Stelle im Formular hinzu.
-
Stelle die Eigenschaft „Vor Aktualisierung“ des
Formulars auf „[Ereignisprozedur]“ ein, klicke auf
die Schaltflaeche mit den drei Punkten, um den VBA-Editor
zu oeffnen und gebe folgende Anweisungen ein:
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim lf As Variant
On Error Resume Next
lf = DMax("[LaufendeNummer]", _
„[Artikel]“, _
"[Kategorie-Nr]= " & Me.KategorieNr)
If IsNull(lf) Then 'Nicht gefunden, Vorgabe „1“
Me.LaufendeNummer = 1
Else 'Hoechste Nummer „+1“ setzen
Me.LaufendeNummer = lf + 1
End If
End Sub
Diese Funktion ermittelt per „DMax()“ die hoechste, im Feld „LaufendeNummer“ der Tabelle „Artikel“ gespeicherte Nummer, wobei die Kategorienummer der aktuellen Kategorienummer im Formular entsprechen muss. Die Feldnamen ersetze ggf.
durch die Namen der in Deinem Formular und der Tabelle verwendeten Felder.
- Speichere die Aenderungen.
Wenn Du das Formular anzeigen und testweise einige Datensaetze in der gleichen Kategorie eingibstn, werden diese automatisch fortlaufend nummeriert.
Bitte beachte, dass die fortlaufende Nummerierung natuerlich erst ab dem Zeitpunkt der Integration dieser Erweiterung erfolgt - eventuell vorhandene Datensaetze muessen zunaechst manuell um die laufende Nummer ergaenzt werden! Das laesst sich leider nicht mit einer Aktualisierungsabfrage erledigen, da Aktualisierungsabfragen immer erst eine temporaere Datensatzgruppe verarbeiten, bevor Ergebnisse in die Tabelle geschrieben werden. Die Abfrage der Tabelle per „DMax()“ wuerde also innerhalb der Aktualisierungsabfrage fuer jeden Datensatz das gleiche Ergebnis liefern, obwohl dem Feld „LaufendenNummer“ in der Aktualisierungsabfrage „DMax() +1“ zugewiesen werden wuerde
- diese Aenderungen spiegeln sich aber erst nach Ausfuehrung der Aktualisierungsabfrage in der Tabelle wieder.
Gruß - Wolfgang