Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

abfrage ob teilgenommen oder nicht





Frage

Hallo, ich speichere Seminartitel und Teilnehmer und kann die Titel und Teilnehmer pro Seminar in einer Liste ausdrucken. Wie erreiche ich es aber, dass ich einen Ausdruck bekomme pro Teilnehmer mit teilgenommenem Seminar und nicht teilgenommenem Seminar. Vielen Dank Gilli

Antwort 1 von Judoberlin

Hallo,
das einfachste dürfte der "Wenn;Dann;sonst-Befehl" sein.
z.B.:
=Wenn(B1="x";A1;0)
Hierbei ist B1 das Feld mit der Markierung für teilgenommen ("X");
A1 ist der Name des Teilnehmers
Somit wird angezeigt, der Name des Teilnehmers, der teilgenommen hat.
OK?
So, und nun immer weiter bearbeiten (und ne Menge tüfteln). Excel hat übrigens eine sehr gute eigene Hilfe für diese Befehle. Einfach mal versuchen.

Gruß
Andreas

Antwort 2 von oliverV

@ Andreas
Deine Antwort ist nicht ganz verkehrt, allerdings für das falsche Programm, deine Antwort bezieht sich auf Excel nicht auf Access.

@ Gilli
Deine Frage ist nicht ganz nachzuvollziehen, du solltest vielleicht genauer die Datenstruktur beschreiben.
Es gibt sicherlich eine tbl_Teilnehmer, eine tbl_Seminare, gibt es auch eine tbl_Seminarteilnehmer in der du die Zuordnung vornimmst ?

Gruß

Oliver

Antwort 3 von Nicolas___

ich gehe mal davon aus das du mindestens diese 3 tabellen hast:


Personen
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int(11)     |      | PRI | 0       |       |
| Name  | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

SZuordnung
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| ZID   | int(11) |      | PRI | 0       |       |
| SID   | int(11) | YES  |     | NULL    |       |
| PID   | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

Seminar
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| ID    | int(11)      |      | PRI | 0       |       |
| Name  | varchar(100) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

dann kannst du das ungefähr so machen um alle seminare Anzuzeigen wo die Person drinnen ist:

SELECT Seminar.Name FROM Personen, SZuordnung, Seminar WHERE Personen.Name=´Musterfrau´ AND ((Personen.ID=SZuordnung.PID)AND(SZuordnung.SID=Seminar.ID))

Antwort 4 von gilli

Vielen Dank erstmal an alle für die Ideen.
Nicolas hat genau das beschrieben, was ich eigentlich hätte machen sollen. Mit der Anzeige der Personen ist es mir auch klar. Wie bekomme ich aber eine Liste von den Personen, die mir pro Person anzeigt an welchen Seminaren teilgenommen wurde und auf der gleichen Liste welche Seminare fehlen?
z.B.

Frau Meier Seminar 1 am xxxxxxx
Seminar 2 am xxxxxxx
Seminar 30 am xxxxxxxx

(fehlende
Seminare) Seminar 3
Seminar 4
Seminar 5
usw
Frau Müller Seminar 2 am xxxxxxx
Seminar 4 am xxxxxxx

(fehlende..) Seminar 1
Seminar3
Seminar 5
usw
Danke von Gilli

Antwort 5 von Nicolas

so also erstmal vorweg: Nicolas___ = Nicolas, hatte nur grade mein Passwort vergessen...

also das von mir oben beschriebene gibt dir ja zumindestschonmal das hier (aus deinem beispiel):

Frau Meier Seminar 1 am xxxxxxx 
Seminar 2 am xxxxxxx 
Seminar 30 am xxxxxxxx

um nun

(fehlende 
Seminare) Seminar 3 
Seminar 4 
Seminar 5 
usw

zu bekommen kannst du ja die das gleiche nochmal hinterher schicken mit ner (teilweisen) Negation der Bedingung.

