0

Bestimmte Datensätze einer Tabelle in anderer Tabelle anzeigen

Hallo zusammen,

ich habe eine Datenbank mit drei Tabellen

- t_Grunddaten

- t_Protokolldaten

- t_Wochenauswertung

In die Tabelle t_Protokolldaten schreibe ich 3-4 mal pro Woche neue Datensätze.

Dabei wird die Kalenderwoche in ein Feld "KW" geschrieben.

In der Tabelle t_Wochenauswertung generiere ich pro Woche einen neuen Datensatz.

Dazu wähle ich in t_Wochenauswertung ein Datum aus und schreibe die Kalenderwoche in das Feld "KW". (Funktioniert)

Ich hole einzelne Grunddaten und schreibe sie in die entsprechenden Felder.(Funktioniert)

Für die entsprechenden Daten aus der Tabelle"t_Protokolldaten habe ich eine 1:N-Verknüpfung angelegt (DS_aus_KW), die beim Anlegen eines neuen Datensatzes zunächst leer ist (und auch leer sein soll).

Über eine Schaltfläche sollen jetzt die Datensätze aus der Tabelle t_Protokolldaten selektiert und in der Verknüfung angezeigt werden, bei denen t_Protokolldaten.KW = t_Wochenauswertung.KW ist.

Im Trigger der Schaltfläche steht bisher:

if KW != null then
    let mySearch := KW;
    alert(KW)

else
    alert("Bitte zunächst im Feld <Kalenderwoche auswählen> ein Datum der    gewünschten Woche auswählen")
end

Die spannende Frage ist: Wie kommen jetzt die Daten aus t_Protokolldaten in den aktuelle Datensatz in t_Wochenauswertung?

Danke für die Hilfe im voraus!

10 Antworten

