0

Verständnisfrage Id/Nr Feld

Liebe Ninox Experten, auf meinem Weg die Programmierung in Ninox besser zu verstehen, habe ich ein paar Fragen zum Id/Nr Feld.

 

1. in der englischen Version Id, in der deutschen Nr, aber dasselbe Feld, richtig?

 

2. wird automatisch hochgezählt, auch bei gelöschten Datensätzen, also AutoIncrement. Irgendwie zurücksetzbar?

 

3. in der Tabellenansicht kann ich mir das Feld Id/Nr anzeigen lassen; in der Maskenansicht nur durch ein berechnetes Feld in dem ich einfach nur

Nr

einfüge. Oder gibt es eine andere Möglichkeit?

 

4. aus einer beliebigen nicht referenzierten Tabelle gibt die Abfrage

select Tabelle

nichts zurück (müsste nicht eigentlich die Id/Nr aller Datensätze angezeigt werden?). Genauso bleibt

select Tabelle.Nr

ohne Ergebnis. Auch

let x := (select Tabelle).Nr;

x

liefert nichts.

Nehme ich aber ein beliebiges Feld aus der Tabelle, also

let x := (select Tabelle).Bezeichnung;

x

oder auch nur

select Tabelle.Bezeichnung

dann werden mir die Bezeichungen im berechneten Feld ausgegeben. Warum ist das so? Warum werden mit der Select Anweisung die Id/Nr der Datensätze nicht angezeigt? Oder mache ich was falsch.

 

Ich danke Euch schon mal für die Hilfestellung!

7 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Arne, ich versuche mal, deine Fragen zu beantworten:

     

    1. Ja, wobei - genau genommen heißt das Feld "_id" (interne Felder beginnen mit einem Unterstrich).
    2. Nein, nicht zurücksetzbar.
    3. Die DatensatzNr ist für den Nutzer normalerweise uninteressant, deshalb im Formular nicht Standard. Wer sie dort partout doch sehen will, macht sie halt mit einem Funktionsfeld sichtbar.
    4. Gute Frage. Gegenfrage: Wozu könnte man sowas brauchen?

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Zu der Frage 4. Meine Theorie:
    select Tabelle und select Tabelle.Nr sind für Ninox identisch und geben Ninox nur den Befehl eine Tabelle zu nehmen. Möchte man die Auflistung aller IDs haben, kann man das mit select Tabelle.number(Nr) realisieren. Wobei es auch nicht richtig ist weil die Funktionsfelder eigentlich für Texten oder Zahlen gedacht war und die Arrays nur intern verwendet werden. Also select Tabelle.concat(Nr).

    Leo

    • Arne.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    @Copytexter: ich versuche nach und nach die Logik und Syntax besser zu verstehen. Und 4. ist mir aufgefallen, als die Aufgabenstellung aus meinem anderen Beitrag (Abfrage voriger Eintrag aus derselben Tabelle) versucht habe zu lösen. ich dachte, ich könnte vielleicht die IDs auslesen und dann einfach die vorige auswählen. Na gut, ich arbeite dran ... : )

     

    Eure Antworten haben mir schon mal etwas mehr Verständnis beschert. Vielen Dank! Habt einen schönen Abend.

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

    Hallo Arne, falls es dich tröstet: Ich finde das mit den Datensatznummern bzw. -IDs bei Ninox ehrlich gesagt auch nicht ganz schlüssig. So würde man bei 'Nr' ja einen numerischen Wert, also eine Zahl erwarten. Man bekommt aber einen String, was schon daran zu erkennen ist, dass der Wert linksbündig im Feld steht. Deshalb muss man ihn bei Bedarf erst mit number() in einen numerischen Wert umwandeln.

    Ursache ist vermutlich, dass Ninox intern nicht nur mit Nummer selbst arbeitet, sondern auch mit einem  Kürzel aus Buchstaben und Ziffern für die Tabelle. Denn nur so ist es ja möglich, dass man anhand der "ID" auch auf Datensätze anderer Tabellen zugreifen kann. Wenn man also bspw. schreibt "let me := this", dann steht in der Variable "me" die komplette Angabe mit Table und Record. Deshalb unterscheide ich gedanklich meist zwischen Nummer und ID. Leider lässt sich letztere aber nicht sichtbar machen (ich wüsste jedenfalls nicht, wie), so dass man in speziellen Fällen herumprobieren muss.

    Vielleicht kann Leo noch was Genaueres dazu sagen, denn der kennt Ninox ja fast besser als die Entwickler. Auf jeden Fall deutlich besser als ich.

    Dein Ansatz, die ID auszulesen und die vorherige zu suchen, war m. E. aber prinzipiell richtig. Allerdings kann man das schon innerhalb des "select" machen, indem man auf "< me" filtert und mit last() auf den letzten Datensatz der Ergebnismenge zugreift. Problem: Die Sortierung erfolgt seltsamerweise auch alphanumerisch, so dass man explizit angeben muss, dass die Tabelle nach der Nummer als Zahl sortiert werden soll.

    Ich habe der Vollständigkeit halber in dem anderen Thread noch eine entsprechende Variante gepostet, mit der es auch gehen sollte. Siehe
    https://ninox.com/de/forum/technische-hilfe-5ab8fe445fe2b42b7dd39ee8/abfrage-voriger-eintrag-aus-derselben-tabelle-5f05e657ef3f87342f32da6d?post=5f072f7acdbb2a0a196d9c8d&page=1

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Die vollständige ID lässt sich mit raw(this) auslesen

    Leo

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

    Aah, raw(), na klar ... *vordieStirnklatsch*

     

    Da hätte ich auch selber drauf kommen können. Bin ich aber nicht. Schreib ich mir gleich auf. Danke!

    • Arne.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ihr seid klasse. Es formt sich immer mehr ein Bild von Ninox in meinem Kopf. Das ist gut. Danke dafür! Heute habe ich die nächsten Programmierhürden auf der ToDo Liste. Mal schauen, wie weit ich erstmal selber komme.

Content aside

  • vor 3 JahrenZuletzt aktiv
  • 7Antworten
  • 1706Ansichten
  • 1 Folge bereits