damit du das nun auch noch für Frau Müller und die anderen bekommst gehst du einfach mit nem loop deine Personen Tabelle durch.

irgendwas in der art do until EOF oder sowas.

Ich könnte mir aber vorstellen das es schönere Möglichkeiten dafür gibt.

Antwort 6 von gilli

Hallo Nicolas, die gute Idee ist ja schon da, aber wie setzt man die Abfrage um? Wie du schon schreibst, vielleicht hat da jemand noch ne tolle Möglichkeit. Evtl. hat ja auch jemand eine andere Idee oder eine Musterdatenbank für eine Seminarverwaltung (klein aber fein) mit der obigen Abfragemöglichkeit. Habe bisher gesucht aber keine DB gefunden. Gibts da evtl. eine kleine Vorlage irgendwo?
Erstmal DANKE. Gruß Gilli

Antwort 7 von hinki27

Hallo gilli,

hast du es schon mal mit einer Kreuztabelle versucht? Falls du Seminare hast, die keinem Teilnehmer zugeordnet sind musst du ebventuell mit "fixierten Spaltenüberschriften" arbeiten.

Antwort 8 von gilli

Hallo hinki27,
wie ist es mit einer Kreuztabelle???
Habe ich evt. 120 o.ä.Spalten für Teilnehmer oder ??100 Spalten o.ä. für Seminare, wenns dann mehr werden wird die Tabelle nicht zu gross. Oder bin ich irgendwie falsch mit meiner Denke? Hilfe...irgendwie weiss ich gar nichts mehr...
Gruss
Gilli

Antwort 9 von gilli

und nun?

Antwort 10 von oliverV

Hallo gilli,

folgender Lösungsvorschlag:

Gegeben:
tblPersonen
IDPersonen (Autowert)
Vorname (Text)
Nachname (Text)

tblSeminar
IDSeminar (Autowert)
Seminarname (Text)

tblSeminarzuordnung
IDSeminarzuordnung (Autowert)
Person (Zahl basierend auf tblPersonen.IDPersonen)
Seminar (Zahl basierend auf tblSeminar.IDSeminar)
Seminardatum (Datum/Uhrzeit)

Die Seminarteilnahme solltest du in einem Formular mittels Kombifelder realisieren.
Soweit zu den Vorgaben.

Nun erstelle folgende Abfragen (du kannst einfach den SQL-String in die SQL-Ansicht der Abfrage kopieren).

qrySeminarteilnahmen
SELECT tblSeminarzuordnung.Person, tblSeminarzuordnung.Seminar, tblSeminarzuordnung.Seminardatum
FROM tblSeminarzuordnung;

qryalle_moeglichen_Seminarteilnahmen
SELECT tblPersonen.IDPersonen, tblSeminar.IDSeminar
FROM tblPersonen, tblSeminar;


qrySeminarteilnahmen_Union
SELECT qrySeminarteilnahmen.Person, qrySeminarteilnahmen.Seminar, "Teilgenommen" AS Teilgenommen, qrySeminarteilnahmen.Seminardatum
FROM qrySeminarteilnahmen
UNION SELECT qryalle_möglichen_Seminarteilnahmen.IDPersonen, qryalle_möglichen_Seminarteilnahmen.IDSeminar, "Nicht Teilgenommen" As Teilgenommen, "" AS Seminardatum
From qryalle_möglichen_Seminarteilnahmen;


Datenherkunft für Bericht
SELECT qrySeminarteilnahmen_Union.Person, qrySeminarteilnahmen_Union.Seminar, Last(qrySeminarteilnahmen_Union.Teilgenommen) AS Teilgenommen, Last(qrySeminarteilnahmen_Union.Seminardatum) AS Seminardatum, tblSeminar.Seminar, tblPersonen.Vorname, tblPersonen.Nachname
FROM tblSeminar INNER JOIN (tblPersonen INNER JOIN qrySeminarteilnahmen_Union ON tblPersonen.IDPersonen = qrySeminarteilnahmen_Union.Person) ON tblSeminar.IDSeminar = qrySeminarteilnahmen_Union.Seminar
GROUP BY qrySeminarteilnahmen_Union.Person, qrySeminarteilnahmen_Union.Seminar, tblSeminar.Seminar, tblPersonen.Vorname, tblPersonen.Nachname;


