typisiertes Getchildrow filtern

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Schoofi.

    typisiertes Getchildrow filtern

    Ich habe eine Tabelle Nutzer der über die ID_Apl in der Tabelle Rufnr Telefonnummern zugeordnet sind.

    In der Tabelle Rufnummer sind Telefon und Faxnummern enthalten.
    Nun würde ich mir gern mittels

    VB.NET-Quellcode

    1. ​dtrowNutzer.Gettbl_RufnrRows
    die Telefonnummer des Nutzers zurückgeben lassen.
    Besteht die Möglichkeit die Childrows entsprechend zu filtern ?

    VB.NET-Quellcode

    1. ​dtrowNutzer.Gettbl_RufnrRows("Netz='Tel'")


    funktioniert ja leider nicht, da gettbl_RufnrTel eine Funktion erwartet, aber wie müßte diese aussehen ?
    Zur Zeit habe ich es so gelöst.

    VB.NET-Quellcode

    1. For Each dtrowRufnr As dsRechnerliste_be.tbl_RufnrRow In dtrowNutzer.Gettbl_RufnrRows
    2. If dtrowRufnr.Netz = "Tel" Then
    3. return dtrowRufnr.Rufnr
    4. End If
    5. Next


    Ich denke aber das es bestimmt auch einfacher geht.

    Schoofi schrieb:

    da er sonst einen Syntaxfehler bringt.
    Das ist nur ein Ansatz, wie du die Where-Erweiterung anwenden könntest...
    Ich kenne ja dein Datenmodel nicht - ich sehe nur, dass du Netz verwendest - Was das genau ist, weis ich nicht...
    Was für einen Datentyp hat bei dir Netz ?
    Die InteliSence hilft dir beim Schreiben doch da weiter...
    Dann hast Du wohl Option Infer nicht an, sonst würde der Compiler selber ermitteln können, was rw für ein Typ ist. Ansonsten machst Du eben ein Dim rw as dsRechnerliste_be.tbl_RufnrRow draus. Und das mit Anführungszeichen: RodFromGermany (und bestimmt auch einige andere) nennen das eine C&P-Bremse. Kleine Fehler, die sich manchmal eben einschleichen oder eingebaut wurden, damit der Nutzer es nicht nur rauskopiert, sondern sich auch Gedanken über den zur Verfügung gestellten Code macht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Netz ist ein Feld String und bezieht seine Daten aus der übergeordneten Tabelle tbl_Z_Netz mit folgender Expression Parent(tbl_Z_Netztbl_Rufnr).Netz

    Oder darf ich bei der Funktion nur Daten verwenden, die unmittelbar in der Tabelle stehen ?
    Die Idee ​Dim rw as dsRechnerliste_be.tbl_RufnrRow rw so zu deklarieren hatte ich auch. Auch in 2 getrennten Zeilen um auch auf nothing abzuprüfen. Er meinte trotzdem das rw nicht deklariert ist.
    Die Anführungszeichen hatte ich auch gesetzt. Erst nachdem mir die Ideen ausgegangen sind, habe ich nochmal gepostet,

    Schoofi schrieb:

    Netz ist ein Feld String und bezieht seine Daten aus der übergeordneten Tabelle tbl_Z_Netz
    Du suchst also alle Rows aus der Kindtabelle, wo in der Elterntabelle im Feld Netz etwas besonderes steht - das ist doch Blödsinn?
    Vlt. verstehe ich dein Vorhaben nicht richtig - zeig einmal dein Datenmodel her...
    Anbei der relevante Auszug des Datenmodells

    Kurze Erklärung : jeder MA und jedes technische Gerät ist einem Arbeitsplatz zugeordnet. Es gibt sind aber auch direkte Beziehungen über die ID_Apl z.B. zwischen Nutzer und Rufnr gesetzt.
    In der Stammdatentabelle Tabelle Z_Netz werden die Netze z.B. Rechner, Fax, Tel aufgelistet.
    Ich wollte wegen der Lesbarkeit möglichst auf den Klartext "Tel" abprüfen und nicht über die ID (wenn es nicht anders geht, muß ich das halt per Enum über die ID_Netz machen), deshalb ist das Expressionfeld Netz in der Tabelle Rufnr enthalten.
    Bilder
    • Datenmodell_Rechnerliste_Auszug.jpg

      247,63 kB, 1.508×605, 73 mal angesehen
    Jo - und wie gesagt:

    VaporiZed schrieb:

    Dann hast Du wohl Option Infer nicht an
    Sollte man anhaben, erleichtert vieles.
    ZB musst du sonst jetzt draufkommen, welchen Datentyp die gezeigte .Where() - ExtensionFunktion wirklich zurückgibt.
    Ich könnte es dir auch vorsagen, aber ich will dich ja für Option Infer On begeistern, was dir solche Mühseligkeiten ersparen würde.

    Also mit Infer On wäre VB1963's Zeile sofort richtig, täte komüilieren, und du könntest den Datentyp sofort nachgucken - wie etwa in diesem Tut gezeigt: Video-Tut: Welchen Datentyp hat das Objekt?