0

Wie bekomme ich die ID aus einer Ansicht ?

Ich habe eine Tabelle DRUCKFORMEN. Darin habe ich eine Ansicht (select 'Aufträge Positionen Stückliste').

Jetzt rufe ich einen Datensatz aus dieser Ansicht ('Aufträge Positionen Stückliste') auf und benötige dann die ID des aktuellen Datensatzes aus DRUCKFORMEN. Es besteht noch keinerlei Verbindung zwischen den beiden Datensätzen.

Gibt es da eine Lösung ? 

7 Antworten

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

    Hallo Wolfgang, das ist im Grunde ja genau der entscheidende Unterschied zwischen Verknüpfungen und Ansichten. Letztere können Daten aus einer beliebigen Tabelle anzeigen, zu der technisch gesehen kein Bezug bestehen muss. Aber hier soll ja offenbar ein Bezug hergestellt werden. Deshalb würde das mit einer Verknüpfung machen.

    • Wolfgang_Bangert
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ich stelle Kalenderumschläge her. Diese werden auf einer Sammelform zusammengestellt. Je eine Sammelform wird in der Datei DRUCKFIRMEN dargestellt. In der Ansicht lasse ich alle möglichen Kalenderumschläge aus 'Aufträge Positionen Stückliste' darstellen, die der aktuellen Druckform zugeordnegt werden können.

    D.h. es besteht noch gar keine Verknüpfung, der Datensätze aus der Ansicht. Mein Ziel ist es genau, diese Verknüpfung herzustellen.

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

    Um zwei Tabellen miteinander zu verknüpfen, öffnet man eine der Tabellen, wechselt in den Administratormodus, klickt unten in der Werkzeugleiste auf "Verknüpfung" (N:1) oder "Rückverknüpfung" (1:N) und wählt in der erscheinden Übersicht die zu verknüpfende Tabelle aus. In dieser Tabelle wird dann automatisch auch die entsprechende Gegen-Verknüpfung erstellt (1:N oder N:1). Damit sind die Tabellen verknüpft, auf der einen Seite als Tabelle (1:N), auf der anderen als einzeiliges Feld, jeweils mit Plus-Zeichen und Lupe. Weitere Informationen zu Verknüpfungen finden sich im Manual:

    https://ninox.com/de/manual/tabellen-und-beziehungen/strukturieren-von-informationen

     

    Damit sind allerdings noch keine Datensätze der Tabellen miteinander verknüpft. Das kann man entweder manuell machen oder evtl. auch per Script, wozu man aber wissen müsste, anhand welcher Kriterien die Verknüpfung vorgenommen werden soll. Bspw. ein Datenfeld, das in beiden Tabellen den selben Wert hat.

    Für konkretere Hilfestellungen fehlen Informationen über das Datenmodell, den Ablauf und das genaue Ziel.

    • Wolfgang_Bangert
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hab jetzt mal ein Testaufbau generiert:

    https://www.dropbox.com/sh/llwzw4pt31qtrcz/AAA8K3YMZlblIBsMonKAiXRza?dl=0

    Ich kann die Produktteile über das + an der verknüpften Tabelle mit den Druckformen verknüpfen. Kein Problem.

    Ich möchte aber den Datensatz in der Ansicht aufrufen und dann zuordnen.
    Der Hintergrund ist, dass ich hier pro Druckform mehrere Produktionsteile zuordnen muss. Das ist ein reines Komfortproblem, das ich habe. Aber es reizt mich, das herauszufinden...

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

    Wenn man in Tabelle A über das Gestaltungslement "Ansicht" einen Datensatz der angezeigten Tabelle B öffnet, dann kann man dort nicht mehr auf die ID des Datensatzes von Tabelle A zugreifen, aus dem heraus die Ansicht angeklickt wurde. Deshalb funktioniert das mit der Schaltfläche so nicht.

     

    Man könnte theoretisch manuell einen Schalter (Ja-/Nein-Feld) in Tabelle A setzen, bevor man über die Ansicht einen Datensatz in Tabelle B öffnet und dann dort per select auf den Datensatz aus Tabelle A zugreifen, bei dem der Schalter "eingeschaltet" ist (und ihn danach per Skript wieder "ausschalten"). Aber das wäre viel zu kompliziert und auch unzuverlässig.

    Dafür gibt es ja die Verknüpfungen. Und in diesem Fall scheint mir eine N:M-Verknüpfung sinnvoll zu sein. Ich habe deshalb mal die Untertabelle 'Druckformen Bestandteile' von der Haupttabelle gelöst und als Verbindungstabelle mit 'Druckformen' und 'Produktteile' verknüpft. Die Vorgehensweise wäre jetzt wie folgt:

    - Man öffnet einen Datensatz der Tabelle 'Druckformen'.
    - Man klickt auf das Plus der Verknüpfung 'Druckformen Bestandteile'.
    - Dort klickt man auf die Lupe im Verknüpfungsfeld 'Produktteile' und wählt einen Datensatz aus.
    - Dann schließ man das Formular und landet wieder in Druckformen.

    Umgekehrt kann man natürlich genauso über die Tabelle 'Produktteile' gehen und auf die gleiche Weise eine indirekte Verknüpfung zu 'Druckformen' erstellen.

    Die Tabelle 'Druckformen Bestandteile' ist also lediglich eine Hilfstabelle zur Verknüpfung der beiden Haupttabellen, weil eine direkte N:M-Verbindung nicht möglich ist. Man könnte sie deshalb auch gut "verstecken", weil sie ja keine eigene inhaltliche Bedeutung hat. Dann kommt man gar nicht in Versuchung, manuell darin herumzufuhrwerken. 

    Die Ansicht von 'Produktteile' in der Tabelle 'Druckfoprmen' könnte man natürlich zusätzlich drinlassen. Sie hätte aber, wie eingans gesagt, keine funktionale Bedeutung für die Verknüpfungen, sondern nur informativen Charakter. Deshalb habe ich sie entfernt. Die DB liegt hier zum Download:

    https://www.dropbox.com/s/y67dny7wa3zuvar/Druckform_Produktteil.ninox?dl=0

     

    Ich hoffe, es hilft ein wenig weiter.

    • Wolfgang_Bangert
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Copytexter,
    danke für Deine Mühe. 
    Der JA/Nein Schalter war für mich die geniale Idee. So habe ich es auch gemacht.
    Damit nicht aus Versehen zwei "angeschaltet" werden, lösche ich zuerst alle Einträge, bis auf den aktuellen.

    do as server
    let me := this.Nr;
    for i in select Druckformen where Nr != me do
    i.('freigegebene einblenden:' := 0)
    end
    end

    Grüße
    Wolfgang

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

    👍 Ja, wenn das mit dem Ja-/Nein-Feld ('Schalter') für dich die bessere Lösung ist - perfekt. Man könnte das "Ausschalten" übrigens auch so machen (Trigger "Nach Änderung"):

     

    if Schalter then
        let me := this.Nr;
        (select Druckformen where Schalter and Nr != me).(Schalter := false)
    end