Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Filtern eines UF nach WertA ODER WertB

Begonnen von Domm, Oktober 16, 2017, 12:54:27

⏪ vorheriges - nächstes ⏩

Domm

Hallo Ekkehard, hallo Klaus.
Tut mir leid, wenn Ihr das Gefühl habt, Eure Zeit zu verschwenden. Ich denke, wir betrachten einfach dieses Problem als gelöst.
Aber ich möchte wenigstens noch die Situation erklären:
Die Daten in Excel liegen in folgender Form vor: Spalte A: [Schülername und Vorname]; Spalte B: [Kursname (Prüfer)] von einem der beiden Kurse; Spalte C: [Kursname (Prüfer)] des anderen Kurses.
Das habe ich bis jetzt auch nicht gewusst; der Lehrer hats mühsam! aufgedröselt, weil ich ihm erklärt hatte, dass die verschiedenen Daten in verschiedene Tabellen überführt werden müssen.
Also die Schüler auf einem Tabellenblatt, die Kurse auf einem anderen. Sauviel Arbeit!

Ihr habt mir jetzt wiederholt erklärt, dass mit dem richtigen Modell nicht mehr Arbeit entsteht. Die Arbeit, die sich der Lehrer gemacht hat, muss also Access übernehmen. Das bedeutet für mich, die Excel- Liste wird unaufbereitet nach Access importiert, dort in die entsprechenden Tabellen überführt und automatisch wieder zugeordnet. Dass diese Prozedur meine Fähigkeiten und auch mein Wissen übersteigt, habe ich in der letzten Post schon erklärt.
Wieso seid Ihr jetzt sauer? Jetzt gehts doch gar nicht mehr darum, eine DB zu verkaufen, die den strengen Regeln genügt. Der Lehrer hat seine Glückseligkeit. Er braucht die Daten nicht mehr stundenlang aufzusplitten, um dann beim Zusammenführen Sorge zu haben, einen Fehler zu machen. Und wenn ich ihm gesagt hätte, dass ich ihm keine Lösung anbieten kann, wärs auch OKAY.
Aber ich hab mich gefreut, dass Ihr mich an die Hand genommen habt.
Ich werde nie in Eure Sphären aufsteigen; dafür fehlen mir Englischkenntnisse und vernünftige  Vorbildung. Außerdem sind die Pausen zwischen den Access- Basteleien einfach zu lang.
Es ist einfach nur so, dass ich mich freue, wenn sich nach vielem Suchen und Probieren eine Lösung für ein Problem herausschält. Und da kommt man ohne Hilfe oft nicht weiter.
Erinnert Ihr Euch, mit welchem Thema ich an Euch herangetreten bin? Dieser Nagel ist längst eingeschlagen und ich freue mich, dass ich jetzt weiß, wie es geht.
Die Herausforderung jetzt ist für mich die, wie verschiedene DS auf bestimmte Kriterien miteinander verglichen werden können.
Das ist auch spannend. Wie ich allerdings vermute, hab ich damit die Anforderungen an ernsthafte Weiterbildung nicht erfüllt.
Ich freue mich, dass ich Euch kennen gelernt habe und dass Ihr solange durchgehalten habt.
Es wäre schön, wenn ich mich mal wieder zu Wort melden dürfte. Dann sicher nicht so langatmig und uneinsichtig.
Euch alles Gute, Domm
Gruß Domm

Beaker s.a.

Hallo Domm,
Das die Daten aus einer externen Quelle stammen war bisher nicht
bekannt  :(
Die Excel-Herkunft zeigt nun auch, woher dein Datenmodell stammt.
Da muss man leider völlig umdenken, - Datenbanken (Access) arbeiten
anders als eine Tabellenkalkulation, - wie der Name eigentlich schon
andeuten sollte  ;)

Dann fehlte dir also zur Verwendung des korrekten Datenmodells nur
noch der Import der externen Daten in dieses.
Sollte machbar sein wenn du die Exceltabelle hier einstellst.

Ich bin allerdings ab Freitag im Urlaub (1 Woche), und weiss noch nicht,
ob ich meine Frau überreden kann den Laptop mitzunehmen  ;), und
morgen muss ich noch arbeiten. Vielleicht hilft aber jemand aus.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Beaker s.a.

