Datensätze in verknüpfter Tabelle mit einem "Zählerfeld" hochzählen
Vermutlich wieder mal eine (für mich) peinliche Frage:
Tabelle "Dashboard" mit den Feldern "Auswahl" (dynamisches Auswahlfeld) und "Ausgewählt".
Verknüpft mit der Tabelle "Städte" mit den Feldern "Stadt" und "Zaehler".
Der Sinn: Ich wähle mit "Auswahl" eine Stadt aus und diese wird mit "Ausgewählt" angezeigt.
Dann soll per script in der Tabelle "Staedte" der "Zaehler" der ausgewählten Stadt um 1 erhöht werden.
Das script bekomme ich einfach nicht hin.
Ich würde mich über eine Hilfe sehr freuen.
22 Antworten
-
In das Feld "Nach Änderungen .... usw" des dynamischen Auswahlfeldes:
let myStadtID := 'Auswahl';
first(select 'Städte' where number(Nr) = myStadtID).(Zaehler := Zaehler + 1)
-
let myStadtID := 'Auswahl';
first(select 'Städte' where number(Nr) = myStadtID).(Zaehler := Zaehler + 1);
'Ausgewählt' := first(select 'Städte' where number(Nr) = myStadtID).Stadt
... da fehlte doch noch was
-
Hallo Tobias,
Danke für die schnelle Antwort.
Funktioniert grundsätzlich, aber der Zähler wird nur bei der ersten Auswahl einer Stadt auf "1" gesetzt.
Wenn die gleiche Stadt erneut ausgewählt wird, erfolgt keine Erhöhung.Hast Du da noch eine Idee?
-
Was hast Du denn vor? Was heißt bei der "ersten Auswahl"?
Nach jeder Änderung des Auswahlfeldes wird der Zähler erhöht... bei mir klappt das
Wann, bzw. warum wird denn die gleiche Stadt nochmal gewählt?
-
Ich wollte die Beschreibung einfach gestalten, darum Dashboard und Städte.
Ich möchte eine Auftagsbearbeitung etwas vereinfachen. Ausgewählt werden dort über ein Auswahlfeld Artikel und dann in den Auftrag geschrieben. Mit dem bisherigen Auswahlfeld waren die Artikel bunt durcheinander gewürfelt. Ich möchte mit dem dynamischen Auswahlfeld jetzt erreichen, dass die aufgerufenen Artikel bei jedem Aufruf hochgezählt (Zaehler) werden. Mit "sort by Zaehler" sollen beim nächsten Aufruf der Auswahlliste die am häufigsten gewählten Artikel ganz oben stehen, also eine Art Hitliste. Das wäre übrigens für viele andere Anwendungen sehr praktisch.Zurück zum Beispiel Dashboard / Staedte: Wenn die Zaehlerspalte leer ist und ich das erste mal z.B. Hamburg auswähle, wird der Zähler Hamburg um 1 erhöht. Wenn ich jetzt eine andere Stadt wähle klappt das auch. Wenn ich jetzt wieder Hamburg wähle wird der Zähler um 1 erhöht. Soweit alles gut.
Wenn ich Hamburg auswähle bleibt Hamburg im Auswahlfeld ausgewählt. Wenn ich jetzt wieder auf Hamburg klicke (für eine "neue" Auswahl) wird der Zähler nicht hochgezählt.
Vielleicht müßte das Auswahlfeld den Standardwert "leer" haben, dass ist aber anders als beim bisherigen Auswahlfeld nicht mehr vorgesehen.Ich hoffe Dich jetzt nicht verwirrt zu haben.
Auf jeden Fall schon mal vielen Dank. -
Ja verstehe... gute Idee das mit der internen "Hitliste" .... aber klar, das script läuft ja auch bei "Nach ÄNDERUNG ..." wenn sich nix ändert, ändert sich nix :)
Du musst halt an irgendeinem Punkt dafür sorgen, dass dein Auswahlfeld null ist. Also entweder bei Anlage eines neuen Datensatzes, oder beim schreiben des Auftrags, den Du ja sicher über einen Button ablegst
-
Wenn ich "Auswahl := null" mit einem Button ausläse, funktioniert das "Rücksetzen" des Auswahlfeldes.
Wenn ich "Auswahl := null" an das Ende Deines scripts setze habe ich den gleichen Efekt (ich kann eine Stadt mehrfach hintereinander aufrufen) und es wird gezählt.
ABER, jetzt wird der Zähler jeweils um 2 erhöht.Hast Du dafür eine Erklärung?
let myStadtID := Auswahl;
first(select 'Städte' where number(Nr) = myStadtID).(Zaehler := Zaehler + 1);
'Ausgewählt' := first(select 'Städte' where number(Nr) = myStadtID).Stadt;
Auswahl := null -
if Auswahl != null then
let myStadtID := Auswahl;
first(select 'Städte' where number(Nr) = myStadtID).(Zaehler := Zaehler - 1);
'Ausgewählt' := first(select 'Städte' where number(Nr) = myStadtID).Stadt;
Auswahl := null
endWarum -1 statt +1.
Wenn du eine Hitliste bauen möchtest, so dass der meistgewählte Ausdruck im dynamischen Auswahlfeld immer oben stehen soll musst du mit negativen Zahlen arbeiten, da order by nur aufsteigend sortiert. Das wird im dynamischen Auswahlfeld erst dann richtig angezeigt, wenn alle Werte mindestens einmal ausgewählt wurden, da ein leerer Zähler 'null' immer an erster Stelle angezeigt wird oder du setzt alle Zähler beim Anlegen auf 0. -
Wenn du bei 'Name des dynamischen Wertes' noch folgendes Script einfügst: 'Zahhler' * -1 + " " + Stadt , hast du in der Anzeige beim aufklappen der Combobox Anzahl und Stadt. (Vielleicht bei gleicher Zaehler Zahl hilfreich)
-
Noch eine Anmerkung.
Du kannst auch mit +1 arbeiten. Dann muss der select der Tabelle im dynamischen Auswahlfeld wie folgt aussehen: select 'Städte' order by 'Zaehler'*-1 um eine absteigende Anzeige zu erhalten.
Manchmal denke ich zu kompliziert. -
Guten Morgen,
das klappt alles prima, auch Deine Erweiterungen.
ABER, wie ich schon mal geschrieben habe: Mein Zähler feld wird nicht 1,2,3 usw. hochgezählt sondern 2,4,6 usw.
Ich habe dafür keine Erklärung. Ich stelle die kleine "Übungsdatenbank" mal in Dropbox. Vielleicht mag ja noch mal jemand reinschauen.
https://www.dropbox.com/s/wyowrczpro83jgd/%23%20AA%20Mehrfachauswahl%20St%C3%A4dte.ninox?dl=0
Vielen Dank.
-
Im Web funktioniert es einwandfrei. Aber in der Mac-App wird der Zähler tatsächlich um 2 hochgezählt. Auch bei etwas verändertem Skript:
'Ausgewählt' := null;
if Auswahl != null then
let myStadtID := Auswahl;
let myRec := first(select 'Städte' where number(Nr) = myStadtID);
myRec.(Zaehler := myRec.Zaehler + 1);
'Ausgewählt' := myRec.Stadt;
Auswahl := null
end
Es liegt also an der App. Aber wo da genau ... Keine Ahnung.
-
...und noch etwas schräger ist, dass es nur bei der Anzeige des dynamischen Auswahlfelds als Comobox auftritt, nicht bei Radio Buttons und Switch ;-)
-
Hallo @MZ.
Weshalb es in der App nicht wie in der Cloud funktioniert kann ich auch nicht sagen. Vielleicht sollte man den Support zu der Diskrepanz App/Cloud informieren.
Um in der App k0rrekte Werte beim Zaehler zu haben einfach die 1 mit 0.5 ersetzen, dann sollte es wie in der Cloudversion aussehen. Du könntest den Code ja entsprechend anpassen mit der Funktion ninoxApp()
Beispiel:
let vZaehler := 0.5;
if ninoxApp()="web" {or ninoxApp() = "ipad" etc.} then
vZaehler := 1
end;
'Ausgewählt' := null;
if Auswahl != null then
let myStadtID := Auswahl;
first(select 'Städte' where number(Nr) = myStadtID).(Zaehler := Zaehler + vZaehler);
'Ausgewählt' := first(select 'Städte' where number(Nr) = myStadtID).Stadt;
Auswahl := null
end
Hier solltest du wenn möglich prüfen, ob es in allen App-Versionen (Mac,Iphone, iPad, Android) diesen fehler gibt. Ansonsten musst du dann die erste If-Abfrage mit or einschränken.
Bei 'Name des dynamischen Wertes' reicht Zaehler + " " + Stadt. Das *-1 ist hier nicht notwendig, da der Zähler ja positive Zahlen enthält. -
Danke an alle. Jetzt weiß ich wenigstens, das ich nicht spinne. Es scheint tatsächlich ein Fehler "im System" zu sein.
Warum auch immer +0.5 funktioniert, wenn auch völlig unlogisch.
Danke an alle Beteiligten.
-
Hallo,
die Idee mit der Hitliste finde ich auch nicht schlecht! Man muss aber bedenken, dass Menschen gewohnheitstiere sind und eine Sortierung nach Hitlist dann die Liste immer unterschiedlich sortieren wird. Am Laptop nicht so schlimm, da man das Ergebnis mit den ersten Buchstaben eingrenzen kann. bei Nutzung von Smartphone schon nicht mehr so praktisch, da man die Tastatur benötigt.
Ich würde zwei dynamische Felder einfügen.
Eines mit der gesamten Liste (fullList), sortiert nach Alphabet und eines, welches 5 Ergebnisse mit dem höchsten bzw. niedrigsten Zähler ausgibt (topList).
Die Auswahl des fullList wird gefüllt von dem Wert aus der Top-List Auswahl....
Hab da mal ein Beispiel erstellt: https://www.dropbox.com/s/28c8qlooya72ila/Staedte_Test.ninox?dl=0
-
Hallo,
https://www.dropbox.com/s/28c8qlooya72ila/Staedte_Test.ninox?dl=0
läßt sich bei mir nicht öffnen.
-
Bitte mal mit Chrome versuchen. Safari öffnet die Seite bei mir auch nicht, Chrome und Firefox aber schon.
-
Bei mir funktioniert der Link in Safari.
-
Ja, der download funktioniert. Die Datei wird aber in NINOX nicht geöffnet und findet sich auch nicht in der Datenbankauflistung. Das hatte ich noch nie.
-
Ich habe die Datenbank als Archiv gesichert. Gibt es hier noch eine andere Möglichkeit?
Hier mal mein Weg schriftlich...
Ich habe eine Tabelle Städte, mit den Spallten: Name, Zähler
und eine Tabelle Besuche, mit den Spalten: Top5Stadt , Stadt
- Top5Stadt (Dynamisches Auswahlfeld einzeln):
### Dynamic Values -> Hier werden die 5 meist verwendeten selekiert
let counter := 5;
let topCities := ((select 'Städte' where Stadt != null) order by 'Zähler');
let myTopCities := slice(topCities, 0, counter);
myTopCities###
- Stadt (Dynamisches Auswahlfeld einzeln) -> Alle Städte sortiert nach Stadtname
###
(select 'Städte' where Stadt != null) order by Stadt
###
In der Tabelle Besuche auf Tabellen-Ebene nach Änderung schreibe ich die Auswahl von Top5Stadt in Stadt um Stadt als mein reguläres Feld zu nutzen.
###
let myVisit := this.Stadt;
let counter := cnt(select Besuche where Stadt = number(myVisit));
let myCity := first(select 'Städte' where Nr = number(myVisit));
let ascCounter := 0 - number(counter);
myCity.('Zähler' := ascCounter)###
Die Scripte natürlich ohne die ###!
-
Hallo CRo,
das ist ja superfreundlich. Vielen Dank.
Archiv ist richtig, woran es liegt, keine Ahnung.
Noch eine schönes Wochenende.
Content aside
- vor 3 JahrenZuletzt aktiv
- 22Antworten
- 1447Ansichten