0

Schaltfläche Nächster Datensatz

Hallo ich habe für die Schaltfläche im Webinar Team dieses Script gefunden

Schaltfläche Nächste Datensatz nach ID

let myId := this.Nr;

openRecord(first(select Books where number(Nr) > number(myId)).Nr)

Jetzt springt der Datensatz von ID zu Id ich würde gerne nachdem ich die Spalte BookName sortiert habe, das der Datensatz nach dieser Spalte entsprechend alphabetisch den nächsten Datensatz aufruft. Wie sieht denn dann das Script aus.

Danke für die Hilfe

Wolfgang

17 Antworten

null
    • Wolfgang
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Gibt es hierzu keine Lösung????

    • Torsten_Stang.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Wolfgang,

     

    Hier mal eine ungetestete Idee:

    Wenn Du immer nach BookName sortierst würde evtl. eine berechneter Index (angestossen als Änderungstrigger im Feld BookName) helfen?

     

    var myIndex := 1;
    for i in Books order by BookName do
       i.Index := myIndex;
       myIndex := myIndex+1;
    end

     

    dementsprechend könntest Du im Button zum nächsten springen mit:

     

    let myId := Index;
    openRecord(first(select Books where Indexx > myId)

     

    lg, Torsten

    • Wolfgang
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Torsten, o. K. ich verstehe den Code.

    Wenn ich das bei BooksName  bei (Nach Änderung folgendes Script eingeben) eingebe, bekomme ich eine Fehlermeldung „ Eine Tabellenspalte wurde nicht gefunden: Books in Zeile 2, Spalte 14“

    Ich befinde mich in der Tabelle Books, auch wenn diese in der linken Spalte nicht auftaucht.

    Worin liegt jetzt mein Fehler.

    Noch eine Frage wo sehe ich beim iPad den Spaltenanzeiger, der in der Desktopversion rechts unten ist (1/14)

    Danke

     

    Wolfgang

    • Torsten_Stang.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Wolfgang,

     

    sorry, sollte heissen:

     

    for i in select Books order by BookName do

     

    lg, Torsten

    • Wolfgang
    • vor 5 Jahren
    • Gemeldet - anzeigen

    var myIndex := 1;
    for i in select Books order by BookName do
    i.(Index := myIndex);
    myIndex := myIndex + 1
    end

    Gibt leider Fehlermeldung Index in Zeile 3, Spalte 12

     

    noch eine Idee???

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Wolfgang,

    versuch mal beim Button folgende Formel:

    ---

    let myFlag := false;
    let myN := BookName;
    let myArr := for i in (select Books) order by BookName do
    if not myFlag and i.BookName != myN then
    void
    else
    if i.BookName = myN then myFlag := true else i end
    end
    end;
    openRecord(first(myArr))

    ---

    Leo

      • privat
      • Olaf_Nensel
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Ich benutze den Code für den Button zum nächsten Datensatz seit langer Zeit mit großer Dankbarkeit.🙏 

      Nachdem ich heute auf v 3.10.10 geupdatet habe, funktioniert die letzte Zeile bei mir jedoch nicht mehr:

      openRecord(first(myArr))

      Nach langem Herumstochern habe ich folgende Umgehungslösung gefunden:

      openRecord(first(select Books where Id = first(myArr)))

      Verrückt, aber der Code für den Button zum vorherigen Datensatz funktioniert unverändert, letzte Zeile:

      openRecord(last(myArr))

      • Leonid_Semik
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Hallo Wolfgang,
      Ninox hat ein Paar neue Funktionen z.B. index von Array. damit kann man jetzt solche Aufgaben besser erledigen: 

      let me := this;
      let mySort := ((select Tabelle1) order by BookName);
      let myIndex := index(mySort, me);
      openRecord(item(mySort, myIndex + 1))
      

      Leo

      • privat
      • Olaf_Nensel
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Hallo Leo,

      wow, was für eine Verbesserung, mit der neuen  index-Funktion von Array!

      Vielen Dank von mir, Olaf. 

      PS:

       wird sicherlich auch begeistert sein. 🙂

    • Wolfgang
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Leo perfekt, ich verstehe den Code zwar nicht, aber es funktioniert super. Jetzt bitte noch für Vorherigen Datensatz

    Was muss ich da ändern????

    Meine Vermutung ist nur eine Änderung bei openRecord statt first.....????

    Wolfgang

    • Wolfgang
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Statt first last geht nicht

    • Birger_H
    • vor 5 Jahren
    • Gemeldet - anzeigen

    last() sollte gehen, wenn first() geht.

    Birger

    • Wolfgang
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Dann springt er nur zum letzten Datensatz aber nicht zu dem davor

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Die Formel lautet:

    ---

    let myFlag := false;
    let myN := BookName;
    let myArr := for i in (select Books) order by BookName do
    if not myFlag and i.BookName != myN then
    i
    else
    if i.BookName = myN then myFlag := true end
    end
    end;
    openRecord(last(myArr))

    ---

    Leo

    • Wolfgang
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Wow Leo Danke funktioniert perfekt😀!!!!

     

    Vielleicht könnte Ninox hier im Forum einen separaten Bereich einrichten, wo derartige Lösungen von Dir und anderen strukturiert abgelegt werden. Das würde bestimmt vielen helfen.

     

    Wolfgang

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Wird schwierig sein. Ninox ist so vielseitig und jede Anforderung ist sehr individuell. Der Copytexter hat eine wunderbare Datenbank 0001_Ninox_Referenz im Webinar Team. Dort sind auch anwendungsbeispiele aufgelistet. Ich werde diese Lösung auch dort platzieren.

    Leo

    • Wolfgang
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ja die Datenbank 0001_Ninox_Referenz im Webinar Team ist für Fortgeschrittene sicherlich hilfreich. Für Newbies, so wie für mich, die sich erst an die Sriltsprache heran tasten zu komplex.

    Aber wie so oft, je mehr man sich damit beschäftigt, desto besser wird es.

     

    BG Wolfgang