Hallo,
ich bin neu hier und habe folgendes Problem:
Ich habe
- eine Tabelle Schüler: tblschueler [sid,name,vorname,klasse]
- eine Tabelle Klassen: tblklassen [kid,bezeichnung]
Die Verknüpfung der Tabellen sollte passen.
Wie kann ich nun in einem Formular mehreren Schülern gleizeitig eine Klasse zuweisen?
Besten Dank!
Gruß
Jo
Wenn die Datenbank nicht nur für einen Schuljahrgang gut sein ist, sollten kid und sid als Fremdschlüssel für ein Schuljahr in einer weiteren Tabelle erfasst werden.
Zur Mehrfachauswahl bietet sich ein Listenfeld mit der gleichnamigen Eigenschaft an, in der Du die Schüler für eine Klasse auswählst und anderweitig (z. Bsp. in einem Kombifeld) eine Klasse auswählst. Mittels Knopf kannst Du dann entweder in einem Recordset in einer Schleife allen ausgewählten Schülern die kid zuweisen. Man könnte auch aus der Auswahl ein Kriterium zurechtbasteln, das dann für eine Aktualisierungsabfrage genutzt wird
Lange Rede kurzer Sinn - ich habe das vereinfacht im angehängten Beispiel realisiert.
Danke, ich versuche das mal umzusetzen.
Sorry, habe zu schnell abgeschickt.
Ganz unabhängig von deinem Anhang habe ich folgendes gemacht:
In der Tabelle Schüler tbl_schueler habe ich u. a. ein Feld wf für die Wahlfächer. Beim Anlegen der Tabelle habe ich angegeben, dass die "Liste" der Wahlfächer aus der Tabelle Wahlfächer tbl_wahlfächer kommen und "Mehrere Wert zulassen" habe ich auf ja gestellt.
Die tbl_schueler hat nun z.B. folgenden Datensatz
sid, name, vorname, klasse, wf
14, müller, peter, 7B, Chor;Fußball;Klavier
Das ist für meine Zwecke schon mal sehr gut! Aber wie bekomme ich nun mit "wenig Aufwand" eine Liste alle Schüler, die z.B. Chor haben. Wie kann also das ";"-sparierte Feld "auftröseln". Ich meiner tbl_wahlfach habe ich ca. 25 Fächer drin.
Gruß
Jo
Hallo Jo,
ZitatAber wie bekomme ich nun mit "wenig Aufwand" eine Liste alle Schüler, die z.B. Chor haben. Wie kann also das ";"-sparierte Feld "auftröseln". Ich meiner tbl_wahlfach habe ich ca. 25 Fächer drin.
Indem du das Mehrwerte-Feld aus der Tabelle rausschmeisst und statt
dessen eine n:m-Tabelle mit den Zuordnungen erstellst.
gruss ekkehard
Hallo Ekkehard,
das leuchtet ein.
Ich erläutere aber nochmal kurz die Aufgabenstellung.
Ich habe 1000 Schüler verteilt auf 40 Klassen. Jede Klassen hat einen Klassenleiter.
Desweiteren werden 20 Kurse angeboten. Das sind die Kursleiter. Jeder Schüler kann theoretisch unendlich viele Kurse besuchen.
Am Ende soll es "nur" folgende Berichte geben.
- jeder Kursleiter eine Liste der angemeldeten Schüler
- jeder Klassenleiter eine Liste, welcher Schüler welchen Kurs besucht
Irgendwie stelle ich mich zu blöd an. Geht das ohne VB? Wie lange bräuchte ein geübter Accessler ohne "Styling" der Formulare etc.?
Gruß
Jo
Bitte gebt mir noch ein winziges Beispiel, wie ich in einem Formular in zwei Listenfeldern je einen Wert auswähle und diese Werte als neuen Datensatz in einer Tabelle hinzufüge.
Danke.
Schön, dass Du Dich jetzt einem anderen Forum mit dem selben Thema (http://ms-office-forum.net/forum/showthread.php?t=345809) zuwendest.
Mag sein, dass das nicht die feine englische Art ist, aber allein die Tatsache, dass ich dafür sogar zahlen würde, unterstreicht doch nur, dass es mir einfach unter den Nägeln brennt. Sorry.
Wenn es Dir unter den Nägeln brennt, dann lade doch bitte eine Beispiel-DB mit einigen anonymen Spieldaten und besagtem Formular hoch und beschreibe exakt den gewünschten Handlungsablauf.
Zunächst mal herzlichen Dank, für dein Angebot.
Ich lade mal meine Beispiel-DB mit ein paar Musterdatensätzen hoch.
Die Formulare habe ich mal bewusst weggelassen um keine unnötige Verwirrung zu stiften.
Das Ziele wäre folgendes:
Eingabe der Daten
- die Schüler klassenweise ausgeben lassen und sie dann den einzelnen Kursen zuweisen
Ausgabe der Daten in zwei Varianten
- Kurs und Kursleiter mit den entsprechenden Schülern
- Klasse mit Klassenleiter mit einer Übersicht welcher Schüler welchen Kurs besucht
Wobei ich mal "frech" behaupte, dass ich diese beiden Berichte selbst hinbekomme.
Vielen Dank!
Für das Crossposting entschuldige mich an dieser Stelle nochmals!
LG
Jo
Hallo,
das ist so unvollständig.
Zwischen Klassen und Schüler bedarf es ebenfalls einer Verbindungstabelle analog zu Schueler_Kurs. Klasse_id und kurs_id in der Schülertabelle ist zu löschen.
Für Klassenleiter und Kursleiter ist auch eine Tabelle anzulegen und in Kurse und Klassen jeweils nur ein Fremdschlüssel zum Leiter.
PS:
Praktischer Tipp am Rande:
Verwende wenigstens 1 Großbuchstabe in den Feld und Objektnamen.
Hallo Klaus,
danke für deine Nachricht. Ich habe deine Ratschläge beherzigt, außer das mit den Großbuchstaben. Ich hoffe, dass ich die DB mit ihren Tabellen und Verknüpfungen korrekt angelegt habe und mir nun jemand bei der Erstellung der "komfortablen" Zuweisung helfen kann. Ich bin echt etwas am Verzweifeln und ziemlich unter (Zeit-)Druck. Ja, ich weiß, das sind wir alle irgendwie.
Liebe Grüße
Jo
Hallo Jo,
Zitatziemlich unter (Zeit-)Druck
Und der wird immer größer wenn du mit Formularen anfängst
bevor die Tabellenstruktur (Datenmodell) nicht korrekt ist.
Ich habe mal was zusammen gestrickt (siehe Anhang). Ohne Anspruch
auf Fehlerfreiheit und Vollständigkeit, - ein Klassenleiterwechsel ist z.B.
nicht berücksichtigt.
Um den anderen Regulars die Möglichkeit zu Korrektur/Vervollständigung
zu geben ist die DB auch als .mdb enthalten.
gruss ekkehard
Hallo Ekkehard,
herzlichen Dank. Vielleicht mag es unverschämt klingen, aber kannst du mir bitte noch sagen/zeigen wie ich nun weitermache? Wie erwähnt, würde ich auch dafür etwas Geld in die Hand nehmen. Ich habe nämlich die Befürchtung, dass es mich selbst Stunden/Tage kosten wird, wenn ich es überhaupt hinkriege, ein Formular zu erstellen, das mir klassenweise die Schüler auflistet die ich dann in einzelnen Kurse "schiebe".
Gruß
Jo
Hallo Jo,
Schaffe es selber heute nicht, da ich gleich weg muss.
Vielleicht heute Abend.
gruss ekkehard
Sehr nett von dir. Inzwischen "pople" ich mal selber etwas weiter.
Gruß
Jo
Hallo nochmal,
ich hoffe, ich lehne mich nicht zu weit aus dem Fenster. Aber bei deiner Beispiel-DB von oben, gibt es eine Tabelle tblKlassenleiter und eine tblKursleiter. Eigentlich reicht doch eine Tabelle tblLehrer. Ein Lehrer kann ja Klassenleiter und Kurleiter sein. Dann muss ich nicht zwei "Lehrerlisten" führen. Oder irre ich da?
Hoffentlich bis heute Abend oder Morgen. ;)
LG
Jo
So,
ich bin, ein für mich großes Stück weitergekommen. Ich habe Ekkehards DB als Grundlage genommen. Die Tabellen tblKursleiter und tblKlassenleiter habe ich noch getrennt gelassen. Vielleicht hatte das bei Ekkehard einen Grund?
Nur in der Tabelle tblSchuelerInKurs habe ich das ursprüngliche Primärschlüsselfeld gelöscht und die SchülerID und die KursId zu einem Primärschlüsselfeld zusammengefasst, damit nicht ein Schüler "versehentlich" zweimal im selben Kurs ist.
Die Zuweisung der Schüler in einen Kurs mache ich über das Formular frm_schueler_zu_kurs. Da bräuchte ich nun etwas mehr "Komfort": die Schüler sollten "klassenweise" ausgegeben werden. Bei 1000 Schülern suche ich sonst "ewig". Wie macht man das am besten? Geht das auch noch ohne VBA?!
Vielen Dank!
Gruß
Jo
Hallo,
ZitatDie Tabellen tblKursleiter und tblKlassenleiter habe ich noch getrennt gelassen.
Das würde ich auf keinen Fall machen, Klassen und Kursleiter ist ein Personenkreis und gehört in eine Tabelle.
Hatte ich in #11 schon geschrieben und das "eine" sogar unterstrichen. Wenn Du 2 Tabellen lässt, hast Du die gleiche Person in 2 Tabellen, was natürlich redundant und damit zu vermeiden ist.
ZitatFür Klassenleiter und Kursleiter ist auch eine Tabelle anzulegen und in Kurse und Klassen jeweils nur ein Fremdschlüssel zum Leiter.
Den Rest der DB schaue ich mir später an.
So, ich nun habe ich nur noch eine Tabelle für die Lehrer.
Wie oben erwähnt hakt es noch an einem "besseren" Formular.
Vielen Dank!
Gruß
Jo
Hallo,
ein Kurs setzt sich ja nicht aus einer kompletten Klasse zusammen sondern kann ja aus verschiedenen Klassen kommen. Daher wäre es nicht so gut, wenn man ganze Klassen auf einen Schlag einem Kurs zuordnen würde.
Besser wäre es, man würde die Namen zur Auswahl im Kombi auf eine Klasse einschränken.
Ist meine Annahme zutreffend ?
Ich bin ja mit der Materie nicht vertraut.
Du hast völlig Recht. Nicht alle Schüler einer Klasse sind in einem Kurs.
Ich meinte folgendes: ich habe ca. 1000 Schüler. In den Formular das ich im Moment habe, sehe ich ja immer ALLE Schüler. Ich brauche halt eine "übergeordnete" Auswahl der Klasse.
Ich sehe dann nur die Kinder der 5A und weise ihnen dann Kurse zu.
Dann sehe ich nur die der 5B usw.
Besser verstanden? Kannst du mir das evtl. im obigen Anhang erklären/umsetzen?
Hallo,
dann hatte ich es ja gleich richtig verstanden.
Ich werde Dir mal was basteln, wird aber etwas dauern.
Ok, alles klar. Danke!
Hallo,
nur Bemerkung am Rande:
IMHO bedarf es eines größeren Umbaus der Beziehungen. Wie schon erwähnt, EINE Personen-Tabelle mit Kategorisierung der Personen-Art (Schüler, Lehrer,.., tblPersonenArt)
Wenn mit "Jahrgang" ein "Schuljahr" gemeint ist, sollte es eine weitere Tabelle "tblKlassenSchuljahre" (oder "tblSchuljahrsKlassen") geben, mit Referenz zu "tblSchuljahre" und "tblKlassen" . Die Tabelle "tblSchue_Kla_Zu_Jahrgang" wird an "tblKlassenSchuljahre" angebunden.
Hallo Franz,
du hast sicher Recht, nur bin ich für meine Zwecke schon relativ weit. Aber beim nächsten mal werde ich deinen Ratschlag beherzigen. Die Tabelle mit den Jahrgängen benötige ich Moment ohnehin nicht, möchte sie aber nicht löschen um nicht wieder von vorne anfangen zu müssen.
Aber vielleicht könnte ihr mir nebenbei noch eine Frage beantworten: ich möchte eine Abfrage, die mir ausgibt, welcher Lehrer welchen Kurs leitet und welche Schüler aus welcher Klasse teilnehmen. Da ich aber nur noch eine Tabelle für die Lehrer habe, liefert mir meine Abfrage aber immer nur die Klasse, in der der Kursleiter auch Klassenleiter ist und nicht die Klasse des betreffenden Kinder. Was mache ich da falsch?! Siehe Anhang
Ah, ich denke, ich konnte meine Problem selber lösen. Ich habe in der Abfrage die Verknüpfungen anders gesetzt. Bin stolz auf mich. Für den zweiten Tag Access bin ich halbwegs zufrieden. :D
Und gerade beim Joggen ist mir noch eingefallen, dass ich außer der oben erwähnten Klassenauswahl ja auch noch die Möglichkeit brauche, Schüler aus Kursen zu entfernen?!?
Hallo,
zum Entfernen einen DS diesen über den Datensatz markieren und Entf drücken, mehr braucht es da nicht.
So, ihr lieben, ich mach mal Schluß für heute.
Ich habe für meine Verhältnisse einiges geschafft und viele dazugelernt.
Nur eines geht einfach nicht bzw. ich habe keinen Schimmer, wie ich es realisieren soll, dass ich im Formular nur bestimmte Schüler 5A, 5B, usw. angezeigt bekomme.
Das ganze findet ihr im Formular Kopie von frm_schueler_zu_kurs
Schöne Grüße
Jo
P.S.: Wer immer mir helfen möchte, bitte verwendet nach Möglichkeit die Datei im Anhang. Danke!
So, ein vorerst letztes Mal. Habe alles fertig. Jetzt kann ich nach Klassen filtern im Formular. :D
LG
Jo
Hallo,
ZitatDas würde ich auf keinen Fall machen, Klassen und Kursleiter ist ein Personenkreis und gehört in eine Tabelle.
Das war mir nicht klar, sonst hätte ich das auch mit einer Tabelle angelegt.
In der DB des TS waren auch zwei Tabellen mit unterschiedlichen Daten.
Habe ich geändert. Außerdem noch eine Änderung in den Tabellen bezügl.
der Jahrgänge (siehe Anlage).
Formular hab ich dir auch gebaut. Das ist noch nicht vollständig. Da fehlen
noch Inkonsistenzprüfungen.
gruss ekkehard
P.S.
Deine letzte Version habe ich mir nicht mehr angeschaut.
Guten Morgen Ekkehard,
vielen Dank für deine Arbeit. Ich schau mir das mal in Ruhe an. Auf den ersten Eindruck finde ich das Hinzufügen und Entfernen der Schüler zu/aus den Kursen sehr schön. Ich schaue mir mal die entsprechende Codes genau an.
Was meinst du genau mit Inkonsistenzprüfungen?
Gruß
Jo
Hallo Jo,
ZitatWas meinst du genau mit Inkonsistenzprüfungen?
Z.B. kannst du jetzt (noch) einen Schüler in mehrere Klassen stecken :-[
Dazu muss das Kombi auf die Schüler gefiltert werden, die noch keiner
Klasse zugeordnet sind. Ich hatte mich daran schon versucht, und die
entsprechende Abfrage funzt auch, aber das UFo zeigt dann die Schüler
nicht mehr an. Da muss ich nochmal dran, auch weil ich den Jahrgang
dabei nicht berücksichtigt habe.
gruss ekkehard
Hallo Ekkehard,
danke schon im Voraus. Wenn das natürlich noch abgefangen werden würde, dass ich einen Schüler nicht zweimal in den selben Kurs stecken kann, wäre Klasse. Der Jahrgang ist übrigens in meinem Fall völlig obsolet. Ich habe das nur wegen der Beispiel-DB, das mir hier in den Thread gelegt wurde, behalten.
Zitat
Z.B. kannst du jetzt (noch) einen Schüler in mehrere Klassen stecken :-[
Ich denke du meinst Kurse, oder?
Gruß
Jo
Hallo Jo,
Nein, ich meine Klassen.
Bei den Kursen kann es nicht passieren, weil dort die Filterung der Liste
greift; - einmal angemeldet wird der Schüler für diesen Kurs nicht mehr
zur Auswahl angeboten. Allerdings, wie ich gerade gesehen habe, auch
nicht für andere Kurse >:( - das muss ich noch korrigieren.
gruss ekkehard
Hallo Ekkehard,
wenn ich noch eins anmerken darf: wenn ich im Register Kurse im Kombofeld den Kurs ändere, ändert sich leider nicht das Listenfeld.
Beispiel, damit ich es deutlicher erklären kann: füge ich einen Schüler zum Chor hinzu, dann wird mir der Schüler im Moment noch bei allen anderen Kursen auch als Teilnehmer angezeigt. Ich versuche gerade selbst, bei jedem Wechsel des Kurses das Teilnehmerfeld zu aktualisieren. Leider reichen da meine VBA-Kenntnisse nicht aus.
Gruß
Jo
Ich versuche auch dein VBA zu verstehen, weil ich beim Arbeiten mit deiner Variante eine Änderung benötige.
Beim Hinzufügen hast du
With Me!lstSchuelerInKlasse
beim Abmelden
With Me.lstSchueImKurs
Also einmal mit "!" und einmal ohne. Wo ist der Unterschied?
Hallo Jo,
ZitatAlso einmal mit "!" und einmal ohne. Wo ist der Unterschied?
Schaust du hier: http://www.donkarl.com?FAQ6.3 (http://www.donkarl.com?FAQ6.3)
Verursacht IMO aber auch keine Fehler. Man sollte es aber schon
vereinheitlichen. Ich persönlich verwende bei mir normalerweise
eine andere Notation, ist mir hier aber zu viel Schreibarbeit
With Me!Controls("lstSchuelerInKlasse")
Inzwischen konnte ich auch die möglichen Inkonsistenzen vermeiden.
Allerdings ist da noch ein Bug; - im Ufo werden für die Klasse 5A die
Schüler nicht angezeigt ???. Man sieht zwar die 3 DS aber keine
Namen im Kombi, die anderen Klassen werden korrekt angezeigt.
Vielleicht ist Klaus so nett und schaut sich das mal an. Ich komme nicht
darauf, was an der Klasse bzw. den Schülern anders ist.
gruss ekkehard
Vielen Dank für deine Mühen. Ich schau mir das in Ruhe an.
Mit besten Grüßen
Jo
Hallo Jo,
Zitatwenn ich im Register Kurse im Kombofeld den Kurs ändere, ändert sich leider nicht das Listenfeld.
Das ist in der letzten Version korrigiert.
Der VBA-Code hat i.Ü. mit der Anzeige bis auf die Requeries nicht viel
zu tun. Der betrifft eigentlich nur die beiden Buttons und erstellt/löscht
die Zuordnungen. Das wird alles über die Abfragen, die dem UFo und
dem Kombi sowie den Listen zugrunde liegen geregelt; - die musst du dir
anschauen und verstehen. Wobei ich hier auch einschränken muss, dass
ich 1. immer noch nicht sicher bezügl. des Datenmodells bin, und ob die
Abfragen nicht auch einfacher zu formulieren wären. Und die Jahrgangs-
problematik habe ich jetzt auch aussen vor gelassen.
gruss ekkehard
Alles klar, danke nochmals. Ich schau mir das nochmal ganz genau an und versuche es nachzuvollziehen.
Gruß
Jo
Hallo Jo,
Böser Fehler, manchmal frage ich mich, was ich da eigentlich mache.
Die DS-Herkunft des Kombis "cboSchueler" ist falsch >:(
Bitte ersetze diese durch
SELECT S.Schueler_id,
[schue_Name] & ("; "+[schue_vorname]) AS Schueler
FROM tblSchueler AS S
WHERE S.Schueler_id Not In
(SELECT SKl.Schue_idf
FROM tblSchuelerInKlasse)
Das funzt dann wie gewollt. Allerdings nicht mehr, wenn der Jahrgang relevant wird.
gruss ekkehard
Danke dir. Und wieder was gelernt, vor allem was die Syntax in VBA angeht.
Um Inkonsistenzen zu vermeiden habe ich in meinen Formularen mit dcount gearbeitet.
Hallo Jo,
Geht natürlich auch, aber ich finde es eleganter Falscheingaben gar nicht
erst zuzulassen (habe ich auch erst mit der Zeit gelernt).
gruss ekkehard