null
    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Ronni. Das folgende Script gehört in das Datumfeld in der Tabelle t_Wochenauswertung unter "Trigger nach Änderung". Damit werden automatisch die zugehörigen Datensätze der Untertabelle verknüpft. Damit sparst Du den Button. Außerdem empfehle ich Dir yearweek(Datum) zu nutzen, sonst hast Du im nächsten Jahr zur gleichen KW die Datensätze zweier Jahre verknüpft, wenn keine weitere Jahresunterscheidung erfolgt. Mirko

    let ykw := yearweek(Datum);
    let nr := this.number(Nr);
    KW := ykw;
    for i in (select t_Protokolldaten)[yearweek(Datum) = ykw] do
        i.(t_Wochendaten := nr)
    end
    
      • Ronni_Selpien
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko

      Hallo Mirko, zunächt einmal vielen Dank für Dein Engagement!

      Leider gibt es bei mir Probleme mit Deinem Script.

      Die Zuweisungen "ywk" bzw. "KW" funktionieren schon nicht.

      Mein angepasstes Script (in der Tabelle t_Wochenauswertung im Feld "Kalenderwoche auswählen" unter "Trigger nach Änderung") sieht im Moment so aus:

      let ykw := yearweek('Kalenderwoche auswählen');
      let nr := this.number(Nr);
      KW := ykw;
      alert("KW: " + KW);
      alert("ywk: "+ ywk);
      alert("nr: " + nr);
      for i in (select t_Protokoll)[yearweek(Datum) = ykw] do
          alert(i);

      end

      Schon die "Alerts" für KW und ywk werden nicht ausgegeben.

      Der Alert für nr als einziger aber schon.

      Noch ein Hinweis: Das Feld "Kalenderwoche auswählen" ist ein Datumsfeld, das als Kalender angezeigt wird.

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Okay. Da habe ich Dich mißverstanden. Ich dachte, Du willst die passenden Datensätze verknüpfen. Dann wäre es mit alert() so

    let ykw := yearweek('Kalenderwoche auswählen');
    let nr := this.number(Nr);
    KW := week('Kalenderwoche auswählen');
    "Verknüpft alle Datensätze aus t_P mit t_W die aus der selben Woche stammen";
    for i in (select t_Protokolldaten)[yearweek(Datum) = ykw] do
        i.(t_Wochendaten := nr)
    end;
    "Zeigt Kalenderwoche, Yearweek und Datensatznummer des akt. DS t_W an.";
    alert("KW " + KW + "-" + "Yearweek " + ykw + "-" + "Nr " + nr)
    

    Oder Du willst sie nur anzeigen. Dann gib das mal in einen Button ein.

    let ykw := yearweek('Kalenderwoche auswählen');
    let nr := this.number(Nr);
    KW := week('Kalenderwoche auswählen');
    "Verknüpft alle Datensätze aus t_P mit t_W die aus der selben Woche stammen";
    let ary := join(for i in (select t_Protokolldaten)[yearweek(Datum) = ykw] do
            "Datensatznummer " + i.text(Nr)
        end, "
    ");
    "Zeigt Kalenderwoche, Yearweek und Datensatznummer aller passenden DS aus t_P an.";
    alert("KW " + KW + "-" + "Yearweek " + ykw + "
    " + "Tabelle t_Protokolldateien" + "
    " + ary)
    
      • Ronni_Selpien
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko 

      Nein, Du hast mich nicht missverstanden  - ich hate nur zur Kontrolle die alerts eingebaut, damit ich die Werte der Variablen mal kontrolieren kann...

      Grundsätzlich möchte ich in der Tabelle "Wochenauswertung" einen Datensatz anlegen, in dem alle Datensätze aus der Tabelle "Protokolldaten" gespeichert (oder verknüpft und angezeigt) werden, die eine übereinstimmende Kalenderwoche haben.

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Na dann müßte es doch mit dem ersten Script meiner letzten Nachricht funktionieren. Trigger im Datumfeld, oder Button.

      • Ronni_Selpien
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko 

      Vom Prinzip her ja - das Script läuft durch und zeigt die Variablenwerte am Ende richtig an - wenn ich die folgende Zeile auskommentiere:

          i.(t_Wochendaten := nr)
      
      

      Muss außer der Tabelle nicht auch noch das Verknüpfungsfeld DS_aus_KW und darin die richtige Spalte ausgewählt werden?

      Also Tabelle.Verknüpfungsfeld

      Wenn ich das eingebe:

      i.(t_Wochendaten.DS_aus_KW)

      erkennt er die Tabelle nicht (bietet sie nicht in der Auswahlliste an) und meckert die Zeile an, wenn ich es händisch eintrage.

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Okay. Wenn die Tabellen WOCHENDATEN und PROTOKOLLDATEN wie 1:N verknüpft sind, dann muß die Verknüpfung in der Tabelle PROTOKOLLDATEN erfolgen und deshalb die for-Schleife. Üblicherweise heißt das Verknüpfungsfeld so, wie die verknüpfte Tabelle - außer Du hast das Feld umbenannt. 
     

    Wenn das Verknüpfungsfeld in PROTOKOLLDATEN umbenannt wurde, dann ist die Schleife erfolglos, das alert() wird aber angezeigt. Also, prüfe das bitte und gib zum Test in ein Funktionsfeld in der Tabelle WOCHENDATEN den Code ein:

    let ykw := yearweek('Kalenderwoche auswählen');
    let nr := this.number(Nr);
    for i in (select t_Protokolldaten)[yearweek(Datum) = ykw] do
        i.t_Wochendaten
    end
    

    Wenn nichts angezeigt wird, dann obigen Namen prüfen und

    let ykw := yearweek('Kalenderwoche auswählen');
    let nr := this.number(Nr);
    KW := week('Kalenderwoche auswählen');
    "Verknüpft alle Datensätze aus t_P mit t_W die aus der selben Woche stammen";
    for i in (select t_Protokolldaten)[yearweek(Datum) = ykw] do
        i.(VERKNÜPFUNGSFELD:= nr)
    end;
    "Zeigt Kalenderwoche, Yearweek und Datensatznummer des akt. DS t_W an.";
    alert("KW " + KW + "-" + "Yearweek " + ykw + "-" + "Nr " + nr)
    

    ...das wird schon, trotz 45° gefühlt

      • Ronni_Selpien
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko 

      Ich habe extra gewartet, bis das Thermometer "nur noch" 26° anzeigt...

      Also: Script 1 läuft problemlos durch, liefert aber keine Daten in das verknüpfte Feld in der Tabelle t_Wochendaten.

      Die Verknüpfung habe ich noch einmal neu angelegt. Sie ist mit 1:N von t_Wochendaten nach t_Protokolldaten eingerichtet. Den Namen (t_Protokolldaten) habe ich nicht angetastet. Zu dem ausgewählten Datum existieren mehrere Datensätze in der Tabelle t_Protokolldaten. Das wird auch mit dem alert-Befehl, den ich im Script 1 ergänzt habe, angezeigt.

      Manuell kann ich auch in einem neuen Datensatz in t_Wochendaten in dem Verknüpfungsfeld Datensätze aus t_Protokolldaten auswählen und speichern.

      Beim Anpassen des Scripts 2 wird die Syntax in der Zeile

      i.(VERKNÜPFUNGSFELD:= nr) angemeckert.

      Konkret die Wertezuweisung ":=".

      Das richtige Verknüpfungsfeld (t_Protokolldaten) hatte ich vorher ausgewählt.

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Das wäre so der Punkt, wo eine leere Testdatenbank nützlich wäre. Aber ich mache es mal anders herum. In Tabelle t_Wochendaten ein Datum der KW 32 oder 34 eingeben. 

      • Ronni_Selpien
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko 

      Hallo Mirko,

      Ich habe Dein script aus dem trigger kopiert und in meine DB übertragen, die Tabellenbezeichnungen angepasst - und es läuft!

      Ich hatte in der entscheidenden Zeile "die falsche Seite der Verknüpfung" eingetragen:

      i.(t_Protokolldaten := nr)  funktionierte nicht

      i.(t_Wochendaten := nr) funktioniert!

      Jetzt kann ich weitermachen und mich damit auch besser in NINOX einarbeiten.

      Es geht übrigens inhaltlich um die Protokollierung von Heimdialysedaten (also Gewicht, Blutdruckdaten, Medikamente etc.), die bei jedem Dialysevorgang notiert werden müssen und pro Woche an den Dialysearzt übermittelt werden.

      Vielen Dank noch einmal für Dein Engagement und Deine Beharrlichkeit!!!

      Ronni

Content aside

  • Status Answered
  • vor 1 JahrZuletzt aktiv
  • 10Antworten
  • 110Ansichten
  • 2 Folge bereits