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
-
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
-
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)
-
Na dann müßte es doch mit dem ersten Script meiner letzten Nachricht funktionieren. Trigger im Datumfeld, oder Button.
-
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
-
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.
Content aside
- Status Answered
- vor 2 JahrenZuletzt aktiv
- 10Antworten
- 135Ansichten
-
2
Folge bereits