0

Doppelte Einträge vermeiden

Hi ich brauche wieder einmal eure Hilfe.

In einer Books Tabelle soll vermieden werden, dass doppelte Einträge entstehen.

Mit diesem Script funktioniert es grundsätzlich

----

let AUTH := BookName;
if cnt((select BOOKS)[BookName = AUTH]) > 1 then
alert("Achtung, dieses Buch existiert bereits");
BookName := null
end

-----

Wenn man jetzt einen doppelten Namen eingibt, erfolgt die Fehlermeldung und der Datensatz wird nicht angelegt.

Wenn man jedoch den gleichen Namen anlegt und aus versehen am Ende noch eine Leerzeichen eingibt, dann wird der Fehler ignoriert.

Gibt es eine Möglichkeit das zu verhindern????

Danke für die Unterstützung 

 

Wolfgang

13 Antworten

null
    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Wolfgang,

    versuch mal so:

    ---

    let AUTH := BookName;
    if cnt((select BOOKS)[BookName like AUTH]) > 1 then
    alert("Achtung, dieses Buch existiert bereits");
    BookName := null
    end

    ---

    Leo

    • Wolfgang
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke Leo funktioniert, ich musste erst eine Weile suchen um die Änderung zu finden.

    I like this!!!

     

    Wolfgang

    • andreas_mtscouteu
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

    mit der neuen 2.6.1 scheint diese Formel nicht mehr zu funktionieren?

    Beste Grüße Andreas

    • Markus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo,

    bei mir funktioniert diese Formel auch nicht. Was habe ich vor: 

    Bisher habe ich die Verwaltung und Auswertung unserer Kicktipp-Runden immer mit Excel gemacht. Mit Hilfe von Ninox sollte das ja auch möglich sein.

    Ich habe eine Tabelle „Teilnehmer", die momentan die Teilnehmer der aktuellen Saison beinhalten. Um die Abrechnungen und Auswertungen zu erstellen, damit ich am Ende der Saison gerüstet bin, wollte ich jetzt die Daten der Saison 1819 mit aufnehmen.

    Die Teilnehmer sind mit separaten Feldern „Nachname" und „Vorname" aufgenommen, diese habe ich dann im Feld „Name" zusammengefügt.

    Der Nachname kann öfter vorkommen, die Kombination aus beiden Feldern allerdings nur einmal.

    Wenn ich das jetzt richtig verstanden habe, muss ich die Formel im Funktionsfeld von „Name" packen.

    let AUTH := Name;
    if cnt((select TEILNEHMER)[Name like AUTH]) > 1 then
    alert("Achtung, dieser Teilnehmer existiert bereits");
    Name := null
    end
     

    Allerdings erzeugt das den Fehler „Diese Funktion darf keine Datenänderungen vornehmen". Habe ich da noch einen Fehler drin oder funktioniert diese Formel tatsächlich nicht mehr nach dem Update, wie Andreas geschrieben hat.

    Was kann ich ändern, damit es funktioniert?

    Viele Grüße
    Markus

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

    Hallo Markus, in Funktionsfeldern werden immer nur Berechnungen durchgeführt und deren Ergebnis angezeigt. In deinem Code wird mit der Zeile "Name := null" aber versucht, einem anderen Datenfeld einen Wert zuzuweisen. Das geht mit Funktionsfeldern nicht, deshalb die Fehlermeldung.

     

    Ich kenne den größeren Zusammenhang jetzt nicht, aber in einem Trigger oder einer Schaltfläche könnte der Code funktionieren. Jedenfalls in den Apps, denn in der Cloud funktioniert das alert() leider generell nur über Schaltflächen.

    • Markus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Copytexter,

    danke für die Info, schon wieder etwas gelernt 👍🏼 

    Nun, ich möchte, wenn ich einen neuen Teilnehmer anlege, angezeigt bekommen/gewarnt werden, wenn der schon in der Teilnehmerliste existiert. Denn ein Teilnehmer kann immer nur einmal vorkommen

     

    Mal eine andere Frage: wie ich weiter oben geschrieben habe, wurden die Teilnehmer mit separaten Feldern „Nachname" und „Vorname" aufgenommen. Diese habe ich dann im Feld „Name" zusammengefügt.

    Wenn ich jetzt aber einen neuen Datensatz anlegen will, soll sich das Feld „Name" automatisch mit den Eingaben der Felder „Nachname" und „Vorname" füllen.

    Das funktioniert nur leider nicht so wie gewünscht, da ich das Script in Feld Name ausführen lassen. Wie bekomme ich das denn hin? 

    • Markus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Die „andere Frage" hab ich schon rausbekommen. Wenn man nicht zu Ende denkt 😇

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

    Hallo Markus, zum Kombinieren der Vor- und Nachnamen gibt es zwei Möglichkeiten.

     

    1. Über ein Funktionsfeld namens 'Name' mit folgendem Code:

     

    Vorname + " " + Nachname

     

    2. Textfeld 'Name' über Trigger "Nach Änderung ..." in den Feldern 'Vorname' und 'Nachname' befüllen:

     

    Name := Vorname + " " + Nachname

     

    Oder, wenn zuerst nach dem Nachnamen sortiert werden soll, in beiden Fällen auch

     

    Nachname + ", " + Vorname

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

    Ups, na ja, dann ...

    • Markus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Copytexter, trotzdem vielen Dank, das hilft mir beim Lernen - ich habe Lösung 2 gewählt

    • Markus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo zusammen,

    ich hole das Thema nochmal nach oben in der Hoffnung, dass ich hier eine Lösung finde.

    Ich habe die Felder „Nachname" und „Vorname", die sich über die Funktion zum Feld „Name” zusammensetzen

    Name := Vorname + " " + Nachname

    In der Testdatenbank 224 doppelte Teilnehmer habe ich einen weiteren Lösungsansatz gefunden, die ich in die Funktion bei Vornamen eingebaut habe. Da funktioniert es auch wunderbar.

    let myVN := trim(Vorname);
    let myNN := trim(Nachname);
    if cnt((select Teilnehmer)[trim(Vorname) = myVN]) > 1 then
    alert("Achtung, diese Teilnehmer existiert bereits");
    Vorname := null;
    Nachname := null
    else
    Name := Vorname + " " + Nachname;
    alert("Neuer Teilnehmer ist angelegt")
    end

    Wenn ich die 3. Zeile jetzt auf auf beide benötigte Felder aufweite, funktioniert es nicht mehr.

    if cnt((select Teilnehmer)[trim(Vorname) = myVN] and [trim(Nachname) = myNN]) > 1 then

    Um das Script bei Funktion im Feld Name einzubauen, müsste der Name ja erstmal zusammengesetzt werden bevor die Prüfung stattfindet 🤨

    Wer hat für das Problemchen eine Lösung für mich parat?

    Schönes Wochenende

    Markus

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

    Hallo, ich vermute, die eckigen Klammern waren einfach falsch gesetzt. Versuch's mal so:

     

    if cnt((select Teilnehmer)[trim(Vorname) = myVN and trim(Nachname) = myNN]) > 1

    • Markus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Moin Copytexter,

    mit deiner Vermutung hast du vollkommen richtig gelegen. Das war der Fehler.

    Besten Dank

    Markus

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 13Antworten
  • 2898Ansichten