Hallo Domm,
Habe schon mal angefangen darüber nach zu denken.
Wenn die Exceltabelle so aufgebaut ist wie beschrieben ist es im Prinzip
mit ein paar Einfügeabfragen möglich die Daten in die verschiedenen
Tabellen zu importieren. I.Ü. auch gleich in eine Tabelle "Kursleiter".
Es gibt aber das Problem, dass wohl aus Excel keine IDs kommen, und
deshalb überlegt werden muss, wie man mit Namensgleichheiten (sprich
keiner Eindeutigkeit) verfährt.
Wie oft muss das denn überhaupt importiert werden? Jährlich/halbjährlich?
Diese Fragen hätte ich gerne noch beantwortet bevor ich mich mit dem
Import beschäftige. Und die Exceltabelle natürlich.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Beaker s.a.

Ach ja, noch eine Frage.
Wie sieht das mit der Zuordnung Kurse/Kursleiter aus?
1 Kurs 1 -Leiter sollte klar sein. Kann ein Kursleiter aber auch mehrere
Kurse geben (also verschiedene Fächer)?
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Domm

Ehrlich, ich hätte nicht gedacht, dass noch irgendwer eine Minute an dieses Thema verschwendet.
Danke Ekkehard!
Schnell nochmal zum Ursprung: Die Info zur Datenherkunft wurde erst im Verlauf notwendig, weil ja die Fragestellung nur ein Fragment der Aufgabe war. Und welcher Natur diese Daten sind- das hab auch ich erst spät erfahren.

Ein Zitat vom Beginn dieses Threads:
,,...Der Lehrer bekommt eine Datei, in der die Zuordnung der Kurse zu den Schülern festgelegt ist und soll diese auf zwei Wochen verteilen.

Kurs A
Schü 2
Schü 7
Schü 13
Schü 31

Kurs B
Schü 5
Schü 18
Schü 51

Kurs C
...
Da der Import aus dieser nicht näher benannten Datei so nicht möglich ist, importiert er die Schülerliste nach Excel, von wo sie in die DB exportiert wird...."

Etwas später kam dann die auch für mich neue Erkenntnis:
,,...Dem Lehrer hatte ich verklickert, dass man die einzelnen Elemente seiner Daten in die verschiedenen Tabellen aufbrechen muss. Was hat er gemacht? Die bestehende, nach Excel überführte Tabelle mit den Daten "Schüler X belegt KursA und KursB" mühsam aufgedröselt. Nachdem alles in Access sauber reinsortiert ist, muss er den (eigentlich fertigen Zustand) wieder händisch herstellen. Das hat er auf sich genommen, um meine (aus dem Grundsatz sauberer DB- Modelle gestellten) Forderungen nicht zu hinterfragen. Als er dann mein Ergebnis gesehen hat (ja- genau das, was hier den allgemeinen Aufschrei verursacht hat), kam die Frage, ob man nicht auch die Kurse gleich in die Spalten mit rein- importieren könne. Da würde er sich viel Arbeit sparen..."

Noch später:
,,...Der Datensatz in Excel fasst Vor- und Zuname der Schüler zusammen; genau so Bezeichn. des Kurses und sein Prüfer [Aksonov Polina] / [1eth1 (Sdl)] / [1b2  (Spö)]..."

