0

Referenz von Datensatz auf von einer Tabelle zur anderen

Hallo liebe Ninox-Community,

Ich habe kürzlich angefangen mit Ninox zu arbeiten und wollte zum lernen ein paar Sachen ausprobieren (Hintergrund: in unserer Firma hat der Ninox-Verantwortliche die Aufgabe abgeben und nun soll ich es lernen).

Hierfür wollte ich zb aus einer Tabelle 'Mitarbeiter' die ganzen Namen der Mitarbeiter rausziehen und in einer neuen Tabelle einen LEFT (OUTER) JOIN mit den Abteilungen machen.

Allerdings kriege ich so etwas einfaches wie einfach nur die Mitarbeiternamen rausziehen nicht hin und aus den Online Ressourcen werde ich auch nicht wirklich schlau.

Ich hatte etwas versucht wie 

(select 'Büro').Name

Allerdings kriege ich hier keine Einträge in der neuen Tabelle und wenn ich die Spalte mit der Funktion anzeigen lassen will kommt einfach nichts.

Die Frage wäre jetzt:

1)

Wenn ich eine Tabelle mit einen bestimmten Attribut hab (zb Tabelle 'Büro' mit der Spalte [Name]), wie kann ich dann diese Spalte in eine neue Tabelle übertragen?

Die neue Tabelle ist auch mit der Büro Tabelle verlinkt.

 

2)

Ich hatte die Daten manuell eingefügt um den join mit einer 3. Tabelle (position) zu probieren über 

select 'Position'.Stelle where 'Position'.Name = 'Büro'.Name

aber auch hier kriege ich keine Ausgabe.

Was mache ich falsch?

 

Danke für eure Hilfe

Mit freundlichen Grüßen

Ziyad

6 Antworten

