1

In for-Schleife auf bereits angelegten Datensatz prüfen

Hallo zusammen,

aus einem Textfeld, das alle Tage sammelt und einem Textfeld, das alle Uhrzeiten sammelt werden mit folgender Formel erfolgreich Datensätze in einer Untertabelle (Einsatzzeiten) erstellt:

for i in split(Tage, ",") do
for h in split(Uhrzeiten, ",") do
let myEP := (create Einsatzplan);
myEP.(Datum := i);
myEP.(Uhrzeit := h)
end
end

Nun soll vor dem Erstellen eine Überprüfung stattfinden, die verhindert, dass ein Datensatz mehrfach angelegt wird. Meine Idee dazu:

for i in split(Tage, ",") do
for h in split(Uhrzeiten, ",") do
if count(select Einsatzplan where Datum like i and Uhrzeit like h) <= 0 then
let myEP := (create Einsatzplan);
myEP.(Datum := i);
myEP.(Uhrzeit := h)
end
end
end

Das scheint so nicht zu funktionieren, jedenfalls nicht zuverlässig.
Vielleicht hat ja jemand eine Idee dazu. Ich würde mich freuen!

Grüße,
Hendrik
(arbeitet mit der Ninox Mac-App)

4 Antworten

null
    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Hendrik. Im if-else Statement vergleichst Du wahrscheinlich Typ Datum mit Typ Text. Versuche mal so:

    for i in split(Tage, ",") do
    for h in split(Uhrzeiten, ",") do
    if count(select Einsatzplan where text(Datum) like i and text(Uhrzeit) like h) = 0 then
    let myEP := (create Einsatzplan);
    myEP.(Datum := i);
    myEP.(Uhrzeit := h)
    end
    end
    end

    Gruß Mirko

    • Deepwood GmbH
    • Hendrik_Fley
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Mirko, 

     

    Danke schonmal für Deine Hilfe!

    Leider klappt das auch mit der Variation des Codes noch nicht.

    Der Code liegt auf nem Button, der eben dann die Datensätze nicht erstellen soll wenn sie schon existieren.

    Nach zweimaligem drücken des Buttons ergeben sich nach wie vor Dopplungen. Siehe Screenshots im Anhang. 

    Hast Du (oder jemand anderes) noch eine Idee woran es liegen könnte?

    Gruß,

    Hendrik

    InputErgebnis

    • Deepwood GmbH
    • Hendrik_Fley
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Fehler gefunden!

    Die definierten Variable i und h werden "in der Haupttabelle festgelegt". Der "select"-Befehl sucht aber in der Untertabelle und kann daher die Werte die in i und h geschrieben werden nur abrufen wenn der Code folgendermaßen ergänzt wird:

    let my := this;
    for i in split(Tage, ",") do
    for h in split(Uhrzeiten, ",") do
    if cnt(select Einsatzplan where text(Datum) like my.i and text(Uhrzeit) like my.h) = 0 then
    let myEP := (create Einsatzplan);
    myEP.(Datum := i);
    myEP.(Uhrzeit := h)
    end
    end
    end

    Danke nochmal Mirko fürs Mitdenken /-rätseln :)

    Gruß Hendrik

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Hendrik. Ich habe Deine Tabelle nachgestellt. Es ergeben sich bei mir keine Dopplungen mehr. Frage:

    Hast Du die Daten in der Tabelle vor dem Benutzen des neuen Codes gelöscht? Und:

    Hast Du das  "<" Zeichen im Code gelöscht und durch: if count(select Einsatzplan where text(Datum) like i and text(Uhrzeit) like h) = 0 ersetzt?