Jetzt seht Ihr, welchen Aufwand der Lehrer auf sich genommen hat, um dem DreiTabellenModell gerecht zu werden
,,...Die Daten in Excel liegen in folgender Form vor: Spalte A: [Schülername und Vorname]; Spalte B: [Kursname (Prüfer)] von einem der beiden Kurse; Spalte C: [Kursname (Prüfer)] des anderen Kurses..."
- Er hat aus der Excelliste die Schüler gefiltert und die Namensbestandteile in Vor- und Zunamen aufgeteilt. (Hut ab!)
- Er hat die Kurse gefiltert und händisch umbenannt (aus [1b2] wurde ,,1 Biologie 2", den in Klammern stehenden Prüfer in Normalform gewandelt (aus (Spö) wurde ,,OStRin Dr Spörlein" und diese Daten separat aufgeführt.

Nachdem alles sauber nach Access importiert war, hab ich ihm die Aufgabe gegeben, alles wieder zusammenzuführen. Etwas verlegen hat er mich irgendwann gefragt, obs nicht auch ginge, die Daten unbearbeitet nach Access zu überführen. Die Erkenntnis seines Schaffens hat zugegebenermaßen dann mich verlegen gemacht.
Nun hat sich dadurch eine Importtabelle ergeben, die genau dem Modell meiner ersten Versuche entspricht- allerdings aus anderen Gründen. Ging es mir bisher nur darum, die Vergleichbarkeit von Daten in einem DS zu realisieren, liegen nun die Rohdaten in dieser Form vor.

Wer will, kann mir daraus jetzt einen Strick drehen, aber wie ich diesen Brei normalisieren soll, weiß ich nicht. Zumal dem Lehrer egal ist, ob die einzelnen Englischkurse normalisiert werden sollten und dann über eine Beziehung den Lehrern wieder zugeordnet werden.

Und stelle fest, dass ich mit zwei Datumsfeldern ganz schnell fertig bin. Deshalb hatte ich mich aus dem Thema verabschiedet. Um nochmal zu zitieren:
,,...Der Lehrer hat seine Glückseligkeit. Er braucht die Daten nicht mehr stundenlang aufzusplitten, um dann beim Zusammenführen Sorge zu haben, einen Fehler zu machen..."

Nachdem alles gebacken ist, hab ich endlich Zeit, mich mit den Inhalten Eurer Lösungen zu beschäftigen.
Ich wünsche Euch ein schönes WE! Domm
Gruß Domm

Beaker s.a.

Hallo Domm,
ZitatDa der Import aus dieser nicht näher benannten Datei so nicht möglich ist, importiert er die Schülerliste nach Excel, von wo sie in die DB exportiert wird...."
Wäre schon interessant beide Tabellen mal als Datei zu erhalten, um den
Aufbau zu sehen. Import in Access sollte eigentlich immer irgendwie
möglich sein, auch normalisiert.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Domm

Sehr gern, Ekkehard.
Die Ausgangsdatei ist ein Programm, welches vom Kultusministerium den Schulen zur Verfügung gestellt wird. Wie dort wo die Daten abgelegt sind, weiß ich nicht. Als Hausmeister bekomme ich natürlich auch keinen Zugriff. Warum jetzt die Kolloquiumsplanung dort nicht möglich ist und warum sich ein Oberstufenlehrer damit in Excel rumärgern muß- keine Ahnung. Jedenfalls schafft er es, die Daten so nach Excel zu überführen, dass ein Datenblatt [kurse-kl] zur Verfügung steht. Da dieses als Basis für weitere Verwendung ungeeignet ist, strickt er sich daraus das Tabellenblatt [Belegung]. Daraus hat er mir die Namen selektiert und aufgeteilt sowie die Kurse getrennt und aus Abkürzungen normale Bezeichnungen gemacht. Da aber nur er damit arbeitet, brauchts das gar nicht. Der Import von [Belegung] gestaltet sich denkbar einfach; mit dem Hinzufügen zweier Datumswerte ist die Aufgabe erfüllt, wenn sich die Kurse filtern lassen. Und das geht in einer Union, in der die beiden Kurse zusammengeführt werden. Bin mal gespannt, wie sich die Normalisierung umsetzen lässt... LG Domm
Gruß Domm

ebs17

ZitatBin mal gespannt, wie sich die Normalisierung umsetzen lässt...
Normalisierung hat mit der Qualität von zu importierenden Quelldaten relativ wenig zu tun, sondern orientiert sich an datenbankinternen Kriterien, z.B. dass atomare Informationen nur genau einmal gespeichert werden. Erläuterungen dazu wurden oben mit Sicherheit schon gegeben.
Wenn die Quelldaten dann nicht derart strukturiert sind, dass man einen Standardimport, der ja auf standardisierten Strukturen aufbaut, nicht sinnvoll verwenden kann, muss man eben eine eigene Importroutine schreiben, die dann bereichsweise oder gar punktweise Informationen greift und in die Zieltabellen schreibt. Wenn der Bagger nicht geht, muss man eben auf die Sandschaufel oder gar die Fingerspitzen zurückgreifen.
Wenn man so etwas angehen will, braucht man das fertige Datenmodell in der Datenbank (das bleibt für lange bis hin zur Ewigkeit) sowie dann für die Quelldaten eine Sicherheit, dass sie zumindest immer in gleichen Strukturen auftreten - auf irgendetwas muss man sich ja verlassen können. Maschinen-/programmerzeugte Daten sollten so etwas bieten.
Daher würde man hier auch eher an der originalen Ausgabe der Ausgabedatei ansetzen wollen und nicht nach erfolgten Excelversuchen einer Person, die den Vorgang nicht ganz so beherrscht.

Wenn Du also das fertige Datenmodell (Demo-DB mit Tabellen und Beziehungen) und die Ausgangsdatei bereitstellst, ggf. mit einigen Erklärungen, was warum wohin soll, könnte sich auch jemand mit dem Import beschäftigen, der es sich nicht antut, sich dieses riesenlange Thema inhaltlich nachzuvollziehen.
Mit freundlichem Glück Auf!

Eberhard

Domm

Hallo Eberhard, danke für Deinen Beitrag.
Im Anhang das DB- Modell, in der vorangegangenen Nachricht die Excel- Liste, DBl. [kurse-kl].
Das ist die Ausgangssituation. Gruß Domm
Gruß Domm

ebs17

#54
Ich schrieb von einem fertigen Datenmodell (die Diskussion im Vorfeld erschien mir lang genug). Das in der Demo Vorgelegte entspricht diesem nicht.
Offensichtlich:
- Indizierung auf Tabellen-ID's doppelt, weitere sinnvolle Indizierungen fehlen.
- Keine referentielle Integrität eingestellt.

Inhaltlich:
- Die tabTermine und ihre Verwendung ist in der vorgelegten Form sinnfrei. Termine kann man hier gleich in die tabSchuKurs in einem Feld erfassen. Warum: Ein Date-Feld belegt 8 Byte pro Datensatz, zwei Long-Felder zur Verknüpfung auch schon zweimal 4 Byte, und dann hätte man den jedesmaligen Aufwand für Verknüpfung zwischen den Tabellen (das ist zu erledigender Aufwand, der irgendwann auch spürbar Zeit benötigen kann) sowie längere und unübersichtlichere SQL-Anweisungen in der nachfolgenden Verwendung (was sich auch für Neulinge nicht als Plus darstellen wird).
- Die tabKurse enthält einen Prüfer, aber keinen inhaltlichen Bezug zu einem Kursinhalt. Ist es sinnvoll und nachhaltig, einen Kurs über eine Person zu identifizieren?
Mit freundlichem Glück Auf!

Eberhard

Domm

Neuer Versuch!
Indizierungen geändert.
Ref. Integrität eingestellt.

tabTermine enthält 2 Werte, welche den Wochenbeginn der Prüfungen beinhalten. Diese werden erst dann benötigt, wenn die Zuordnung der Kurse - Schüler wieder hergestellt ist. Deshalb ist der Entwurf von Ekkehard zwar richtig, wenn ich den DS in einem Zug mit allen notwendigen Daten füllen will, aber für den Lehrer nicht hilfreich. Vielmehr muss er anhand der Kursbelegung zueinander die Termine switchen können.
Wenn ich die tabTermine durch ein Nachschlagefeld in tabSchuKurs ersetze, muss der Lehrer die Möglichkeit haben, die Datumswerte einzutragen. Deshalb hab ich mich für eine externe Tabelle entschieden.
Wie schon erwähnt, stehen Kurs und Prüfer als ein Feldinhalt zur Verfügung. Auch wenn z.B. engl von 3 Kursleitern geprüft wird, wird im Vorfeld schon der Kurs als 1e1, 1e2 oder 1e3 deklariert.

Jetzt ist über den Datenimport zu realisieren, dass in access, im frmSchuKurs, listeSchülerMitKurs die Daten aus excel, kurse-kl aufbereitet sind.
Auch wenn ich es immer wieder um die Ohren gehaut bekomme, wie leicht das alles geht mit dem Import und dem Normalisieren- ich wiederhole mich: das ist kein Auftrag, den ich bewältige!
Ich steige nicht im Ansatz durch, was in den Modulen von Ekkehard steht, die man immer brauchen kann...
Gruß Domm

Domm

So, nun hab ich vor lauter Frust auch den Anhang vergesssen  >:(
Gruß Domm

ebs17

ZitatWenn ich die tabTermine durch ein Nachschlagefeld in tabSchuKurs ersetze, muss der Lehrer die Möglichkeit haben, die Datumswerte einzutragen. Deshalb hab ich mich für eine externe Tabelle entschieden.
Nachschlagefeld ist Blödsinn. Schreibe in das Feld statt den Fremdschlüssel auf den Termin direkt das Datum, womit dann das Feld den Datentyp Datum/Uhrzeit haben muss.
Für ein "Switchen" ergibt sich der gleiche Aufwand bzw. eher weniger. Ein Datum zu ändern ist die gleiche Arbeit wie eine Longzahl. Bei einem Datum ist aber das unmittelbare Verständnis größer und die Anwendung einfacher (einfache Aktualisierung statt sich den Fremdschlüssel aus einer anderen Tabelle zu holen).

Nebenbei:
ZitattabTermine enthält 2 Werte, welche den Wochenbeginn der Prüfungen beinhalten
Geplante Datenbanken, so wie das die Kollegen vorhaben und empfehlen, sind langlebig und somit auch im Folgejahr und im Folgefolgejahr usw. nutzbar. Da gibt es dann sicher weitere Termine.

So wie ich das sehe, sind hier zwei grundlegende Schritte erforderlich:
1) Aus der wilden Tabelle wird eine richtige Tabelle (Liste) mit dann nur interessierenden Daten erstellt (=> Excel-Automation).
2) Nunmehr ist ein Import nach folgendem Muster möglich: Importtabelle in m:n-Beziehung auflösen

