0

Tabellen Einschränkung mit "unique" Hilfe

Hallo,

unique(b.PROJEKTE.'Projekt-Nr') and b.Personal = a.'Rechnungs Eingang'.Kontak and b.Status < 6

das habe ich bei meiner Einschränkung in der auswahl der verknüpften Tabelle stehn... leider werden dennoch die Einträge mehrfach angezeigt.

Woran kann das liegen?

5 Antworten

null
    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Micha,

    eine Einschränkung sollte entweder true oder false als Ergebniss haben.

    unique(b.PROJEKTE.'Projekt-Nr') ergibt aber einen Array.

    Leo

    • Micha
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

    das stimmt (hab es jetzt auch nochmal nachgelesen.

    wie bekommt ich es dennoch hin in einer Auswahl nur jeweils einen Datensatz des jeweiligen Projekte anzeigen zu lassen?

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Halo Micha, dafür fehlen mir die Informationen, wie die Datenbank aufgebaut ist und was genau die Tabellen a und b sind. Ich habe hier schon mal etwas ähnliches gepostet 

    https://ninoxdb.de/de/forum/anwendungsbeispiele-5abd0bb14da2d77b6ebfa396/auswahlfeld-automatisch-werte-einfugen-5de67c36b299a354b4d158b5?post=5de68d99e2f9823d52881bb6&page=1

    Vielleicht hilft es weiter?

    Leo

    • Micha
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

    dies mal bin ich nicht weiter gekommen mit der ähnlichen Anleitung. Ich versuche es etwas deutlicher zu erklären.

     

    In der Tabelle der Auswahl (s.o.) sollen die eintröge zu meiner Person und PROJEKT je nur  ein mal erscheien.

     

    im obigen Beispiel nur einmal die zeile 2 oder 3 . Also auch wenn eine Person öfters in einem Projekt vorkommt nur einmalig zur auswahl stehen.

     

    ich denke das sind die wichtigen Felder der Tabellen.

    Wenn es nur ein neuen ansatz gäbe wäre ich ja schon Happy

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Micha,

    mir ist nicht klar warum du hier die Verknüpfung zu P_Detail machst und nicht zu Projekte. Aber wenn es unbedingt nötig ist, würde ich so vorgehen:

    ...

    let myKontakt := a.'Rechnungs Eingang'.Kontak;
    let mySearch := format(b.number(Nr), "000000");
    let myArr := unique(for i in select P_Detail do
    if cnt((select P_Detail)[ Personal = myKontakt and Status < 6 and Projekte = i.Projekte]) = 1 then
    format(i.number(Nr), "000000")
    else
    first((select P_Detail)[Personal = myKontakt and Status < 6 and Projekte = i.Projekte]).format(number(Nr), "000000")
    end
    end);
    contains(concat(myArr), mySearch);

    ...

    Ich versuche es zu erklären:

    zuerst deklariere ich die Variable myKontakt aus deiner Tabelle "a" (Übrigens, die Tabelle "Kontak" sollte bestimmt Kontakt oder Konakte heißen);

    dann bilde ich eine Schleife aus Datensätzen P_Detail und prüfe dort ob deine Bedingung war ist und wenn in P_detail nur ein Datensatz mit der Bedingung existiert, schreibe ich mit format(number(Nr), "000000") ein sechsstelligen string in den Array (bei Nr 34 wird dann "000034"). Wenn es mehreren Solche Datensätze gibt, schreibe ich den Ersten darein.

    So habe ich ein Array aus sechstellig preparierten IDs. Mit unique am Anfang bereinige ich mein Array. 

    Letzte Zeile ist die eigentliche Einschränkung: hir prüfe ich ob mySearch (am Anfang definiert) in der Auflistung von Texten aus myArray vorkommt.

    Ich hoffe, ich habe nichts vergessen.

     

    Leo

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 5Antworten
  • 2190Ansichten