Where Selektionsproblem
Liebe Ninox Mitstreiter
Ich scheine vor lauter Bäumen den Wald nicht mehr zu sehen bei einem eigentlich einfachen Problem. Könnt Ihr mir bitte weiterhelfen?
Ich habe eine Tabelle "Massnahmen", welche ich in einem Dashboard in einer Ansicht filtern möchte, wie ich das an anderen Orten auch tue und es viele Anleitungen dafür im Netz gibt.
Es hat 3 ja/nein Felder.
1. Erledigt
2. zu prüfen
3. geprüft
Nun möchte ich die Ansicht sortieren, dass
wenn 1=ja, dann sollen alle Datensätzen, welche im Feld "erledigt" ein Datum haben gezeigt werden (ansonsten die leeren) UND
wenn 2=ja, dann sollen DAVON alle Datensätzen, welche im Feld "zu prüfen" ein Datum haben gezeigt werden (ansonsten die leeren) UND
wenn 3=ja, dann sollen DAVON alle Datensätzen, welche im Feld "geprüft" ein Datum haben gezeigt werden (ansonsten die leeren).
Ich habe die Ansicht mit folgendem script definiert und es klappt, aber nicht in allen Fällen (000,001,010,. Gewisse Kombinantionen funktionieren nicht (011,110,111,100,110,111)
Ich komme nicht alleine auf den Fehler. Vielen Dank für Eure Hilfe
Pascal
let xerl := Erledigt;
let xzupr := 'zu prüfen';
let xgepr := 'geprüft';
select Massnahmen
where if xerl = true then
'erledigt am' != null
else
'erledigt am' = null and if xzupr = true then
'prüfen am' != null
else
'prüfen am' = null and if xgepr = true then 'geprüft am' != null else 'geprüft am' = null end
end
end
6 Antworten
-
Hallo. Das Problem (oder der Sinn) mit den Ja/Nein-Feldern ist, dass sie drei Rückgabewerte haben: 1. true, 2. false, 3. leer. D.h. Du müßtest alle diese Fälle einbeziehen. Denn Feld != null bedeutet: sowohl true als auch false ist möglich. Ausgangspunkt ist "null", klickst Du einmal dann "true", klickst Du nochmal dann "false". Anders: Wenn du das JA entfernst, dann steht dor t NEIN und nicht NULL. Einfacher wäre wohl hier die Verwendung eines Auswahlfelds mit den drei Wahlmöglichkeiten. Mirko
-
Dynamisch zusammengesetzte select-Abfragen können Probleme mit sich bringen. Um andererseits aber ausufernde if-else-Konstrukte zu vermeiden, arbeite ich in solchen Fällen bevorzugt mit Kombischaltern. Beispiel:
let myS := ""; myS := myS + if Erledigt then "X" else "_" end; myS := myS + if 'zu prüfen' then "X" else "_" end; myS := myS + if 'geprüft' then "X" else "_" end; switch myS do case "___": (select Massnahmen) case "X__": (select Massnahmen[Erledigt]) case "_X_": (select Massnahmen['zu prüfen']) case "__X": (select Massnahmen['geprüft']) case "XX_": (select Massnahmen[Erledigt and 'zu prüfen']) case "X_X": (select Massnahmen[Erledigt and 'geprüft']) case "_XX": (select Massnahmen['zu prüfen' and 'geprüft']) case "XXX": (select Massnahmen[Erledigt and 'zu prüfen' and 'geprüft']) end
-
Sensationell! Das ist ja wirklich viel übersichtlicher als endlos verschachtelte if-else strukturen. Vielen Dank für den Tip.
Was ich seltsam finde, dass ein Ja/Nein Feld auch leer sein darf. Mich dünkt, das sollte doch zumindest in gewissen Fällen zwingend 1 oder 0 sein können/müssen oder mache ich da einen Anfänger-Denkfehler. -
Vielen Dank für die Präzisierungen. Das ist wirklich sehr hilfreich. Und vielen Dank für den Hinweis auf das alte Ninox Handbuch. Die Dokumentation wird immer besser.
Content aside
- Status Answered
- vor 2 JahrenZuletzt aktiv
- 6Antworten
- 100Ansichten
-
3
Folge bereits