0

Wert einer Tabelle an Untertabelle per Trigger weitergeben

Ich nutze Ninox hauptsächlich zur Erfassung genealogischer Daten, z. B. aus Kirchenbüchern und Standesamtsregistern.

An einer Stelle komme ich – immer noch blutiger Ninox-Anfänger – jedoch nicht richtig weiter und bitte um Eure Mithilfe.

Mein Datenmodell:

Jeder Eintrag (bspw. in einem Geburtsregister) kann beliebig viele Vermerke und beliebig viele Personen erhalten. Jede Person kann beliebig viele Ereignisse erhalten.

Zu jedem Eintrag erfasse ich auch den Ort in einem gleichnamigen Textfeld. Dieser Ort soll als Vorbelegung an die gleichnamigen Textfelder in den Vermerken und Ereignissen übergeben und bei Bedarf von mir dort überschrieben werden.

In den Tabellen »Vermerke« und »Ereignisse« habe ich hierzu als »Trigger bei neuem Datensatz« jeweils eingefügt:

let aktuellerOrt := last((select Eintraege).Ort);
Ort := aktuellerOrt

Das klappt gut. Aber nur, wenn ich die Einträge nacheinander eingebe. Sind bei vorherigen Einträgen Ergänzungen vorzunehmen, wird der falsche Ort übergeben.

Wie kann ich – per Trigger, eine Schaltfläche scheidet aus – den Ort des aktuell geöffneten Eintrags an die die gleichnamigen Textfelder in den Untertabellen »Vermerke« und »Ereignisse« übergeben?

Danke für Eure Hilfe!

4 Antworten

null
    • Maurice
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Mir scheint die Konstruktion über einen Trigger in Vermerke bzw. Ereignisse nicht der geeignete Zugang, denn wenn du in Einträge bei einem bestehendem Datensatz etwas änderst, wird ja nicht der Trigger bei Vermerke bzw. Ereignisse ausgelöst. Wenn ich dich richtig verstehe, soll aber die Änderung übernommen werden. Das kannst du mit einem entsprechendem Funktionsfeld in Vermerke bzw. Ereignisse realisieren.

    • boulevardesk
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Maurice,

    danke für Deine schnelle Antwort!

    Nein. Der Ort (aus Tabelle »Eintraege«) soll als Ort in den Tabellen »Vermerke« und »Ereignisse« übernommen werden. Dennoch möchte ich den übernommenen Ort bei Bedarf ändern können.

    Zum Hintergrund: Der Ort aus der Tabelle »Einträge« stimmt in der Regel zu 90 % mit dem Ort in den Tabellen »Vermerken« und »Ereignissen« überein. Deswegen möchte ich bei der Erfassung der Daten mir Arbeit sparen und den Ort aus der Tabelle »Einträge« per Trigger übernehmen und im Fall der Abweichung eben überschreiben können.

    • Torsten_Stang.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    mit dem select nimmst Du den Ort aus dem zuletzt erfassten Eintrag - das ist ja nicht zwingend der, den Du bearbeitest bzw. ergänzt.

    Der Trigger für Vermerke sollte sein (wenn die Verknüpfung zur Tabelle Eintrag 'Eintraege' heisst):

    Ort := Eintraege.Ort

    Für Ereignisse dürfte dieser funktionieren:

    Ort := Personen.Eintraege.Ort

    Beide Skripte setzen voraus, dass die Verknüpfung zu 'Eintraege' bzw. 'Personen' bereits besteht - sollte das aus Timinggründen nicht der Fall sein, würde ich den Trigger von der Tabellen-Ebene auf das jeweilige Verknüpfungsfeld ("bei Änderung") verschieben...

    • boulevardesk
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Torsten,

    die Nutzung von select war nur ein hilfsweises Konstrukt – weil ich mir nicht anders zu helfen wusste; mit dem Nachteil, den Du beschrieben hast.

    Die von Dir genannten Trigger hatte ich in einem früheren Zustand der Datenbank bereits umgesetzt, das wollte aber partout nicht funktionieren. Das Feld »Ort« blieb stets leer. Was ich nicht verstehe: Als Formel hatte ich die Anweisung zum Abgleich ebenfalls in den Tabellen »Vermerke« und »Ereignisse« eingesetzt, und das funktioniert tadellos.

    Aber Dein letztgenannter Hinweis, der hat mir geholfen! In den Einstellungen der Tabellen »Vermerke« und »Ereignisse« habe ich nun bei der Verknüpfung zur Tabelle »Eintraege« den Trigger eingefügt und es funktioniert hervorragend!

    Meinen herzlichsten Dank!

Content aside

  • Status Answered
  • vor 1 JahrZuletzt aktiv
  • 4Antworten
  • 72Ansichten
  • 3 Folge bereits