In ACCESS gruppierte Spalte sortiert hochzählen

Guten Tag zusammen,

ich komme mit einem Problem auf Sie zu, welches mich seit geraumer Zeit beschäftigt.

Ich möchte in einer Access Tabelle (Adressen) drei Spalten gruppieren (Land/Stadt/Strasse) und in einer weiteren Spalte(SortNr) alle Einträge hochzählen. Dieses Hochzählen soll anhand folgender Sortierreihenfolge geschehen:

-Land
-Stadt
-Strasse
-Nachname
-Vorname

Nicht zu verwechseln mit einer Abfrage, in der die entsprechenden Spalten gruppiert und dann die Funktion „Anzahl“ aktiviert wird, da diese nur die gruppierten Spalten und den höchsten Wert der Gruppe anzeigt.

Es soll also sprichwörtlich jeder Datensatz um eins hochgezählt werden und der entsprechende Wert in das Feld der Spalte „SortNr“ eingetragen werden.

Über einen Vorschlag wäre ich mehr als dankbar!

Gruß

mindflat

Vorschlag 1: eine Tabellenerstellungsabfrage machen und als zusätzliches Feld SortNr. als ID vergeben als Autowert.

Ansonsten geht es ins Eingemachte: VBA-Programmierung
(z.B. wenn Sie pro PLZ neu zählen wollen)
Hier das von mir verwendete Skript:
Public Function CountUp(MKZ As Variant) As Integer

Static iCount As Integer
Static LastMKZ As Variant

If LastMKZ MKZ Then
iCount = 0
LastMKZ = MKZ
End If
iCount = iCount + 1
CountUp = iCount

End Function

Hallo,
bitte anhand von Beispieldaten verdeutlichen.
Gruss
Joey

Hallo mindflat,

mir ist nicht klar was genau Du möchtest.
Um Dir helfen zu können, poste doch bitte ein Beispiel mit 10-20 unsotierten Datensätzen und den gruppierten Ziel Datensätzen mit einer manuell befüllten Spalte SortNr.
Dann kann ich Dir bestimmt eine Lösung anbieten.

Gruß

Andreas

Hallo,

ich fürchte, das bekommt man nicht mit einem einfachen SQL-Statement hin.
Man müsste es vielleicht durch das Auslesen eines RecordSets, wobei ein Zähler mitläuft, realisieren.
Innerhalb dieser Schleife müsste dann ein UPDATE mit dem aktuellen Zählerwert erfolgen.

Bin leider nicht vertraut mit Access, weiß also nicht detailliert, wie es zu machen wäre.

Andererseits kann ich mir nicht vorstellen, wozu diese Nummerierung gut sein soll: zum einen muss man bei jedem neuen Record neu durchnummerieren und zum anderen braucht man ja nur in einem sortierten RecordSet eine Zähler mit laufen lassen.

Tut mir Leid, keine bessere Auskunft zu haben.

Gruß
Erhard

Hallo mindflat,

mir eröffnet sich einfach der Sinn und Zweck dieser Aktion nicht.

Deshalb rein formal folgender Gedanke:

  • Zähler 0 setzen
  • Tabelle sortiert nach den Sortierkriterien einlesen
  • Zähler um 1 erhöhen
  • Datensatz editieren(SortNr=Zähler)
  • Datensatz speichern

Damit sind dann alle Datensätze durchnummeriert. Das Problem dabei ist, dass jedesmal beim Hinzufügen oder Löschen von Datensätzen diese Aktion wiederholt werden muss.

Gruß
JOGI

Hallo,
ich würde dafür die „DCount“-Funktion verwenden, um die Anzahl der Datensätze zu ermitteln, die in einer bestimmten Gruppe von Datensätzen (einer Domäne) enthalten sind. Sie können die DCount-Funktion in einem VBA-Modul, einem Makro, einem Abfrageausdruck oder einem berechneten Steuerelement verwenden.

Syntax: DCount(expr, domain [, criteria] )

Mehr dazu erfahren Sie unter der Access-Hilfe oder http://office.microsoft.com/de-de/access-help/dcount…

Hallo mindflag

Erstellen Sie eine Abfrage mit den 5 Feldern + SortNr, die 5 Felder aufsteigend sortieren. (Ich habe sie mal qrySortNr genannt). Kopieren Sie den folgenden Code in ein Modul:

Public Sub Numerieren()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim lgZähler As Long
lgZähler = 0
Set db = CurrentDb
Set rs = db.OpenRecordset(„qrySortNr“)
rs.MoveFirst
Do While Not rs.EOF
lgZähler = lgZähler + 1
rs.Edit
rs!sortnr = lgZähler
rs.Update
rs.MoveNext
Loop
Set rs = Nothing
Set db = Nothing
End Sub

ich habe es mal in DAO programmiert. Lassen Sie es mich wissen, falls sie es auf ADO benötigen.

Hallo, leider habe ich es nicht geschafft, die Beispieldaten anständig einzufügen. Kann man Dateien anhängen? Wenn ja, wie geht das…?

Hallo,
bitte anhand von Beispieldaten verdeutlichen.
Gruss
Joey

Hallo fonti46,