null
    • Josef_Koenig
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Ziyad,
    wenn Du die Mitarbeiterdaten in eine völlig neue Tabelle übertragen (und nicht nur verknüpfen) möchtest, dann würde ich probieren, die Daten in ein Excel-File zu exportieren, dort eventuell nach Deinen Vorstellungen zu überarbeiten und dann in eine neue Tabelle zu importieren. Nur ein Vorschlag, vielleicht funktioniert es aber auch anders.
    Beste Grüße
    Josef

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

    Ahoi, auf die Schnelle: Excel-Transfer ist nicht nötig. Das kann man alles direkt mit Ninox machen. SQL-Know-how hilft dabei aber leider nicht weiter. Zwar gibt es auch bei Ninox einen "select"-Befehl, der hat mit dem von SQL aber nicht viel gemein.

    Einfaches Beispiel: Um in Ninox aus TabelleA das Datenfeld 'Name' in TabelleB zu übernehmen und dabei jeweils einen neuen Datensatz anzulegen, könnte man z. B. einen Button mit folgendem Code nutzen:

    for ii in select TabelleA do
       let newT := create TabelleB;
       newT.(Name := ii.Name)
    end
    

    Wie gesagt: Erst mal nur ein einfaches Beispiel auf die Schnelle ... 
     

      • Ziyad_Nuwayhid
      • vor 2 Jahren
      • Gemeldet - anzeigen

      planox. pro 

      Danke für die schnelle Antwort. Schade, dass einem SQL nichts bringt, 2 Semester in der Uni nur damit ich es auf Arbeit nicht nutzen kann :D

      Und gleich auch vielen Dank für den Code Schnipsel, er macht erstmal genau das, was ich wollte :)

      Frage dazu: Erfolgt das automatisierte befüllen von Daten in Ninox in der Regel über Buttons oder ist das eher ein work-around?

      Und wissen Sie, wie ich den LEFT OUTER JOIN in Ninox realisieren kann? Also die Verbindung 2er Tabellen anhand eines Attributes (so wie im Bild Anhang).

      Mit freundlichen Grüßen

      Ziyad

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

      Ziyad Nuwayhid 

      Meine bestenfalls rudimentären SQL-Kenntnisse sind weitgehend verschüttet, aber ich vermute, das Beispiel zeigt die Zusammenführung von Daten zweier Tabellen anhand eines gemeinsamen Schlüsselfeldes in einer temporären Ergebnistabelle.

      Das funktioniert in Ninox so nicht. Der einzige Schlüssel, über den sich Verknüpfungen herstellen lassen, ist die intern automatisch vergebene, eindeutige und nicht änderbare Datensatz-ID, bestehend aus einer Buchstaben-Kennung für die Tabelle sowie der Datensatz-Nummer.

      Es lassen sich in Ninox auch keine Tabellen oder Felder scriptgesteuert erstellen. Um Daten aus verschiedenen Tabellen (A, B) zusammenzuführen, muss die Ergebnis-Tabelle (C) mit den benötigten Feldern bereits vorhanden sein. Unter dieser Prämisse könnte man das oben dargestellte Ergebnis mit einem Script erreichen:

      for xy in select TabelleA do
         let myB := first(select TabelleB[DEPTNO = xy.DEPTNO]);
         let newC := create TabelleC;
         newC.(
          PROJNO := xy.PROJNO;
          PROJNAME := xy.PROJNAME;
          DEPTNO := xy.DEPTNO;
          DEPTNAME := if myB != null then myB.DEPTNAME else null end;
          );
      end
      

      Solche Szenarien können natürlich vorkommen, insbesondere wenn Daten importiert oder bisher parallel gepflegt wurden und nun zusammengeführt werden sollen. Grundsätzlich würde man aber in Ninox von vornherein anders vorgehen, TabelleA mit TabelleB verknüpfen und jeden neuen Datensatz sachlich dem passenden der anderen Tabelle zuordnen. Sind bereits Datensätze vorhanden, aber nicht verknüpft, lässt sich das in der beschriebenen Konstellation mit einem Script auch nachträglich machen:

      for xy in select TabelleA do
         let myB := first(select TabelleB[DEPTNO = xy.DEPTNO]);
         xy.DEPTNO := if myB != null then myB else 0 end;
      end
      

      Das Feld DEPTNO würde in TabelleA dann nicht mehr benötigt, über die ID-basierte Verknüpfung hätte man Zugriff auf sämtliche Daten des verknüpften Datensatzes aus TabelleB und könnte sie in einer Ansicht auch so darstellen lassen wie in dem SQL-Beispiel oben.

      Ob das nun einfacher oder komplizierter ist als bei SQL sei mal dahingestellt (die einen sagen so, die anderen so). Es ist auf jeden Fall anders. Man muss sich deshalb vom SQL- (und übrigens auch Excel-) Denken lösen. 

      Vielleicht hilft das für den Einstieg ein bisschen weiter. Schönes Wochenende!

      • Ziyad_Nuwayhid
      • vor 2 Jahren
      • Gemeldet - anzeigen

       planox. pro  

      Vielen Dank für die ausführliche Antwort.

      Ich bin einfach blind davon ausgegangen, dass Ninox ähnlich wie SQL arbeitet da es auch den select Befehl gibt, aber da habe ich mich wohl massiv getäuscht. Da muss ich auch meine Denkweise anpassen, wie ich gewisse Probleme im Ninox löse. 

      Aber Sie nehmen mir hier gleich viel Ärger weg, da ich ansonsten noch Stunden frustriert mit SQL Syntax gearbeitet hätte nur um mich zu wundern, warum nichts funktioniert. Ich werde mal gucken, wie weit ich mit Ihren Skript Beispielen komme, dass erste hatte ja schon wunderbar funktioniert :)

      Danke für die Mühe und einen guten Start in die Woche!

      LG Ziyad

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

      Ziyad Nuwayhid Gerne weitere Fragen stellen. Nur nach Möglichkeit nicht mit Bezug zu SQL, sondern einer Beschreibung der beteiligten Ninox-Tabellen und -Datenfelder sowie der genauen Zielstellung. Dann wird hier in der Regel recht zügig geholfen. Und wenn man einmal "umgedacht" hat, kommt man mit Ninox oft sogar schneller zu Ergebnissen.

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 6Antworten
  • 114Ansichten
  • 4 Folge bereits