0

Zufallszahl mit Schleife generieren

Ein Hallo an alle Experten,

ich bin leider nicht der absolute Ninox-Programmiercrack und benötige daher etwas Hilfe.

Habe mir diesen Code zur Generierung einer Zufallszahl hier aus dem Forum geholt und  an meine Bedürfnisse angepasst.

let myZ := 1 + floor(99999 * random());
'Design ID' := myZ;
if cnt((select Design)['Design ID' = myZ]) > 1 then
    alert("Achtung, diese Design ID existiert bereits");
    'Design ID' := null
else
    'Design ID' := myZ
end

Jetzt möchte ich diesen Code aber nicht manuell anstoßen, sondern beim Anlegen eines Datensatzes automatisiert ablaufen lassen. Sprich: "Generiere eine Zufallszahl -> guck nach ob es sie bereits gibt -> wenn nicht dann trage sie ein -> wenn doch, generiere eine neue und trage sie ein - usw.". Also im Prinzip eine Schleife, ohne den derzeit vorhandenen Alert.

Danke vorab und schöne Weihnachten an die Community

Dietmar

3 Antworten

null
    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Dietmar. Der Code kommt in den Tabelleneinstellungen unter "Trigger bei neuem Datensatz". Die if-Bedingung ist nötig, damit der Code ab 100000 Datensätzen nicht abstürzt. Mirko

    if cnt((select Design).'Design ID') < 100000 then
        let randNumber := first((select Design).'Design ID');
        while cnt((select Design)['Design ID' = randNumber]) = 1 do
            randNumber := floor(random() * 99999) +1
        end
    ;
        'Design ID' := randNumber
    end
    
    • Dietmar_Fels
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Mirko,

    vielen Dank für die auf dem Silbertablett servierte Lösung, es funktioniert so wie gewünscht. Jetzt muss ich mich nur mal damit beschäftigen, zu verstehen wie der Code arbeitet.

    Gruß Dietmar

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen
    • If: wenn die Gesamtzahl der Ziffern der Tabelle unter 100000 liegt...
    • let: weise der Variablen randNumber eine beliebige, schon vorhandene Ziffer zu...
    • while: solange es diese Ziffer schon gibt ... (cnt() = 1) do ...
    • weise der obigen Variablen eine neue Zufallsziffer zwischen 1-100000 zu 
    • while bricht ab, wenn diese neu ist (cnt() = 0)
    • Variable wird Deinem Feld zugewiesen