0

Eindeutige ID pro Datensatz und Vergleichsmöglichkeiten/Suchmöglichkeiten in anderen Tabellen

Hallo.

Ich habe ein Problem, bei dem ich nicht weiter komme.

Ich habe verschiedene Tabellen, wobei manche verknüpft sind und andere nicht.

Zum einen möchte ich gerne pro Datensatz automatisch eine einmalige nicht änderbare ID vergeben, mit der ich auch arbeiten kann.

Sowas wie ein Primärschlüssel.

(Anzeigen, suchen, Auslesen etc.)

Ich habe es schon geschafft ausgewählte Daten eines erstellten Datensatzes über einen Button in eine andere Tabelle als neuen Datensatz zu kopieren.

Ich würde gerne vor der Erstellung des neuen Datensatzes erst prüfen, ob dieser nicht bereits dort vorhanden ist.

Da fehlt mir die Sprachsyntax der Ninox-Programmiersprache,

Hier nochmal ein Hinweis auf eine vollständiges Nachschlagewerk mit Beispielen zu allen Funktionen/Befehlen in der Ninox-Programmiersparache.

Ansonsten ziehe ich viel aud dem Forum und versuche meine Probleme an den hier beschriebenen Frage und Lösungen zu lösen.

Das klappt manchmal mir try and error.

Manchmal stehe ich jedoch völlig auf den Schlauch wegen der mangelnden Dokumentation.

Siehe: Finde einen Datensatz in einer anderen Tabelle 
           Erstelle automatisch eine eindeutige Datensatz ID oder falls es schon automatisch geschieht, wie komme ich da ran

Vielen Dank für eure Hilfe

Gruss

Uwe

8 Antworten