Die vierte Abfrage dient als Datenherkunft für deinen Bericht, die gewünschte Sortierung kannst du dann im Bericht vornehmen.

Ich habe es nur in einer kleinen Testumgebung erstellt, bei größeren Datenmengen könnte das Aufrufen des Berichts "länger" dauern.

Und nun ?

Gruß

Oliver

Antwort 11 von gilli

"Und nun?"
Danke OliverV.
Nun ist die Leuchte an!!!
Ob du so lieb sein würdest und deine Testumgebung als Beispiel im Forum zur Verfügung stellst? Geht sowas überhaupt?
Es wäre für mich eine grosse Hilfe und für viele andere bestimmt auch.
Erstmal herzlichsten Dank und ein schönes Wochenende.
Gilli

Antwort 12 von oliverV

Hallo Gilli,

ein Upload gibt es hier um Forum leider nicht, was natürlich auch verständlich ist, denn der Server wäre nach kurzer Zeit schon "zugemüllt".

Speziell diese Beispiel lässt sich aber einfach nachbauen, indem man die 3 Tabellen anlegt (man muss halt nur die entsprechenden Feldnamen verwenden) und dann einfach den SQL-String in seine Abfragefenster kopiert.

Ich kann dir aber die DB mailen, wenn du das möchtest (benötige halt nur deine E-Mail und deine Access-Version).

Bin noch bis ca. 14 Uhr erreichbar, dann erst wieder am Montag.

Gruß + schönes WE

Oliver

Antwort 13 von gilli

Hallo OliverV,
habe alles so angelegt wie du beschrieben hast.
Bevor ich dich oder andere weiter nötige, möchte ich mir erstmal selbst noch ein paar Gedanken machen. Ist sonst zu einfach :-)
Trotzdem noch eine Frage:
Kann ich mit einem Formular eine bestimmte Person mit Namen auswählen aus:
- qrySeminarteilnahmen_Union
- Datenherkunft für Bericht
Erstmal herzlichen Dank
Gruss Gilli

Antwort 14 von oliverV

Hallo Gilli,

du möchtest wahrscheinlich einen Bericht für nur eine Person haben und nicht für alle; das ist möglich.

Erstelle ein Auswahlformular z.B. "frm_AuswahlSeminarteilnehmer"; erstelle in dem Formular ein ungebundenes Kombifeld "Auswahl_Seminarteilnehmer".
Beachte, das die gebundene Spalte der [IDPersonen] der tblPersonen entspricht.

Um z.B. die Datenherkunft für den Bericht einzuschränken kannst du einfach einen Formularbezug als Kriterium im Feld [Personen] eintragen (in der Datenherkunft des Berichtes).

[Formulare]![frm_AuswahlSeminarteilnehmer]![Auswahl_Seminarteilnehmer]
[/Code]

Etwas eleganter ist die Übergabe des einschränkenden Kriteriums mit einer Schaltfläche, die den Bericht aus dem Formular heraus öffnet.
(Verwendet die Datenherkunft des Berichts ohne Kriterium)
Erstelle dazu im Formular eine Schaltfläche mit dem Assistenten, die dir den Bericht in der Vorschau öffnet; erweitere der VBA-Code sinngemäß wie folgt:

Private Sub Befehl4_Click()
On Error GoTo Err_Befehl4_Click

    Dim stDocName As String
    Dim stBedingung As String

    stDocName = "RepSeminarteilnahmen"
    
    If Not IsNull(Me.Auswahl_Seminarteilnehmer) Then
    stBedingung = "Person=" & Me.Auswahl_Seminarteilnehmer
    End If
    DoCmd.OpenReport stDocName, acPreview, , stBedingung

