Die ID eines Datensatzes verwenden
Datensatz-IDs in Ninox
- Jeder neue Datensatz in Ninox erhält eine eindeutige ID (Bezeichner).
- Die Nummerierung beginnt bei einer neuen Tabelle mit
1und wird für jeden neuen Eintrag um1erhöht (2,3usw.). - Gelöschte IDs werden nicht neu vergeben. Die höchste ID der Tabelle gibt daher die Gesamtzahl der jemals angelegten Datensätze wieder, gelöschte und nicht mehr sichtbare eingeschlossen.
- Darstellung der ID:
- IDs lassen sich als Zahl oder als Text darstellen.
- Als Text besteht die ID aus der ID der Tabelle (ein oder mehrere Großbuchstaben) und der Nummer des Datensatzes.
Beispiel:"A1"
Das Wichtigste zu IDs
- Eine ID in Text umwandeln:
- Verwenden Sie die Funktion
string(), um eine textliche Darstellung der ID zu erhalten. - Die Funktion
text()liefert nur den Zahlenteil der ID als Text. Beispiel:"1".
- Verwenden Sie die Funktion
- Beispiel:
"Correct textual representation, e.g. ""A1""";
string(maTable.id);
"Only the numeric part as text, e.g. ""1""";
text(maTable.id);- IDs in Ausdrücken verwenden:
- Bei Rechenoperationen oder Verkettungen nimmt die ID den Typ der anderen Daten an.
- Beispiel:
var t := "Num ID: " + maTable.id;Ergebnis: Num ID: 1
Datensätze anhand der ID suchen
Um einen Datensatz in einer where-Klausel über seine ID zu finden, können Sie entweder eine Zahl oder eine Textdarstellung verwenden.
Mit einer Zahl:
select Customer where id = 1;Mit Text:
Achten Sie bei Text darauf, dass die ID sowohl die ID der Tabelle als auch die Nummer des Datensatzes enthält.
Beispiel:
select Customer where id = "B1";Die Datensatznummer aus einer ID herauslösen
Mit dieser Funktion holen Sie die Datensatznummer aus einer textlichen ID (z. B. A1) heraus:
function recordNumber(id : text) do
"Capture the digit group.";
number(extractx(id, "^[A-Z]+([0-9]+)$", "", "$1"))
end;
"Example: apply to the current record’s ID";
var numId := recordNumber(string(myId));string(myId) wandelt die ID in Text um.
Die RegExp ^[A-Z]+([0-9]+)$ bedeutet:
^[A-Z]+→ ein oder mehrere Buchstaben am Anfang,([0-9]+)→ die gesuchten Ziffern (Fanggruppe 1),$→ Ende der Zeichenfolge.
extractx(..., "", "$1") gibt nur die gefangenen Ziffern zurück.
number(...) wandelt diese Ziffernfolge in eine Zahl um.
Einen Datensatz mit record() finden
record(Table, n) liefert direkt den Datensatz mit der Nummer n, ohne die Tabelle zu durchlaufen. Die Nummer muss eine ganze Zahl größer als null sein:
- eine Dezimalzahl (
3.5), null oder eine negative Zahl liefert nichts, ohne jede Meldung: Ninox rundet die Nummer nicht; 3.0wird akzeptiert: Es entspricht3;- ein Text (
"3") oder eine Liste ([3, 4]) wird schon beim Schreiben der Formel abgelehnt („Expression does not return a number“, „Expression returns multiple values“): Eine als Text erhaltene Nummer wandeln Sie zuerst mitnumber()um.
Die Falle tritt bei einer berechneten Nummer auf (record(Customer, total / 2), wenn total ungerade ist) oder bei einer Nummer, die von außen kommt, zum Beispiel über die API.
"Found: record number 3";
record(Customer, 3);
"Nothing, and no error: Ninox does not round";
record(Customer, 3.5);
"A number received as text must be converted first";
record(Customer, number("3"));Achtung
Eine ganze Zahl, zu der es keinen Datensatz gibt (gelöscht oder noch nicht angelegt), liefert nicht „nichts“: record() liefert einen Verweis auf einen fehlenden Datensatz. if record(Customer, 999999) then ist daher wahr, während if record(Customer, 3.5) then falsch ist.
Um zu prüfen, ob der Datensatz existiert, testen Sie seine ID: Sie ist in beiden Fällen leer.
var n := 3.5;
if record(Customer, n).id then
"The record exists"
else
"No record: n is not a whole number greater than zero, or no record has this number"
end(Gemessen über die API, an einer Tabelle mit 8 Datensätzen.)
