0

Bitte um Hilfe beim Script

Hallo zusammen,

Nach langen herumprobieren, komme ich mal wieder nicht weiter und brauche bitte eure Hilfe.

Ich habe mal kleine DB quasi einen Auszug der DB erstellt.

1. In PLZ_Suche habe ich in der Tabelle (Trigger nach Änderung)

let myZahl := 100;
if special = 1 then
    Tabelle1.(Zahl := myZahl)
else
    Tabelle1.(Zahl := null)
end
Somit wird in Tabelle1 (wenn in PLZ_Suche 'special' angeklickt wird)  bei Feld 'Zahl' 100 stehen. Da das schon mal funktioniert hat, dachte ich mir, dass ich in PLZ_Suche 'Trigger nach Änderung' ein weiteres Script setzen könnte.

Nun möchte ich in Tabelle1 Feld Zahl 2 gerne folgendes erreichen:

Wenn in Tabelle PLZ_Suche im Feld Einwohnerzahl zwischen 0 - 19.999 steht,

dann soll in Tabelle1 im Feld Zahl2

wenn dynamisches Auswahlfeld 'Daten A' (in meinem Kontrukt ist das DantesatzNr1), dann 1000

wenn dynamisches Auswahlfeld 'Daten B' (DatensatzNr5), dann 1100

stehen.

Wenn bei Einwohnerzahl zwischen 20.000 - 49.999 steht,

dann soll in Tabelle1 im Feld Zahl2

wenn dynamisches Auswahlfeld 'Daten A', dann 1300

wenn dynamisches Auswahlfeld 'Daten B', dann 1400

 

usw.

Im dynamischen Auswahlfeld werden auch eben nur diese zwei DatensätzeNr 1 und 5 benutzt.

Mein Ansatz war folgender:

if Einwohnerzahl > 0 and Einwohnerzahl < 19999 then
    switch Tabelle1.'Zahl 2' do
    case 1:
        if Tabelle1.'Auswahl (dynamisch)' = 1 then
            Tabelle1.('Zahl 2' := 1000)
        else
            if Tabelle1.'Auswahl (dynamisch)' = 2 then
                Tabelle1.('Zahl 2' := 1500)
            end
        end
    end
end

Hat leider nicht geklappt.

Hat jemand eine Idee, wie ich das richtig umsetzen könnte?

 

Ich danke schon mal für jede Hilfe.

 

Gruß Kruna

 

PS ich kann die DB z Zt nicht hochladen und werde es später noch einmal versuchen!

13 Antworten