null
    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Uwe,

    die eindeutigen IDs werden von Ninox automatisch generiert und können auch nicht gelöscht oder geändert werden. Anzeigen kannst du diese indem du ein Funktionsfeld aufrufst und Nr oder _id rein schreibst. Bei Spalten in der Tabellenansicht steht Nr auch so zur Verfügung.

    Finde einen Datensatz in einer anderen Tabelle:

    select Tabellenname where Vorname="Leo". 

    Findet alle Datensätze die Leo als Vorname haben. Um eindeutigkeit zu erzwingen kann man so schreiben:

    first(select Tabellenname where Vorname="Leo")

     

    Leo

    • UweG
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Leo

    Danke ersteinmal für die Antwort.

    Die von dir vorgeschlagene ID-Funktion ist nicht das richtige für mich, da es nur eine Zahl erzeugt, die auch in anderen Tabellen vorhanden ist.

    Ein weiteres Problem ästhetischer Natur für mich besteht hier, wenn ich einen Datensatz aus der Tabelle lösche.

    dann fehlt zBsp bei 100 Datensätzen die Nr. 49.

    Oder aber ich lösche den letztenDatensatz mit der nummer 50 und erstelle einen neuen Datensatz, der dann wieder die Nummer 50 bekommt.

    Das gibt dann Kuddelmuddel bei vorhandenen Verweisungen.

    Ich benötige eine nur einmalig vorhandene ID (Buchstaben/Zahlen Kombination) die nur einmal in dem gesamten Projekt vorhanden ist.

    Das Programm erzeugt ja zBsp automatisch eine `Global eindeutige ID' wenn ich eine Tabelle erzeuge.

    Soetwas hätte ich gerne auch wenn ich einen Datensatz erzeuge.

    Von mir aus ein automatisches ID-Feld als Funktion.

    ----------------------

    Zur Suchfunktion.

    Wie werte ich das Ergebnis aus?

    Bsp. Ist vorhanden oder ist nicht vorhanden.

    Hier ist die einmalige ID für mich notwendig, da diese pro Tabelle nur einmal vorhanden sein darf.

    Gruss

    Uwe

    • UweG
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Leo

    Das mit der ID habe ich gelöst.

    Ich nenne jetzt in jeder Tabelle die Berechnete ID ID.Tabellenname.

    In den anderen Tabellen, wo diese ID genutzt wird erzeuge ich ein weiteres Feld ID.Herkunftstabelle und schreibe den Wert rein.

    Damit kann ich gut leben und die Eindeutigkeit ist gewährleistet.

    Auch werden die erzeugten ID's nicht wieder erzeugt, falls mal ein Datensatz gelöscht wird. Habs probiert.

    Jetzt geht es nur noch um die Weiterverarbeitung der Suchfunktion

    Gruss

    Uwe

    • UweG
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Noch etwas.

    Ich habe Probleme die erzeugte ID ind der anderen Tabelle zu speichern.

    Ich nutze in der Tabelle Rezepte einen 'Button' bei dem folgender Code hinterlegt ist:

    -------------

    var vIDRezept := 'ID.Rezept';
    let p := (create Nahrungsmittel);
    p.('ID.Rezept' := vIDRezept);
    void

    --------------

    Damit soll der per Funktion _nr erzeugte Wert im Feld 'ID.Rezept' in die Tabelle Nahrungsmittel in das dortige Feld 'ID.Rezept' geschrieben werden.

     

    In der Tabelle Nahrungsmittel habe ich ein Feld 'ID.Rezept' als Zahl definiert.

    Leider wird kein Wert in dem neu erzeugten Datensatz im Feld ID.Rezept geschrieben.

    Wenn ich das Feld als Textfeld definiere wird der Wert reingeschrieben mit einem vorangestellten 'B' (B12 statt 12) 

    Wenn ich das Feld als Funktion definiere, bekomme ich schon Fehler in der Formel angezeigt.

    Wo liegt hier mein Fehler?

    • Emanuel_Neubert.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Versuche es einmal mit p.('ID.Rezept' := number(vIDRezept));

    • UweG
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Emanuel.

    Danke für die Antwort.

    Habe ich so eingegeben.

    Bekomme die Fehlermeldung 'Die Funktion ist nicht definiert: Number(nid) in Zeile ....'

    Klappt also so nicht.

    Gruss

    Uwe

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Uwe,

    Ich glaube, du musst deine SQL Vorkentnisse vergessen. Im Gegensatz zu Access oder SQL-Server muss du bei NINOX nicht mit IDs hantieren. Die selbst ernannte IDs kannst due nicht bei Verknüpfungen einsetzen. Aber, du kannst die Datensätze dierekt verknüpfen:

    ---

    let my:=this;

    let newN:=create Nahrungsmittel;

    newN.Rezept:=my

    ---

    Dabei Rezept ist der Name der Verknüpfung mit der Tabelle Rezept. Die Verknüpfungsfelder kann man dann beliebig formatieren.

    Leo

    • UweG
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Leonid

    Ich möchte keine Verknüpfung zwischen den beiden Tabellen.

    Ich möchte einfach Teile des in einer Datenbank erzeugten Datensatzes in einer anderen Tabelle speichern.

    Bevor ich einen neuen Datensatz in der anderen Tabelle erzeuge, soll anhand der ID geprüft werden ob diese bereits vorhanden ist.

    Wenn nicht, soll ein neuer Datensatz erzeugt werden und einige Werte (Nicht alle) des Datensates gespeichert werden.

    Wenn die ID in der anderen Tabelle bereits vorhanden ist (dafür die Select first-Abfrage, wo ich immer noch nicht weiß wie ich das Ergebnis

    von Select bekomme und auswerte, vielleicht mit IF Then) die Werte dieses Datensatzes überschreiben.

    Was bringt mir eine ID, wenn ich nichts damit anfangen kann.

    Danke nochmals für deine Hilfe.

    Gruss

    Uwe

Content aside

  • vor 5 JahrenZuletzt aktiv
  • 8Antworten
  • 4982Ansichten