If auf Auswahlfehl in verknüpfter Tabelle
Liebe Ninox Experten,
ich stehe gerade irgendwie auf dem Schlauch. Ich habe eine Tabelle "Kunden" und eine verknüpfte Tabelle (1:n) "Wartungen".
Ich möchte eine Funktion in der Ansicht für Kunden ausführen, die nur ausgeführt werden soll, wenn es in der Tabelle Wartungen ausschließlich solche gibt, die den Status "abgeschlossen" (5) haben.
if Wartungen.Status != 5 then
alert("Es besteht noch eine offene Wartung. Bis diese abgeschlossen ist, kann keine neue Wartung angelegt werden.")
else
[Code zur Anlage einer neuen Wartung]
end
Habe es auch schon mit einer Select Anweisung und vorheriger Variablenzuweisung versucht. Irgendwie stehe ich auf dem Schlauch, da die Ergebnismenge ja größer 1 ist und die If Abfrage damit wahrscheinlich ein Problem hat!?
Habt Ihr einen Ansatz / Tipp für mich?
VG
Arne
9 Antworten
-
Das war die Variante mit Select:
let xOffeneWartungen := (select Wartungen where Kunde = me and Status != 5);
if xOffeneWartungen thenEr scheint den Status nicht auszuwerten. Die Bedingung matched so immer : /
-
Habs. Man muss bei der Select Anweisung anscheinend ein Feld mit ausgeben. Einfach nur das Select in die Variable zu schreiben hat nicht gereicht um die Variable nachher auf leer oder nicht leer prüfen zu können.
So hat's jetzt bei mir geklappt:
let xOffeneWartungen := (select Wartungen where Kunde = me and Status != 5).Nr;
if xOffeneWartungen != "" then
alert("Es besteht noch eine offene Wartung. Bis diese abgeschlossen ist, kann keine neue Wartung angelegt werden.")
else -
Hallo Arne, zur Überprüfung, ob alle Wartungen abgeschlossen sind, könnte man die Einträge einfach zählen und mit der Gesamtzahl vergleichen. Da die Tabellen miteinander verknüpft sind, geht das auch ohne "select":
if cnt(Wartungen[Status = 5]) < cnt(Wartungen) then
alert("Hier dein Text")
else
Hier_dein_Code
end
-
Oder, wie mir gerade auffällt, noch einfacher, in dem man gleich die Einträge ungleich 5 zählt. ;)
if cnt(Wartungen[Status != 5]) > 0 then
...
-
ja, wie cool. Auch eine super Idee. Und noch einfacher. Ich glaube, das baue ich noch so um. Danke!
-
wann nehme ich eigentlich als bedingung eckige Klammern und wann ein where? Gibt es dafür irgend eine Regel?
-
Die eckigen Klammern nutzt man bei verknüpften Tabellen (ohne "select", siehe oben). Sie funktionieren prinzipiell aber auch bei nicht-verknüpften, auf die man per "select" zugreift. Die ninox-interne Verarbeitung ist dann wohl etwas anders. Im Ergebnis macht es aber keinen Unterschied.
Ich selbst habe mir angewöhnt, beim "select" immer "where" zu nutzen. Das ist aber eher ein persönliches Ding, für das ich jetzt keine überzeugende Begründung angeben kann. Außer der, dass ich bisher gut damit gefahren bin. ;)
-
danke! Erprobte Wege ersparen viele graue Haare. Von daher, Begründung brauche ich nicht. Mir reicht, dass es bei Dir bisher so gut funktioniert : )
-
Nachtrag: Wenn Datumsfelder abgefragt werden, kann das ein Grund für die Nutzung eckiger Klammern beim "select" sein. Siehe
https://ninox.com/de/forum/technische-hilfe-5ab8fe445fe2b42b7dd39ee8/falsches-geburtsdatum-5f16790a233e2a0931020e76?post=5f1695ac233e2a0931020e7e&page=1
Content aside
- vor 4 JahrenZuletzt aktiv
- 9Antworten
- 701Ansichten