herzlichen Dank für die Antwort. Habe das mal durchgespielt. Funktioniert soweit ganz gut. Allerdings fehlt der wichtigste Aspekt: Die Gruppierung. Es sollte ja innerhalb der Gruppierungs „Land/Stadt/Straße“ hochgezählt werden.

Kann man das nich einbauen?

Es ist mir leider nicht möglich eine Beispiel-Datenbank zu hinterlegen, oder geht das iregndwie…?

Danke für eine Antwort!

Gruß

mindflat

Hallo Josef Schwar,

herzlichen Dank für die Antwort. Diese Funktion hatte ich auch schon im Visier. Allerdings liefert sie nicht das Ergebnis, welches ich gerne hätte, da sie nicht in die Spalte „SortNr“ jeden hochgezählten Wert einträgt.

Danke und Gruß!

mindflat

Hallo JOGI,

herzlichen Dank für die Antwort. So ähnlich hatte ich mir das von der Logik her auch vorgestellt. Allerdings hapert es bei mir mit der Umsetzung. Mir ist noch nicht einmal klar, ob das mit einer SQL-Abfrage geht oder mit einem Modul. Zudem dürfen wir ja auch nicht die Gruppierung vergessen…

Danke und Gruß!

mindflat

Hallo Erhard Kapischke,

trotzdem danke für Antwort. Sinn macht das ganze wahrlich nicht, aber ich bin gezwungen, dieses Format so zu erzeugen…

Gruß

mindflat

Hallo kiter66,

herzlichen Dank für die Antwort. Vorschlag 1 wäre zwar prinzipiell möglich, sieht aber unschön aus, da alles einfach durchnummeriert wird. Vorschlag 2 berücksichtigt anscheinend auch die Tatsache nicht, dass nur innerhalb der Gruppierung „Land/Stadt/Straße“ hochgezählt werden soll…

Wir haben also 3 Gruppierungsstufen und 5 Sortierungsstufen („Land/Stadt/Straße/Nachname/Vorname“).

Danke und Gruß!

mindflat

Hallo Andreas,

herzlichen Dank für die Anrwort. Eine Beispiel-Datenbank leigt hier bereit. Aber es entzieht sich meines Wissens, wie diese anständig hochladen wird oder dargestellt werden soll. Wie geht das…?

Danke und Gruß!

mindflat

Hallo mindflat,

das kann mit einer kleinen Programmierung gemacht werden.

Bevor wir weitermachen, erklär doch mal genau wozu die Spalte Sortnr dienen soll. Eventuell kann es auch anders gelöst werden.

Gruß
JOGI

Hallo mindflag

ist kein Problem, verstehe ich das richtig: immer wenn eines der 5 Kriterien ändert, wieder mit 1 beginnen?

Gruss

fonti46

Dann würde ich eine neue Spalte in der Abfrage erstellen die da lautet:
Land&Stadt&Strasse: Das wäre dann eindeutig - diese Spalte dann z.B. als MKZ benennen - dann passt es auch mit dem VBA.

Hallo fonti46,

also ich habe eine Tabelle mit folgenden Spalten:

  • Land
  • Stadt
  • Straße
  • Nachname
  • Vorname
  • SortNr

Gruppiert werden sollen diese Spalten:

  • Land
  • Stadt
  • Straße

Sortiert werden soll über (in der Reihenfolge):

  • Land
  • Stadt
  • Straße
  • Nachname
  • Vorname

In der letzten Spalte „SortNr“ soll jetzt ein Wert hochgezählt werden, solange die Einträge für die Gruppierung gleich bleiben und unter Berücksichtigung der Sortierung.

Solange also in den ersten drei Spalten „Deutschland“, „Düsseldorf“ und „Hansa-Allee“ steht, soll hochgezählt werden, der Schmidt-Anton vor dem Schmidt-Egon.

Danach wieder bei „0“ anfangen, usw.

Zu schade, dass man keine Dateien hochladen kann. Ich habe nämlich eine Beispiel-Datei vorbereitet…

Danke und Gruß!

mindflat

Ich glaube, ich hab’s begriffen:

Public Sub Numerieren()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim lgZähler As Long
Dim strLand, strStadt, strStrasse As String
lgZähler = 0
Set db = CurrentDb
Set rs = db.OpenRecordset(„qrySortNr“)
rs.MoveFirst
strLand = rs!land
strStadt = rs!stadt
strStrasse = rs!strasse
Do While Not rs.EOF
If strLand = rs!land _
And strStadt = rs!stadt _
And strStrasse = rs!strasse _
Then GoTo zählen
’ Gruppenbruch festgestellt
lgZähler = 0
strLand = rs!land
strStadt = rs!stadt
strStrasse = rs!strasse
lgZähler = 0
’ kein Gruppenbruch
zählen:
lgZähler = lgZähler + 1
rs.Edit
rs!sortnr = lgZähler
rs.Update
rs.MoveNext
Loop
Set rs = Nothing
Set db = Nothing
End Sub

Falls nicht gebe ich Ihnen meine e-Mail Adresse für die Muster-DB

Viel Erfolg und schönes Wochenende

fonti46