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
-
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
-
Danke Leo funktioniert, ich musste erst eine Weile suchen um die Änderung zu finden.
I like this!!!
Wolfgang
-
Hallo Leo,
mit der neuen 2.6.1 scheint diese Formel nicht mehr zu funktionieren?
Beste Grüße Andreas
-
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
endAllerdings 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 -
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.
-
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?
-
Die „andere Frage" hab ich schon rausbekommen. Wenn man nicht zu Ende denkt
-
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
-
Ups, na ja, dann ...
-
Hallo Copytexter, trotzdem vielen Dank, das hilft mir beim Lernen - ich habe Lösung 2 gewählt
-
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
-
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
-
Moin Copytexter,
mit deiner Vermutung hast du vollkommen richtig gelegen. Das war der Fehler.
Besten Dank
Markus
Content aside
- vor 5 JahrenZuletzt aktiv
- 13Antworten
- 2913Ansichten