0

Datentypen Gehirnverrenkungen, wie bekomme ich da System rein?

Hallo - ich habe immer wieder Problem mit den Datentypen in den Formeln, die nicht zusammenpassen. Bsp.: number, text
Mit viel Glück schaffe ich es dann, dass einheitliche Datentypen zurück geliefert werden.

Wie kann ich da ein System reinbringen?

Woher weiß ich denn wann was welchen Datentyp hat?

Textfelder und Nummernfelder scheinen ja erst mal klar zu sein, aber selbst da habe ich manchmal Fehler, bei denen ich nicht verstehe, warum dass jetzt der Datentyp xy sein soll.

Hat jemand eine Idee, wo ich das "verständlich" nachlesen kann?
Danke!

2 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Man muss im Zweifelsfall immer schauen, wo der betreffende Wert herkommt. Quelle ist in der Regel ja ein Datenfeld. Und jedes Datenfeld hat einen bestimmten, vom Nutzer festgelegten Typ. Und der verändert sich von alleine nicht. Auch nicht, wenn man ihn in eine Variable übernimmt. Bei "let myVar := ZAHLENFELD" hätte also auch die Variable 'myVar' den Datentyp "Zahl". Man könnte weiterhin mathematische Operationen wie "myVar * 10" damit durchführen.

     

    Wenn da aber bspw. steht "let myVar := text(ZAHLENFELD)", dann muss man halt schauen, was die entsprechende Funktion, in diesem Fall text(), bewirkt und ob damit evtl. eine Datentyp-Konvertierung einhergeht. Bei dieser Formel bekäme die Variable 'myVar' einen anderen Datentyp, nämlich Text (String). Damit kann man keine mathematischen Operationen mehr durchführen. Die Zeile "myVar * 10" ergäbe schon im Editor eine Fehlermeldung "Ungültiger Operator".

     

    Wie text() hat auch die Funktion format() konvertierende Wirkung. Egal, ob ein Datum oder ein Zahlenwert damit aufbereitet wird: Das Ergebnis ist immer ein Text, mit dem keine mathematischen Operationen durchgeführt werden können.

     

    Eine Besonderheit sind die Auswahlfelder. Sie können entweder Texte oder Zahlen zurückgeben. Standard ist allerdings letzteres. "let myVar := AUSWAHLFELD" ergäbe demnach wie "let myVar := number(AUSWAHLFELD)" die numerische ID des gewählten Eintrags als Zahl zurück. "let myVar := text(AUSWAHLFELD)" hingegen die Bezeichnung des Eintrags als Text. Bei Abfragen muss man auf den entsprechenden Datentyp achten. Folgende Abfragen bspw. würden NICHT funktionieren:

     

    if AUSWAHLFELD = "offen" then ...
    if number(AUSWAHLFELD) = "offen" then ...
    if text(AUSWAHLFELD) = 2 then ...

     

    Korrekt wären hingegen folgende Abfragen:

     

    if AUSWAHLFELD = 2 then ...
    if number(AUSWAHLFELD) = 2 then ...
    if text(AUSWAHLFELD) = "offen" then ...

     

    Andererseits beziehen sich auch die meisten Funktionen auf einen bestimmten Datentyp. Mathematische Funktionen wie abs(), round() oder avg() funktionieren nur mit Zahlen, also numerischen Werten, Textfunktionen wie upper(), styled() oder substr() nur mit Strings, also Text- bzw. alphanumerischen Werten. Wenn man also bspw. eine Zahl in der Farbe Rot darstellen will, muss man die Zahl erst in einen Text umwandeln, um diesen dann mit styled() aufbereiten zu können:

     

    let myVar := text(ZAHL);
    styled(myVar, "Red")

     

    Oder verschachtelt in einer Zeile:

     

    styled(text(ZAHL), "Red")

     

    Kurzum: Der Datentyp eines Feldes ändert sich nie. Wenn der betreffende Wert über Skripte und Berechnungsfelder verarbeitet wird, dann muss man ggf. den Weg nachvollziehen und schauen, ob der Datentyp an irgendeiner Stelle verändert wurde.

     

    Grundlegende Infos zu den Datentypen findet man hier:
    https://ninox.com/de/manual/feldtypen/feldtypen

     

    Eine Übersicht der Funktionen hier:
    https://ninox.com/de/manual/erweiterte-Berechnungen/funktions-und-sprachreferenz

     

    Sowie in der Datenbank "0001_Ninox-Referenz" im Webinar-Team.

    • NikOlaas
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Vielen Dank für die ausführlichen Infos!