Verknüpfung zwischen Tabellen
Hallo,
ich bin neu in Ninox und komme von Access.
Um etwas etwas Gefühl im Umgang zu bekommen, versuche ich gerade zwei Tabellen zu verknüpfen.
Ich habe eine Tabelle "Basisdaten" sowie eine Tabelle "Ausgangsrechnungen".
Die Verknüpfung ist 1:N.
Beide Tabellen beinhalten eine Reisenummer anhand derer die Verknüpfung laufen soll.
In der Ansicht von Basisdaten wurde ein Feld Ausgangsrechnungen angelegt.
Da die Tabellen bereits Daten enthalten, hätte ich es gerne, dass beim Wechsel des
Datensatztes die bereits bestehenden Daten aus "Ausgangrechnungen" angezeigt werden. Das ist jedoch nicht der Fall. Gehe ich auf das Feld in der Ansicht, muss ich einen Datensatz aus "Ausgangsrechnungen" zuordnen.
Ist das nötigt oder mache es etwas falsch?
Gruß
Jan
4 Antworten
-
Hallo jan ,
herzlich Willkommen in der Ninox-Community!
Du musst die Datensätze einander zuordnen. Wenn die Reisenummer in beiden Tabellen vorkommt, kannst du z.B. diese über die Massendatenänderung dafür nutzen. So musst du es nicht per Hand für jeden Datensatz machen.
Vielleicht kannst du deine DB einmal (ggf mit Musterdaten) hochladen, damit wir uns deine Struktur anschauen können?
Liebe Grüße
Stefanie
-
Hi jan ,
Dein Vorgehen ist erst Mal richtig. (Vor allem von Access zu Ninox zu wechseln )
Ninox braucht von dir noch die Anweisung diese Verknüpfungen anhand des "Schlüsselwertes" anzulegen/zuzuordnen.Ich verwende für solche Datenändernungen inzwischen lieber Buttons, es gab in der Vergangenheit mal Probleme mit der Massendatenverarbeitung. Und Buttons mit Skripten kann ich weiter verwenden oder für ähnliche Aufgaben anpassen.
Dieses Skript in einem Button (Layout-Elemente) legt dir die Verknüpfungen automatisch an:for i in select Ausgangsrechnungen do let myA := i.Daten; let myLink_A := first(select Basisdaten where AusgangsrechnungenD = myA); if myLink_A then i.(Basisdaten := myLink_A) end end
Der Button funktioniert in beiden Tabellen oder auch in einer anderen Tabelle, auf Grund der beiden select-Abfragen.
Bei vielen Datensätzen würde ich empfehlen von um "do as server" zu erweitern, sonst kann es passieren, dass manche Zuweisungen "übersprungen" werden (meine Erfahrung).
do as server geht dann auch schneller, braucht aber mehr Serverleistung/Performancedo as server for i in select Ausgangsrechnungen do let myA := i.Daten; let myLink_A := first(select Basisdaten where AusgangsrechnungenD = myA); if myLink_A then i.(Basisdaten := myLink_A) end end end
Viel Erfolg
Ronald -
Hi Ronald,
danke für deine Antwort. Ich bin erst jetzt dazu gekommen, das auszuprobieren.
Was mich in dem Server-Script noch etwas irritiert, ist das "D" an "where AusgangsrechnungenD" - worauf bezieht sich das?
Vermutlich sehe ich den Wald vor lauter Bäumen nicht.
Viele Grüße
Jan -
Moin jan ,
gut, dass du nachfragst.
Wo ich jetzt nochmal lese, muss es es statt AusgangsrechnungD => Reisedaten heißen:do as server for i in select Ausgangsrechnungen do let myA := i.Reisedaten; let myLink_A := first(select Basisdaten where Reisedaten = myA); if myLink_A then i.(Basisdaten := myLink_A) end end end
VG Ronald
Content aside
- vor 2 JahrenZuletzt aktiv
- 4Antworten
- 120Ansichten
-
4
Folge bereits