0

Automatische Nummerierung Untertabelle

Liebe Community,

ich kämpfe aktuell mit einem simplen Problem, dessen Lösung mir allerdings viel Arbeit ersparen würde.

Ich habe eine Tabelle A mit einer Untertabelle A1. In Tabelle A sind Musikwerke enthalten, in Tabelle A1 die dazugehörigen Sätze. Beispiel:

  1. Symphonie Nr. 1
    1. 1. Allegro
    2. 2. Andante
    3. 3. Adagietto
    4. 4. Finale
  2. Symphonie Nr. 2
    1. 1. Allegretto
    2. 2. Scherzo
    3. 3. Vivace

Damit die Reihenfolge der Sätze stimmt, muss ich sie nummerieren. Ich möchte das für einen ganzen Haufen zu katalogisierender Musik nicht immer händisch machen.  Das Problem ist, dass die Nummerierung in Tabelle A1 momentan noch tabellenweit automatisch weiterzählt, heißt: Wenn ich Sinfonie Nr. 2 in Tabelle A hinzufüge, ist ihr erster Satz in A1 nummeriert mit Nr. 5 (anstatt mit Nr. 1).

Wie bekomme ich es hin, dass die Nummerierung der Datensätze in der Tabelle A1 für jedes neue übergeordnete Musikwerk automatisch immer bei 1 beginnt?

Danke schon vielmals vorab für Eure Hilfe!

6 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Christian, die Datensatznummer wird automatisch fortlaufend für alle Einträge der Untertabelle vergeben und lässt sich deshalb nicht zur immer wieder bei 1 beginnenden Nummerierung verwenden.

    Du könntest stattdessen in der UntertabelleA1 ein Funktionsfeld mit folgendem Code erstellen: 

    let myID := number(HaupttabelleA);
    let thisID := number(Nr);
    cnt(select Positionen where number(TabelleA) = myID and number(Nr) <= thisID)
    

    Dann werden jeweils nur die Einträge der Untertabelle durchnummeriert, die mit dem betreffenden Datensatz der Haupttabelle verknüpft sind.
     

      • Ninox-Professional
      • planoxpro
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Sorry, Copy & Paste-Fehler. Es muss natürlich heißen:

      let myID := number(HaupttabelleA);
      let thisID := number(Nr);
      cnt(select UntertabelleA1 where number(HaupttabelleA) = myID and number(Nr) <= thisID)
      
      • Christian_bepunkt
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Hej planox. ,

      top, danke vielmals für den Code, der funktioniert! Gibt es alternativ dieselbe Funktion, um einem normalen Textfeld diese Nummer beim Anlegen eines neuen Datensatzes in der Untertabelle A1 zuzuweisen? Vielleicht ist das Paranoia, aber ich habe ein besseres Gefühl, wenn sich die Zahl im Feld nach dem Erstellen nicht mehr ändern kann. 😅

      DIGITOOL Entschuldige, das war wahrscheinlich missverständlich beschrieben. Das Kriterium ist weder Anfangsbuchstabe noch Text, sondern die vom Komponisten festgelegte Reihenfolge der Sätze. Die einzelnen Sätze lege ich immer in der Reihenfolge an, wie sie vom Künstler festgelegt worden ist – und hierbei war dann die Idee, dass eine automatische Nummerierung stattfindet, die die Reihenfolge der Sätze direkt abbildet.

      • Ninox-Professional
      • planoxpro
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Christian Bepunkt Die berechneten Nummern würden sich definitiv nicht ändern. Es sei denn, du würdest einen Eintrag in der Untertabelle löschen, dann würden die folgenden Nummern "nachrutschen", so dass keine Lücke entstünde. Diesen Vorteil hast du bei der festen Vergabe nicht. Hier würde es im Fall von Löschungen zu Dopplungen kommen. Schreiben in ein Textfeld ist aber natürlich auch möglich. In der einfachsten Form könntest du in den Optionen der Untertabelle als "Trigger bei neuem Datensatz" folgendes eintragen:

      let HT := Haupttabelle;
      LfdNr := cnt((select Untertabelle)[Haupttabelle = HT])
      

      Wobei LfdNr für das Textfeld steht, in das die Nummer geschrieben werden soll.

      Wie gesagt: Dies ist eine sehr einfache Lösung. Es gibt sicher noch weitere Möglichkeiten, mit denen sich die Nummerierung noch besser steuern ließe. Aber die wären in der Umsetzung auch deutlich komplexer.
       

      • Christian_bepunkt
      • vor 2 Jahren
      • Gemeldet - anzeigen

      planox. pro Stimmt, du hast vollkommen recht, der große Vorteil ist, dass ich Änderungen vollziehen kann und sich die Nummerierung automatisch anpasst, das hatte ich nicht bedacht.

      Danke jedenfalls für die Codes, beide lösen mein Problem! 🙏

    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Moin Christian Bepunkt ,

    ich habe aus deiner Beschreibung noch nicht verstanden, nach welchem Kriterium die automatische Neunummerierung geschehen soll.
    Nach Anfangsbuchstabe, bzw. Text aufsteigend?

    1. 1. Allegretto
    2. 2. Scherzo
    3. 3. Vivace

    VG Ronald