0

eval() Funktion im Gestaltungselement Ansicht

Hallo zusammen,

weis jemand, ob die eval() Funktion grundsätzlich im Gestaltungselement Ansicht funktioniert?

Folgendes funktioniert bei mir leider nicht...:

---code---
let my := this;
let myKatType := kategorietyp
eval("select 'girokonto' where number("+myKatType+") = my.Nr", this)

Danke im Voraus!

VG

Johannes

16 Antworten

null
    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Grundsätzlich Ja.
    Vielleicht mit :
     

    let my := number(this);let myKatType :=number(kategorietyp);eval("select girokonto where "+myKatType+" = my", this)

    oder
     

    let my := number(this);let myKatType := number(kategorietyp);eval("select girokonto ["+myKatType+" = my]", this)
      • john_eans
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG bekomm es leider nicht hin

      das hier ist die ursprüngliche Funktion, die auch so arbeitet wie gewünscht:

      let my := this;
      if kategorietyp = "kategorie2" then
          select girokonto where number(kategorie2) = my.Nr
      else
          select girokonto where number(kategorie1) = my.Nr
      end

      durch eval() hatte ich nun vor, das if() weg zu bekommen...aber auch die jeweilige Funktion durch eval() ersetz funktioniert nicht. 

      let my := this;
      if kategorietyp = "kategorie2" then
          eval("select girokonto where number(kategorie2) = my.Nr",this)
      else
          eval("select girokonto where number(kategorie1) = my.Nr",this)
      end
      

      kategorietyp = text

      kategorie1 bzw. kategorie2 in der girokonto Tabelle sind dynamische Auswahlfelder.

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Johannes Faller Kannst du eine Dummy-DB hier hochladen zum anschauen?

      • john_eans
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG gerne!
      Ich hab in der Tabelle Kategorie mehrere Ansichten eingefügt. Die erste und 4te machen, was ich möchte. Allerdings muss ich if() dann bei mehreren Kategorietypen weiter verschachteln oder noch mehr ... or ... hinzufügen.

      Glaube mit eval() wäre man flexibler...

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Johannes Faller Und wann soll wo, was in der DB passieren?
      Ich sehe keine Ansicht und auch keinen Auslöser (Button/Trigger) um die Ansicht zu steuern.

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG Sorry, mein Fehler. Erst lesen dann schreiben

      • john_eans
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG Theoretisch ist die Datenbank natürlich irgendwann mal fertig "entwickelt", von daher ist if() oder ... or ... natürlich möglich. Die Ansichten sollen eigentlich nur die jeweiligen Werte Anzeigen, ggf. mal noch die Werte aufaddieren oder so...

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Johannes Faller In der Form, wie du es möchtest wird es nicht funktionieren. Eine Ansicht setzt zwingend einen konkreten Tabellenbezug voraus, der nicht mit eval() ersetzt werden kann.
      Man kann die Bedingung für die Ansicht mit der eval-Funktion wie folgt schreiben:
       

      let my := this;if kategorietyp = "kategorie1" then    select Girokonto where eval("number(kategorie1) = my.Nr", this)else    select Girokonto where eval("number(kategorie2) = my.Nr", this)end
    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ahoi, ich bin mir nicht sicher, ob ich das Ziel richtig verstanden habe, würde es aber mal so versuchen:

    let myNr := number(this.Nr);
    let myKat := kategorietyp;
    select Girokonto where eval("number(" + myKat + ") = " + myNr, this)
    
      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      planox. pro Moin Axel.
      Dein Script rockt.

      • Ninox-Professional
      • planoxpro
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG 

      Moin Uwe, Zufallstreffer. ;)

      So ganz habe ich selbst nämlich auch noch nicht verstanden, wann man eval() wie genau einsetzen kann. Deshalb habe ich es bisher auch noch nie in Produktiv-DBn genutzt. Relativ sicher ist nur, dass Variablen immer als solche eingefügt werden müssen, nicht als Teil eines Strings (wie in Johannes' erstem Script). Dem Vorschlag lag also ein ganz simpler Gedanke zugrunde.

      • john_eans
      • vor 2 Jahren
      • Gemeldet - anzeigen

      planox. pro Ich bekomm es mit deinem Code leider nicht zum laufen. Deine Herleitung hab ich verstanden, macht Sinn...aber Ninox trotzdem Zicken.

      Ich hab mal die Datenbank mit deinem Code und die Fehlermeldung hochgeladen, die ich bekomme.

      • Ninox-Professional
      • planoxpro
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Johannes Faller So sieht's bei mir aus, ohne dass ich irgendwelche Änderungen vorgenommen hätte:

       

      Funktioniert in der Cloud und in der Mac App. Ich habe so spontan auch keine Idee, wo dieses ominöse  "o(t)" herkommen könnte, das Ninox bei dir bemängelt. 

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Es sieht so aus, als ob Johannes die Ninox-App benutzt und sich die Datenbank nicht in einem Team befindet.
    Da wird eval() nicht funktionieren. 
    Ich habe es  in der Ninox-Reference ergänzt.

      • Ninox-Professional
      • planoxpro
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG Stimmt, mit der App und einer lokalen DB funktioniert es nicht. Warum auch immer. Ein Grund mehr, eval() nicht in Produktiv-DBn zu nutzen.

      • john_eans
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG planox. pro Genau so ist es. Ich werd auf ... or ... oder die if() Variante ausweichen. Besten Dank euch beiden!