none
Datenstruktur für Abfrage erstellen

    Frage

  • Hallo zusammen

    Die Frage betrifft mehr die Datenstruktur als Access als solches. Aber hier die Vorgaben:

    Ich habe eine Tabelle, in welcher u.a. Usernamen und die Teamzugehörigkeit drin stehen. Das Team ist fix dem User in Volltext zugeordnet (nicht in einer seperaten Tabelle). Da die Daten von extern kommen, kann ich hier keine Änderungen vornehmen.
    Dazu eine zweite Tabelle als Aufgabenliste.

    Jetzt soll ich für unsere kleine Abteilung (bestehend aus 5 Teams) ein Dropdown erstellen für die Aufgabenliste. Für jede Aufgabe ist genau 1 Person als Lead vorhanden. Da sich die Namen der 5 Teams sich nie ändern und auch keine neuen Teams hinzukommen resp. verschwinden, kann ich sie auch manuell in einer Abfrage definieren. In der Aufgabenliste kann ich PK der Usertab als FK verknüpfen. Soweit alles kein Problem.

    Jetzt ist aber die Anforderung, dass in der Dropdownliste der Eintrag 'Alle von Team x' oder 'Alle von Team y' ausgewählt werden können. d.h. es muss möglich sein, eine einzelne Person oder der Eintrag 'Alle von Team ...' auszuwählen. Und hier weiss ich nicht, wie ich das im ERM machen muss. Kann mir jemand helfen?


    Danke und Gruss Thomas
    Mittwoch, 7. Dezember 2011 09:33

Antworten

  • Ich würde es im Grunde genauso machen. Allerdings - statt des Wechsels des RowSourceTypes - würde ich eine UNION-Abfrage in der Datenquelle der Kombobox nutzen, z.B.:

    SELECT ID, [Nachname] & (", " + [Vorname]) AS FullName FROM <deinerTabelle>
    UNION 
    SELECT 1001, "Alle aus Team 1" FROM <deinerTabelle>
    UNION 
    SELECT 1002, "Alle aus Team 2" FROM <deinerTabelle> ;
    


    Donnerstag, 8. Dezember 2011 12:52
    Moderator

Alle Antworten

  • Hallo,

    ist deine Frage wie du die DropDown-Liste erstellen kannst oder wie du auf die Auswahl "Alle vom TeamX" reagieren kannst?

    Zum ersteren würde ich per VBA die Werteliste erzeugen lassen, und dabei zuerst den Text eintragen lassen. Um Fehler zu vermeiden unbedingt in die Liste der UserID zuerst eintragen und danach den Usernamen. Beim Eintrag "Alle" würde ich z.B. als eine ID jenseits der MitgliederID eintragen.

    Das machst du am beisten im Ereignis "Beim Laden" des Formulars:

    Me!Kombinationsfeld1.RowSourceType = "Wertliste"

    Me!Kombinationsfeld1.RowSource = "1001;alle im Team1;1002;alle im Team2;1003;alle im Team3;"

    Schleife über alle User, Schleifeninhalt: Me!Kombinationsfeld1.RowSource = Me!Kombinationsfeld1.RowSource & UserID & ";" & UserName & ";"

    Die Schleife könnte z.B. innerhalb eines Recordsets ablaufen, aus diesem du dann die UserWerte bekommst.

    Im "After Update"-Ereignis kannst du dann auswerten und anhand der ID entscheiden ob ein Team oder ein User angeklickt wurde. Dementsprechend kannst du dann eine Abfrage zusammenstellen die die Teammitglieder anzeigt.


    Anbei mal ein Codebeispiel, getestet unter Access 2003.

    Gruß Andreas

     

    Private Sub Form_Load()
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
       
        Me.Kombi1.RowSourceType = "Value List"
        Me.Kombi1.ColumnCount = 2
        Me.Kombi1.BoundColumn = 1
        Me.Kombi1.ColumnWidths = "0cm;4cm"
        Me.Kombi1.RowSource = "1001;Alle aus Team 1;1002;Alle aus Team 2;1003;Alle aus Team 3;1004;Alle aus Team 4;"

        Set db = CurrentDb
        Set rs = db.OpenRecordset("Tabelle1")
        Do Until rs.EOF
            Me.Kombi1.RowSource = Me.Kombi1.RowSource & rs!ID & ";" & rs!Vorname & " " & rs!Nachname & ";"
            rs.MoveNext
        Loop
    End Sub


    http://www.AccessBlog.de
    Mittwoch, 7. Dezember 2011 13:30
  • Hallo,

    hier noch ein Beispiel wie du das auswerten kannst.

    Das Beispiel zeigt wie man ein weiteres Listenfeld mit den "gefilterten" Daten befüllt. die Unterscheidung ob Gruppe oder Mitglied mache ich anhand des ID-Feldes. Größer 1000 sind im Beispiel Teams:

    Private Sub Kombi1_AfterUpdate()
        If Me.Kombi1 > 1000 Then
            Me.Liste1.RowSource = "Select ID, Vorname, Nachname, Gruppe From Tabelle1 Where Gruppe = " & Trim(Me.Kombi1 - 1000) & " ORDER BY Nachname"
        Else
            Me.Liste1.RowSource = "Select ID, Vorname, Nachname, Gruppe From Tabelle1 Where ID = " & Me.Kombi1 & " ORDER BY Nachname"
        End If
    End Sub

     

    Gruß Andreas


    http://www.AccessBlog.de
    Mittwoch, 7. Dezember 2011 14:28
  • Ich würde es im Grunde genauso machen. Allerdings - statt des Wechsels des RowSourceTypes - würde ich eine UNION-Abfrage in der Datenquelle der Kombobox nutzen, z.B.:

    SELECT ID, [Nachname] & (", " + [Vorname]) AS FullName FROM <deinerTabelle>
    UNION 
    SELECT 1001, "Alle aus Team 1" FROM <deinerTabelle>
    UNION 
    SELECT 1002, "Alle aus Team 2" FROM <deinerTabelle> ;
    


    Donnerstag, 8. Dezember 2011 12:52
    Moderator