0

Verknüpfung (N:1) automatisch befüllen

Hallo Zusammen

Für die Weiterentwicklung meiner Datenbank bräuchte ich wiedermal euere Hilfe. Folgende Situation: Gerne möchte ich die Verknüpfung von "Aufgaben" mit "Stammdaten" (N:1) automatisch befüllen, wenn ein "Datum"  erreicht wird. 

Ausgedrück in "meiner" Sprache: Wenn das Jahr 2021 ist, dann wähle in den Stammdaten Nr 1 aus. 

Vielen Dank für eure Unterstützung

 

Gruss Maxime

19 Antworten

null
    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Wann soll das Ereignis denn ausgelöst werden? Beim öffnen der Tabelle? Mit einem Button? Mit eingabe eines Datums?

    Eine N:1 Verknüpfung kannst du mit der Nr des Datensatzes eindutig befüllen. Wenn also die ID Nr des ersten Datensatzes auch wirklich die 1 ist dann würde:

    if today() like "2021" then DEINEVERKNÜPFUNG := 1 end

    funktionieren.

    Du musst jetzt nur schauen, welches Event das auslösen soll... 

    • HolzHandwerk Heiz
    • Maxime_Heiz
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Die Ausführung soll bei eingabe eines Datums, welches automatisch ausgefüllt wird ausgeführt werden. Leider kann ich keine Bilder hochladen, aus diesem Grund versuche ich es auf diesen Weg.

    https://ibb.co/Kw0nT9b
    https://ibb.co/7tLSX02

    https://ibb.co/CsHqp5c

    Bild 1: Beim erstellen eines Teilprojektes wird das Eröffnungsdatum automatisch erfasst.

    Bild 2 : Wenn jetzt eine Aufgabe erstellt wird soll die Verknüpfung zu den Stammdaten automatisch ausgefüllt werden, abhängig vom Erfassungsdatum.

    In den Stammdaten werden jährlich Anpassungen vorgenommen für das nächste Jahr. Dies sollte jedoch keine Auswirkungen auf die vergangenen Projekte haben.

    Bild 3: In den Stammdaten werden faktoren hinterlegt mit denen Berechnungen durchgeführt werden.

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Es werden sich also in der Tabelle "Stammdaten" die Werte jedes Jahr ändern bzw. ein neuer Datensatz mit neuen Stammdaten angelegt und deshalb möchtest Du beim anlegen eines Datensatzes in der Untertabelle "Aufgaben" die korrekten Stammdaten aus - sagen wir 2021 - zuweisen.

    Da hast Du deinen Trigger doch bei "neuer Datensatz" in der Untertabelle "Aufgaben". Du holst Dir das Datum dann aus dem Feld "Eröffnung". Bestenfalls hast Du das Jahr auch in einer Spalte "Jahr" in "Stammdaten" - dann kann man in der Untertabelle "Aufgaben" via Zahnrad/Felder bearbeiten... unter "Bei neuem Datensatz..."  eingeben:

    let myJahr := year(Teilprojekt.'Eröffnung');
    Stammdaten := first(select Stammdaten where Jahr = myJahr)

    • HolzHandwerk Heiz
    • Maxime_Heiz
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Genau, du hast meine Vorstellung auf den Punkt getroffen.

    Ich versuche deinen Vorschalg umzusetzen aber leider zeigt es keine Regung beim erstellen einer neuen Aufgabe. Die "Stamdaten" bleiben lehr und es wird nichts abgefüllt. Ich habe versucht ein Zahlenfeld mit diesem Skript abzufüllen, jedoch ebenfalls ohne Erfolg. Ebenfalls habe ich in den Stammdaten bei der Tabelle ein Zahlenfeld hinzugefügt, wo nur das Jahr ausgewiesen wird. Dies half mir aber leider auch nicht weiter.Wo könnte der Haken liegen?

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hast Du in Stammdaten ein Feld "Jahr"?

    • HolzHandwerk Heiz
    • Maxime_Heiz
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Jep habe ich extra so umbenannt

     

    https://ibb.co/WgRpzTD

    • HolzHandwerk Heiz
    • Maxime_Heiz
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Wie kann ich herausfinden, wo das Problem hakt? Kann ich irgendwo die Ausführungen in einem Ablaufdiagramm nachsehen und schauen ob er irgendwo nicht weiter kommt? Ich bekomme keine Rückmeldung oder sonstige Reaktionen.

     

    Um sicher zu stellen, dass ich das Skript am richtigen Ort eingesetzt habe:

     

    https://ibb.co/Cny2DXb

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

    Hallo, ohne jetzt alle Screenshots gesehen zu haben: Das Feld in den Stammdaten heißt zwar "Jahr", ist aber offensichtlich ein Datumsfeld. Man müsste also auch bei der select-Bedingung mit year() arbeiten:

     

    let myJahr := year(Unterprojekt.'Eröffnung');
    Stammdaten := first(select Stammdaten where year(Datum) = myJahr)

    • HolzHandwerk Heiz
    • Maxime_Heiz
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Salü Copytexter

     

    Leider wird Datum ansolches nicht erkannt. 

    https://ibb.co/frYfyG5

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

    Ach so, ich schrieb ja selbst, dass das Datumsfeld "Jahr" heißt ... *vordiestirnklatsch*

     

    let myJahr := year(Unterprojekt.'Eröffnung');
    Stammdaten := first(select Stammdaten where year(Jahr) = myJahr)

    • HolzHandwerk Heiz
    • Maxime_Heiz
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Folgendes habe ich weiter versucht ohne Erfolg:

    https://ibb.co/wdj54Dz

    https://ibb.co/McWf24d

    https://ibb.co/CbpjxpB

    • HolzHandwerk Heiz
    • Maxime_Heiz
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Wenn ich die Eingabe manuell tätige sieht es folgendermassen aus:

    https://ibb.co/WtYMjgB

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

    Also, von der Syntax her sollte der Code mit "year(Jahr)" richtig sein. Die Ausführung als Trigger "Bei neuem Datensatz" setzt aber natürlich voraus, dass beim Anlegen des neuen Datensatzes die Verknüpfung zu "Unterprojekt" bereits vorhanden ist, was m. E. nur bei einer Untertabelle der Fall wäre. Dem Fehler nur anhand der unzähligen Screenshots auf die Spur kommen zu wollen, könnte recht mühselig sein.

     

    Vielleicht hat jemand anders noch eine Idee, ansonsten würde ich vorschlagen, dass du die Datenbank-Datei mit Demodaten mal zum Download auf einen Filesharing-Server legst, damit man sich das direkt "am lebenden Objekt" ansehen kann.

    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hi, drei kleine Hinweise. 

    1. In einem f(x)-Feld : year(Unterprojekt.'Eröffnung') eingeben und kontrollieren, ob tatsächlich das Jahr angesprochen wird. Hier bei Dir eben 2021. Sonst liegt hier der Fehler in der Zuweisung. 

    2. In einem weiteren f(x)-Feld: 
    first(select Stammdaten where year(Jahr) = year(date(2021,01,12)))

    eingeben. Jetzt müsste eine Integerzahl zu sehen sein, das ist die Datensatznummer. So kannst Du vielleicht noch eingrenzen, wo der Fehler liegt. 

    3. In einem der Screenshots gibst Du ein Datum ein. Um aus Zahlen ein Datum zu machen, brauchst Du "date". Richtig muss es m.W. wie oben heißen year(date(2021,01,12)). Das ergibt dann 2021.

    Viel Erfolg, Mirko

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ich habe das versucht, bei mir funktioniert es. Voraussetzung ist, dass das Feld Jahr ein simples Zahlenfeld ist, in dem steht einfach nur "2021" . Es muss ja kein Datumsfeld sein....

    • HolzHandwerk Heiz
    • Maxime_Heiz
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Salü Zusammen

    Ich habe einen Lösungsweg gefunden, welcher ebenfalls funktioniert. Nicht ganz so wie gewünscht aber für meine Zwecke soweit funktionierend. Bei dieser Lösung wird immer der letzte Eintrag in die Stammdaten gewählt und für die Berechnung verwendet. Somit besteht eine Verbindung zu den Stammdaten (Danke Mirko für deinen Input welcher mir Sicherheit verschaffte).

    Meine Lösungsvorschlag, welcher Tobias durch das Stichwort Jahr hervor gebrachte hatte:

    Stammdaten := last(select Stammdaten where year('Eröffnung'))

     

    Folgender Code funktioniert leider nicht (kann ich leider nicht ganz nachvollziehen wiso nicht.....):

    let myJahr := year(Unterprojekt.'Eröffnung');
    Stammdaten := first(select Stammdaten where year('Eröffnung') = myJahr)

     

    Gerne würde ich denoch herausfinden wie die Auswahl bzw. Code lautet, wenn ein Datum vorgegeben wird und eine Tabelle durchsucht und mit dem Datum abgeglichen wird.

    Könntest du Tobias bitte deinen Code zur verfügung stellen, dass ich diesen nachvollziehen kann?

     

    Vielen herzlichen Dank an Alle

     

    Gruss Maxime

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Maxime, 

    mein code ist folgender:

     

    let myJahr := year(Unterprojekt'.'Eröffnung');
    Stammdaten := first(select Stammdaten where Jahr = myJahr)

     

    wobei ich mir damit nur die Jahreszahl aus dem Eröffnungsdatum hole, und danach in Stammdaten nach dem EINEN Datensatz suche, der in einem Zahlenfeld (nicht Datum) die Jahreszahl stehen hat. Daher brauchen wir da auch kein year(), Date() usw.... es ist nur eine Zahl.

    Das first wird benötigt, da eine select-Abfrage mit where ein Array ausgibt mit theoretisch mehreren Datensätzen, auch wenn es in diesem Fall nur einen Datensatz mit Treffer geben sollte.

    Dein nicht funktionierender Code oben versucht in Stammdaten ein Datums-Feld "Eröffnung" zu finden um daraus das year() zu extrahieren... es dürfte in Stammdaten aber kein Datumsfeld "Eröffnung" zu finden sein, sondern ein reines Zahlenfeld "Jahr" mit dem Eintrag "2021" zB. 

    Das last(select Stammdaten where year('Eröffnung')) funktioniert liegt bestimmt daran, dass er gar keinen Datensatz mit der where-Bedingung findet, aber er Dir trotzdem den last aus Stammdaten anzeigt. Versuche mal ob  Stammdaten := last(select Stammdaten) nicht genauso funktioniert....

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

    Hallo allerseits, laut diesem Screenshot https://ibb.co/WgRpzTD von Freitag, 7:28 PM, ist das Feld namens "Jahr" in der Tabelle "Stammdaten" keine Zahl, sondern ein Datum ("12.01.2021"). Von daher hätte der o. g. Code mit "year(Jahr)" funktionieren müssen. Hat er aber wohl nicht. Ich frage mich deshalb, ob die Tabelle "Aufgaben" (N) überhaupt mit "Stammdaten" (1) verknüpft ist. Zumal auf den Screenshots weder in der einen noch in der anderen eine entsprechende Verknüpfung zu sehen ist.

     

    Aber wie gesagt: Man müsste mehr über das Datenmodell und die verwendeten Datentypen wissen.

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ja Copy, stimmt.... am besten wäre wirklich, sich die Datenbank mal anzuschauen.