Ich würde zu beiden Aufgaben einen Versuch wagen, das kann aber etwas dauern.
Mit freundlichem Glück Auf!

Eberhard

ebs17

Zur zeitlichen Überbrückung würde ich eine Rückfrage stellen:
Zitatdas ist kein Auftrag, den ich bewältige!
Ich steige nicht im Ansatz durch
Als Hausmeister bekomme ich natürlich auch keinen Zugriff
warum sich ein Oberstufenlehrer damit in Excel rumärgern muß

Ein überforderter Oberstufenlehrer, ein Hausmeister?
In meinem Verständnis ist ein Gymnasium eine höhere Bildungseinrichtung, wo Excel + Access sogar Lehrstoff sein sollten, es alo gewisse Grundlagen oder gar erweiterte Kenntnisse und Fähigkeiten geben könnte. Warum nehmen sich nicht ein Informatiklehrer, eine Informatik-AG oder einzelne aufgeweckte Gymnasiasten, die sich zeitgleich oder später als Praktikanten oder Werksstudenten verdingen werden, dieser Aufgabe an? Eine gelöste reale Aufgabe macht sich als eigene Erfahrung  wie auch als Referenz recht gut.

"Nicht für die Schule, für das Leben lernen wir."
Das reale Leben anpacken kann man gar nicht früh genug.
Mit freundlichem Glück Auf!