null
    • Kruna
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Sorry für den DoppelPost, hier nun die testDB.

    wünsche noch eine schönen Tag.

    Gruß

    Kruna

    • Kruna
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo zusammen,

     

    entschuldigung, dass ich noch mal nachfrage.

    Hätte jemand evtl eine Idee, wo der Fehler liegen könnte? Ich komme in dem Punkt einfach nicht weiter.

     

    Danke schon mal und schönen Sonntag.

     

    Gruß Kruna

    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen
    @Kruna  said:
    Ich habe mal kleine DB quasi einen Auszug der DB erstellt.
    1. In PLZ_Suche habe ich in der Tabelle (Trigger nach Änderung)

     

    Hallo Kruna, ich bin nicht so recht schlau aus deiner Beschreibung geworden und habe mir deshalb die DB angesehen. Da lässt sich in der Tabelle 'PLZ_Suche' aber weder ein Trigger "Nach Änderung" finden noch ein Feld namens "special". Auch eine Tabelle1 gibt es in der DB nicht. Hast du vielleicht die falsche DB hochgeladen oder sie nach dem Posting verändert?

    • Kruna
    • vor 2 Jahren
    • Gemeldet - anzeigen

    HAllo planox,

     

    ja, peinlich! Ich konnte die DB nicht sofort hochladen, da mein Post einen ganzen Tag in einer Freigabe-Schleife fest hing. Was auch nicht schlimm war, der Support hatte es dann korrigiert. Ich hatte in der Zeit nach einer Lösung gesucht und habe an der DB 'herumgebastelt' und ausprobiert.

    Nun, special ist jetzt prio und Tabelle1 ist Tabelle2.

    Den Trigger habe ich wieder gelöscht, weil ich da nicht weitergekommen bin.

    Ich habe mir schn fast gedacht, dass ich mich mal wieder unverständlcih ausgedrückt habe. Dazu habe ich soviel ausprobiert, dass ich gar nicht mehr weiß, was genau ich da gemacht habe. 😱

    Entschuldigung für die Verwirrung.

     

    Gruß Kruna

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Kruna

    Probiere mal folgendes im 'Tabellentrigger nach Änderung':

    let myZahl := 100;
    if prio then
        Tabelle2.(Zahl := myZahl)
    else
        Tabelle2.(Zahl := null)
    end;
    switch EinwohnerZahl do
    case EinwohnerZahl > 0 and EinwohnerZahl < 20000:
        switch Tabelle2.'Auswahl (dynamisch)' do
        case 1:
            Tabelle2.('Zahl 2' := 1000)
        case 5:
            Tabelle2.('Zahl 2' := 1100)
        end
    case EinwohnerZahl >= 20000 and EinwohnerZahl < 50000:
        switch Tabelle2.'Auswahl (dynamisch)' do
        case 1:
            Tabelle2.('Zahl 2' := 1300)
        case 5:
            Tabelle2.('Zahl 2' := 1400)
        end
    end
     

    Annahme: Die ID in der dynAWF-Tabelle stimmt mit dem Case-Wert überein.

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG Da hat sich ein Fehler eingeschlichen:

      let myZahl := 100;
      if prio then
          Tabelle2.(Zahl := myZahl)
      else
          Tabelle2.(Zahl := null)
      end;
      switch EinwohnerZahl >= 0 do
      case EinwohnerZahl > 0 and EinwohnerZahl < 20000:
          switch Tabelle2.'Auswahl (dynamisch)' do
          case 1:
              Tabelle2.('Zahl 2' := 1000)
          case 5:
              Tabelle2.('Zahl 2' := 1100)
          end
      case EinwohnerZahl >= 20000 and EinwohnerZahl < 50000:
          switch Tabelle2.'Auswahl (dynamisch)' do
          case 1:
              Tabelle2.('Zahl 2' := 1300)
          case 5:
              Tabelle2.('Zahl 2' := 1400)
          end
      end

      Man kann das Script noch straffen wenn noch weitere Einwohnerzahlen geprüft werden sollen:

      function fx_Zahl2(OptionA : number,OptionB : number) do
          switch Tabelle2.'Auswahl (dynamisch)' do
          case 1:
              Tabelle2.('Zahl 2' := OptionA)
          case 2:
              Tabelle2.('Zahl 2' := OptionB)
          end
      end;
      let myZahl := 100;
      if prio then
          Tabelle2.(Zahl := myZahl)
      else
          Tabelle2.(Zahl := null)
      end;
      switch EinwohnerZahl >= 0 do
      case EinwohnerZahl >= 0 and EinwohnerZahl < 20000:
          fx_Zahl2(1000, 1100)
      case EinwohnerZahl >= 20000 and EinwohnerZahl < 50000:
          fx_Zahl2(1300, 1400)
      end

      Man kann innerhalb des letzten switch weitere Einwohnerzahlprüfungen einfügen und muss der Funktion nur die einzutragenden Werte übergeben.

    • Kruna
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Uwe,
    wow, das funktioniert genauso, wie es soll!! Klasse, ich bin echt total begeistert!!! VIELEN DANK!!

    Ich habe allerdings folgendes gemacht --> in Tabelle 2 im Trigger:

    function fx_Zahl2(OptionA : number,OptionB : number) do     

    switch 'Auswahl (dynamisch)' do     

    case 1:       'Zahl 2' := OptionA   

    case 2:    'Zahl 2' := OptionB     

    end

    end;

    switch PLZ_Suche.EinwohnerZahl >= 0 do

    case PLZ_Suche.EinwohnerZahl >= 0 and PLZ_Suche.EinwohnerZahl < 20000:     

    fx_Zahl2(1000, 1100)

    case PLZ_Suche.EinwohnerZahl >= 20000 and PLZ_Suche.EinwohnerZahl < 50000:     fx_Zahl2(1300, 1400)

    end

    Desweiteren in Tabelle PLZ_Suche im Trigger:
    let myZahl := 100;

    if prio then     

    Tabelle2.(Zahl := myZahl)

    else    

    Zahl := null end;

    klappt auch wunderbar, nur habe ich gerade festgestellt, dass das auch vom dynamischen Auswahlfeld abhängig ist, also wenn prio, dann
    wenn Tabelle2.dynA = Nr1 dann 100
    wenn Tabelle2.dynA = Nr5 dann 200

    Mein Ansatz war ua

    if prio then
        switch Tabelle2.dynA do
        case 1:
          Tabelle2.Zahl := 100
        case 5:
           Tabell2.Zahl := 200
        end
    end

    ich habe auch versucht:

    let myZahl := switch Tabelle2.dynA do
        case 1:
          Tabelle2.Zahl := 100
        case 5:
           Tabell2.Zahl := 200

    end;

    if prio then     

    Tabelle2.(Zahl := myZahl)

    else    

    Tabelle2.(Zahl := null)

    end

     

    hat leider auch nicht geklappt. Hast Du eine Idee, was ich da übersehen habe?

     

    Gruß Kruna

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Kruna Probiere mal folgendes:

      function fx_Zahl2(OptionA : number,OptionB : number) do
          switch Tabelle2.'Auswahl (dynamisch)' do
          case 1:
              Tabelle2.('Zahl 2' := OptionA)
          case 5:
              Tabelle2.('Zahl 2' := OptionB)
          end
      end;
      function fx_prio() do
          switch Tabelle2.'Auswahl (dynamisch)' do
          case 1:
              Tabelle2.(Zahl := 100)
          case 5:
              Tabelle2.(Zahl := 200)
          end
      end;
      if prio then
          fx_prio()
      else
          Tabelle2.(Zahl := null)
      end;
      switch EinwohnerZahl >= 0 do
      case EinwohnerZahl >= 0 and EinwohnerZahl < 20000:
          fx_Zahl2(1000, 1100)
      case EinwohnerZahl >= 20000 and EinwohnerZahl < 50000:
          fx_Zahl2(1300, 1400)
      end

      Du kannst die Funktion fx_prio() auch noch dahin gehend ändern, daß die einzutragenden Werte mit übergeben werden.

    • Kruna
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Guten Morgen Uwe,

    das hat prima geklappt! Vielen, vieeln Dank, es funktionert alles bestens!

    Ich habe noch eine Frage dazu. Gibt es bei den dynamischen Feldern auch die Möglichkeit der Einschränkung (zB bei Verknüpfungen), so dass zB nur bestimmte Datensätze angezeigt werden. In diesem Fall DantensatzNr 1,5,17,18?

    Es gibt ja eine sehr gut beschriebenen Post von planox bzgl der DAF. Ich versuche gerade, dass irgendwie mit

    let myNr := number(DynAuswahl);
    let myID := first((select Mitarbeiter)[number(Nr) = myNr])
    myID.Datenfeld

    umzusetzen, aber leider ohne Erfolg. Ist das bei DAF denn überhaupt Möglich? Ich kann in Netz leider nichts dazu finden.

     

    Vielen Dank und einen schönen Wochenanfang.

     

    Gruß Kruna

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

       Eine Einschränkung wie bei Verknüpfungen wohl nicht. Aber du bist schon auf dem richtigen Weg die Anzeige über den select per Bedingung einzuschränken.
      Ein Beispiel dazu:

      if Auswahl then
          ((select TabelleDAF) order by Text)[odd(number(Nr))]
      else
          ((select TabelleDAF) order by Text)[even(number(Nr))]
      end

      Hier werden in Abhängigkeit eines Ja/Nein Feldes entweder alle Datensätze angezeigt, dessen ID gerade oder ungerade ist.

      Du musst halt für deinen Fall herausfinden, wie die Bedingung/Bedingungen auszusehen haben, um nur die passenden Records im Auswahlfeld anzuzeigen.

      Das ist wie bei einer Ansicht im Formular. Für jede Konstellation benötigst du ein eigenes select.

    • Kruna
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Uwe,

    ok soweit habe ich das verstanden.

    Ich habe zB durch

        ((select Zusatz) order by Text)[number(Nr = 14)]

    den 14. Datensatz angezeigt bekommen. Der 15.Datensatz will nicht!😅

    Ich habe dann in der Tabelle ein ja/NeinFeld hinzugefügt, angeklickt und unter anderem (alles ausprobieren, bis es klappt) folgenden Code:

    if Zusatz2.'Einschränkung'  then
        ((select Zusatz) order by Text)[number(Nr=14 )]

    verbunden mit and/or/+

        ((select Zusatz) order by Text)[number(Nr=15 )]
    end

    dann

    if Zusatz2.'Einschränkung'  then
        ((select Zusatz) order by Text)[number(Nr )]

    funktioniert irgendwie auch nicht.

    Letztendlich kann ich es auch dabei belassen, aber es wurmt mich schon, dass ich das nicht hinbekomme.

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    if Zusatz2.'Einschränkung'  then
        ((select Zusatz) order by Text)[number(Nr)=14 or number(Nr)=15 ] 

    Damit werden dir die Records mit der ID 14 und 15 angezeigt.

    • Kruna
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Uwe,

    genauso funktioniert es!! :-) Vieeln Dank für die super tolle Hilfe, das hat mir enorm weitergeholfen.👍

    Gruß Kruna