0

Mittels Werten einer Tabelle (teils unbestimmt) eine andere Tabelle füllen

Hallo,

ich beschäftige mich nun einige Stunden mit Ninox und finde, dass man ganz gut zurecht kommen kann. Allerdings komme ich mit einer Fragestellung nicht wirklich weiter und muss an dieser Stelle einmal um Hilfe bitten.

Ich habe eine Tabelle, diese führt Berufe mit der zugehörigen KldB (eine Art ID mit 5 Stellen) auf. Eine weitere Tabelle gibt mir die dazugehörigen Preise an (BDKS) - allerdings sind hier idR nicht alle 5 Stellen belegt.

Tabelle 1

Nr. - Berufsbezeichnung - KldB

1 - Anhängerbauer/in - 22382

 

Tabell 2

Nr. - KldB - Preis

2 - 12**2 - 6,58

3 - 22**1 - 5,90

4 - 22**2 - 5,90

5 - 232*2 - 7,83

...

Nun soll in einer weiteren Tabelle, oder in Tabelle 1 in weiteren Spalte der passende Preis eingetragen werden. 

Via SQL wurde einfach mit Platzhaltern die Tabelle durchsucht und wenn es passte, der Wert eingetragen - hier stoße ich im Moment an meine Grenzen, da ich nicht mal finde, wie Ninox die Nutzung von Platzhaltern z.B. in der Suche ermöglicht - * und $ scheint es nicht sein.

Also eigentlich habe ich zwei Fragen - wie nutze ich Platzhalter (im Bsp. oben *) und wie kann ich zwei Tabellen so verknüpfen, dass die Suche faktisch automatisiert läuft und der passende Wert eingetragen wird?

Was ich bereits geschafft habe, zwei Tabellen so zu verknüpfen, dass ich bei einer Suche über mehrere Felder in einer Hilfstabelle die Daten verschiedener Felder in den Datensatz bekomme.

Dank und Gruß

Björn

4 Antworten

null
    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Björn,

    soweit ich weiß, gibt es bei Ninox keine Platzhalterfunktionen. Mann kann als Workaround ein Funktionsfeld in der Tabelle 1 einbauen:

    ...

    let myID := KIdB;
    let myIDARR := split(KIdB, "");
    let myArr := (select Tabelle2);
    for i in range(5) do
    myArr := myArr[item(split(KIdB, ""), i) = item(split(myID, ""), i) or item(split(KIdB, ""), i) = "*"]
    end;
    first(myArr).Preis

    ---

    so vergleicht Ninox in einer fünfer Schleife die jeweiligen Stellen der IDs und grenzt jedesmal die Anzahl der passenden Datensätze ein. Am End nimmt Ninox aus der Rest noch den ersten Datensatz (auch wenn es nur einer Bleibt, weiß Ninox davon erstmal nicht) und nimmt davon den Preis.

     

    Leo

    • Bjorn_Burk
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Herzlichen Dank für den Input - ich merke, das ist schon etwas ganz anderes als z.B. SQL ...

    Leider stoße ich auf einen Fehler in der zweiten Zeile - die Funktion split seit nicht definiert. Aber im Moment komme ich hier nicht weiter.

     

    Vielen Dank für die Mühe!

    Björn

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Björn,

    dann ist dein KIdB-Feld in der Tabelle1 - ein Zahlenfeld. split() braucht aber einen Text. Die Formel wäre dann:

    ...

    let myID := text(KIdB);
    let myIDARR := split(myID, "");
    let myArr := (select Tabelle2);
    for i in range(5) do
    myArr := myArr[item(split(KIdB, ""), i) = item(myIDARR, i) or item(split(KIdB, ""), i) = "*"]
    end;
    first(myArr).Preis

    ...

    Und du musst natürlich aufpassen, dass deine Tabellennamen mit den Namen in der Formel übereinstimmen, sonst kriegst du die nächste Meldung "Tabelle nicht gefunden"

     

    Leo

    • Bjorn_Burk
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Moin Leo,

     

    ja, richtig, das Feld ist ein Zahlenfeld. Vielen Dank, es scheint zu funktionieren - ich teste mal weiter!

    Ich brauche um zu lernen immer ein reales Szenario.

    Aber dennoch finde ich es sehr schade, dass nicht mit Platzhaltern gearbeitet werden kann - dies ist bei umfassenden Datensätzen auch sehr hilfreich bei einer schnellen Suche - evtl. wäre dies noch ein kleines Update wert ;-)

     

    Vielen Dank und viele Grüße

    Björn

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 4Antworten
  • 1735Ansichten