Eberhard

Frithjiof

#59
@Domm
Zitat von: Domm am November 03, 2017, 13:37:43
Jetzt ist über den Datenimport zu realisieren, dass in access, im frmSchuKurs, listeSchülerMitKurs die Daten aus excel, kurse-kl aufbereitet sind.

Zitat von: Domm am Oktober 29, 2017, 18:27:47
Der Datensatz in Excel fasst Vor- und Zuname der Schüler zusammen; genau so Bezeichn. des Kurses und sein Prüfer [Aksonov Polina] / [1eth1 (Sdl)] / [1b2   (Spö)]


Eine einfache Methode ist es,  Excel Funktionen zu nutzen um die Daten für die Aufnahme in die Datenbank vorzubereiten.
Deine Excel Tabelle enthält 2 Arbeitsblätter: <Kurse-kl> und <Belegung>

Ich nehme jetzt mal an, dass <Belegung> die zu importierenden Daten enthält.
Spalten (vorhanden): Schüler, KursA, KursB
Spalten (neu): Nachname, Vorname,Kurs1,Prüfer,Kurs2,Prüfer

Funktionen in neuen Spalten (in die zweite Zeile kopieren) :
Nachname: =GLÄTTEN(TEIL(A2;1;SUCHEN(" ";A2;2)))
Vorname: =GLÄTTEN(TEIL(A2;SUCHEN(" ";A2;2)+1;LÄNGE(A2)))
Kurs1:=GLÄTTEN(TEIL(B2;1;SUCHEN("(";B2;2)-1))
Prüfer1:=GLÄTTEN(TEIL(B2;SUCHEN("(";B2;2);LÄNGE(B2)))
Kurs2:=GLÄTTEN(TEIL(C2;1;SUCHEN("(";C2;2)-1))
Prüfer2:=GLÄTTEN(TEIL(C2;SUCHEN("(";C2;2);LÄNGE(C2)))


Frithjof