0

Bertram

Ich habe folgendes Problem und hoffe auf eine Lösung:

1) In einer Datenbank sind zwei verknüpfte Tabellen: DATA und PROBE

2) DATA enthält zwei Felder: LABID, SIZE

Im Feld SIZE sind unterschiedliche Messwerte zu jeweils einer LABID gelistet, z.b.

LABID   SIZE

12         5

12         3

12        8

23         12

23         10

23        59

 

3) In der Tabelle PROBE gibt es ein Feld: UNUMMER

 

Folgende Operation soll nun mittels "Button" durchgeführt werden:

1) im Feld UNUMMER wird der Wert einer LABID der Tabelle DATA eingegeben, z.b. 12

2) es sollen nun alle Daten (= SIZE)  aus der Tabelle DATA die zu der entsprechenden UNUMMER (= LABID) gehören in Tabelle PROBE importiert werden

 

Vielen Dank!

8 Antworten

null
    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hi bbrenig. 3 Tips, aber ganz schlaub bin ich aus allem nicht geworden. Gruß Mirko

    1. Wenn Du die Verknüpfung wirklich nutzt, also für jede UNUMMER die Datensätze der Tabelle DATA für SIZE 12, 10 und 59, wird im Verknüpfungsfeld alles angezeigt was Du möchtest. 

    2. Wenn Du neben der UNUMMER angezeigt haben möchtest, welche SIZE dazugehört, dann hilft vielleicht ein f(x)-Feld mit dem Code (geht auch ohne Verknüpfung) und bei jeder UNUMMER werden die dazugehörigen SIZE-Daten angezeigt.

    *

    let Q := UNUMMER;
    (select DATA)[LABID = Q].SIZE

    *

    3. Wenn Du sie aber doch importiert haben möchtest, dann benötigst Du noch ein Datenfeld für den Import  der SIZE Daten ( z.B. USIZE) und dann ist es ja wie eine Kopie und der Button gehört in die Tabelle DATA und du exportierst jeweils eine LABID-Nr mit dazugehörigen SIZE Daten.

    *

    let Q := LABID;
    for i in (select DATA)[LABID = Q] do
    let P := (create PROBE);
    P.(
    USIZE := i.SIZE;
    UNUMMER := Q
    )
    end

    *

    • bbrenig
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Mirko, herzlichen Dank für die Tips. Tip No. 3 exportiert zwar die Daten, aber das Ergebnis entspricht leider nicht dem was ich eigentlich benötige.

    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Vielleicht schreibst Du ja noch, wie genau denn Dein Ergebnis aussehen soll, denn bisher ist nur bekannt, daß Deine Tabelle PROBE ein Feld UNUMMER hat. Wohin sollen denn die Daten "importiert" werden?

    • bbrenig
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Mirko,

    die Tabelle PROBE ist mit DATA verknüpft (1:N). In PROBE sind mehrere UNUMMER gelistet. Es sollen nach Eingabe einer UNUMMER in der Tabelle PROBE, die in der Tabelle DATA als LABID geführt wird, die entsprechenden Werte die im Feld SIZE zu dieser UNUMMER (= LABID) gelistet sind, in der Tabelle PROBE überführt werden. Der Button in der Tabelle PROBE sollte also eine Operation durchführen, die ungefähr diesen Ablauf haben müsste:

    1) Finde die UNUMMER in Tabelle PROBE im Feld LABID der Tabelle DATA

    2) Füge alle Datensätze aus DATA (LABID, SIZE) zu dieser UNUMMER (= LABID) in das verknüpfte Datenfeld in Tabelle PROBE hinzu.

    Vielen Dank,

    Bertram

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

    Hallo, der Begriff "exportieren" irritiert ein bisschen. Wenn am Beispiel obiger Daten als Ergebnis die Tabelle PROBE zwei Datensätze enthalten soll (UNUMMER 12 und 23), welche mit den jeweils betreffenden Datensätzen der Tabelle DATA verknüpft sein sollen, dann würde ich es so versuchen:

     

    for i in select DATA do
       let myP := first(select PROBE where UNUMMER = i.LABID);
       if myP = null then
          let newP := (create PROBE);
          newP.(UNUMMER := i.LABID);
          i.(PROBE := newP)
       else
          myP.(UNUMMER := i.LABID);
          i.(PROBE := myP)
       end
    end

     

    Das Ganze setzt natürlich eine bestehende N:1-Verknüpfung zwischen DATA (N) und PROBE (1) voraus.

    • bbrenig
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Der Copytexter,

    herzlichen Dank. Diese Operation liefert schon fast das gewünschte Ergebnis. Es werden jetzt aber beide Daten Sätze aus DATA gleichzeitig in PROBE übernommen, sobald ich z.b. 12 in UNUMMER eintrage. Es sollte aber bei der Eingabe einer Zahl in UNUMMER in PROBE nur der Datensatz aus DATA auftauchen, der dieser Zahl entspricht also nur der Datensatz z.b. für die UNUMMER 12.

    Gibt es dafür noch eine Lösung?

    Vielen Dank, Bertram

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

    Hallo Bertram, ich dachte, du wolltest einmalig alle Daten aus DATA anhand der Felder LABID/UNUMMER mit PROBE verknüpfen. Da lag ich offenbar falsch. Allerdings weiß ich nicht, was du statt dessen erreichen willst.

     

    Was heißt "bei der Eingabe einer Zahl in UNUMMER in PROBE"? Dass du das, was in meinem Skript automatisch für alle Datensätze gemacht wird, einzeln für bestimmte Datensätze machen willst? Also manuell einen neuen Datensatz in PROBE erzeugen, bei UNUMMER einen Wert eingeben (z. B. 12) und dann automatisch mit den entsprechenden Datensätzen aus DATA verknüpfen?

     

    Dann würde ich einen Trigger "Nach Änderung" im Feld UNUMMER mit folgendem Code erstellen:

     

    let me := this;
    let myDATA := (select DATA where LABID = me.UNUMMER);
    if cnt(myDATA) > 0 then
       for i in myDATA do
          i.(PROBE := me)
       end
    else
       me.(UNUMMER := null)
    end

     

    Mich irritiert allerdings der Singular bei "sollte [...] nur DER Datensatz aus DATA auftauchen, der dieser Zahl entspricht". Denn es sind ja mehrere Datensätze (im Beispiel 3), die dieser Zahl (z. B. 12) entsprechen. Deshalb die "for"-Schleife.

     

    Sollte das Ergebnis also immer noch nicht deinen Vorstellungen entsprechen, dann müsstest du, wie MZ schon sagte, dein Anliegen wirklich noch mal genauer beschreiben. Insbesondere den Zweck und das gewünschte Ergebnis. Sonst verliert man sich in Spekulationen.

    • bbrenig
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Der Copytexter, jetzt passt die Operation. Danke!

    Gruß, Bertram