Exit_Befehl4_Click:
    Exit Sub

Err_Befehl4_Click:
    MsgBox Err.Description
    Resume Exit_Befehl4_Click
    
End Sub


Eine ähnliche Vorgehensweise wäre die Kombination Auswahlformular/Auswertungsformular (anstatt eines Bericht); alternativ könntest du ein Hauptformular/Unterformular nutzen, bei dem du einen Filter setzt.
Eine andere Vorgehensweise wäre es die Datenherkunft des Auswertungsformulars (-Berichts) bei VBA zu ändern.

Die Möglichkeiten sind sehr vielseitig.

Gruß

Oliver

Antwort 15 von gilli

Hallo Oliver!
Erstmal allerherzlichsten Dank für deine Mühe.
Jetzt brauche ich wohl erstmal einen Haufen Zeit um deine Vorschläge "zu verdauen".
Werde mich sicher demnächst noch mal melden.
Bis dahin alles Gute.
Gruss Gilli.

Antwort 16 von gilli

Hallo OliverV. ,
lebst du noch?
Ich habe jetzt lange genug getüftelt und stelle immer wieder fest, daß ich noch viiieel zu wenig mit Access umgehen kann.
Habe jetzt mal eine DB gebastelt, komme aber immer noch nicht so recht weiter. Es fehlt einfach das Hirn. Könnte ich dir mal meine DB mailen und du lachst dich dann erstmal Schrott?
Gruß
Gilli

Antwort 17 von oliverV

Hallo Gilli,

leben ja; das Lachen ist mir allerdings zur Zeit vergangen, schick mir mal deine DB vielleicht kann mich das ja aufheitern.
Nein ernsthaft die DB kannst du ruhig mailen, ich schau dann mal rein.
Ich nutze Access 2000, bitte die DB komprimieren und wenn sie relativ groß ist mit WinZip zusätzlich packen.

Meine E-Mail-Adresse: ovogelei und ich bin bei web.de
(In der Form, wegen Spam)

Gruß

Oliver

Antwort 18 von gilli

Hallo Oliver,
vielen Dank, die Mail ist unterwegs.
Gruß
Gilli

Antwort 19 von gilli

Hallo Oliver,
kannst du was anfangen mit der DB?
Gruß
Gilli

Antwort 20 von oliverV

Hallo Gilli,

ich habe mal kurz reingeschaut, komme aber erst am Wochenende richtig dazu.
Es wäre allerdings ganz sinnvoll gewesen, wenn du ein paar Zeilen Beschreibung mitgeschickt hättest.

Bis dann

Oliver

Antwort 21 von gilli

Hallo Oliver,
ich schicke noch etwas!
Gruß Gilli

Antwort 22 von gilli

Hallo Oliver,
erstmal recht herzlichen Dank für deine Mühe.
Habe mir schon alles angeschaut.
Du hast mit deinen Hinweisen am Anfang völlig recht, aber so etwas muß man wohl am Access-Anfang erstmal fabrizieren. Die Links habe ich mir auch schon angeschaut. Werde in Kürze ein bischen mehr nachlesen.
Ich habe aber trotzdem noch eine Bitte an Dich.
Wenn ich deinen repEinweisungsübersicht anschaue, bezieht sich der Report auf alle Teilnehmer und alle Geräte.
Wie mache ich es aber mit deiner Abfrage, daß ich nur Geräte, die laut Gerätetabelle (Häckchen HHW) z.b. für die Gruppe HHW eingewiesen werden sollen, z.b. Steiner Manfred / Peter Meier(gehören zu HHW), angezeigt bekomme.
Sie sollen ja nicht bei allen Einweisungen dabei sein.
Auch dir ein Superwochenende.

Gruß Gilli

PS: "Einweisung nach MPG - RR Gerät" dreimal
verwendet, sind tatsächlich 3 Einweisungen, Einweisungstitel war blöd gewählt.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: