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 Männer! Der Reihe nach:

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.

Die vorgeschlagene Struktur ist nicht erkennbar. Wenn das Datum direkt in die tabSchuKurs soll, muss es dann in jeden DS eingetragen werden???

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.

Geplant war, eine Vorlage der leeren DB vorzuhalten und nach allen Eintragungen und Zuordnungen unter dem Prüfungsjahr abzuspeichern. Es ist allerdings möglich, statt dem Datumswert nur eine 1 und 2 zu vergeben. Das Datum wird nur bei der Berichtsausgabe für die Kursprüfer benötigt. Die wollen schließlich wissen, wann der erste Termin ist.

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

Genau die richtige Aufgabe für Euch! Ich bin mal gespannt! Sicher kannst Du Dir denken, was dabei rauskommt, wenn ich erklären müsste wie das funktioniert. Also, kein Problem, wenns dauert. Das Leben hat noch mehr zu bieten...
Gruß Domm

Domm

Weiter gehts:

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.

Ich habe nooch nicht einen einzigen Schüler gefunden, der sich für Access erwärmen konnte. Da werden auch nur Grundlagen geschult, also all das was kommt, bevor es spannend wird. Ich hab die Grundlagen weggelassen (das scheint hier auch jeder zu merken) und hab mich gleich ins Abenteuer gestürzt.
Der Informatiklehrer verdreht jedesmal die Augen, wenn ich eine Frage zu Access stelle. Aber nicht, weil meine Denke so konfus ist, sondern weil er über den Lehrstoff nicht hinauskommt.
Schüler, die sich mit Programmierung beschäftigen, setzen vermutlich auf andere Plattformen. Da brauche ich überhaupt nicht mitreden...
Gruß Domm

Domm

Und noch eins obendrauf:

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.

<kurse-kl> ist das Ergebnis des Imports aus der Schul- Software. Daraus macht der Lehrer <Belegung>. Wenn ich Euch richtig verstanden habe, sollte der Lehrer nicht in der Originaldatei rumpfuschen. Das heißt, du hast <kurse-kl> als Arbeitsmaterial! Irgendwer hat geschrieben, dass alles automatisch geht. Also vergiss <Belegung>.

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)))

Das klingt cool! Muss ich gleich mal probieren, wie das funzt. Der Lehrer braucht dieses Aufbrechen zwar nicht, um zu seinem Ergebnis zu kommen, aber mir gefällt es auch besser wenn in den Feldern saubere Daten stehen.

Schönen Sonntag Euch allen!
Gruß Domm

Domm

Kann mir jemand verraten, wie ich ein Zitat als solches erkennbar in die Antworten einfüge? Ich markiere den Text und klicke auf Zitat. Das Ergebnis ist nicht überzeugend.  :-[
Gruß Domm

MzKlMu

Hallo,
ZitatIch markiere den Text und klicke auf Zitat
Aber genau so geht es. Habe ich jetzt auch so gemacht.
Gruß Klaus

Frithjiof

Zitat von: Domm am November 04, 2017, 15:45:23
<kurse-kl> ist das Ergebnis des Imports aus der Schul- Software. Daraus macht der Lehrer <Belegung>. Wenn ich Euch richtig verstanden habe, sollte der Lehrer nicht in der Originaldatei rumpfuschen. Das heißt, du hast <kurse-kl> als Arbeitsmaterial!

Die Aufteilung der ,,Kurspakete" auf zwei Seiten hat leider nichts mit KursA und KursB zu tun wie ich irrtümlich annahm. Sie ist völlig überflüssig.
Dass die Tabelle ein Import aus einer Datenbank ist, ist kaum zu glauben. Sie enthält 4 Namen mit unterschiedlicher Schreibweise. (z.B. "Selce Valentino" "Selce Valentin"  oder "Rapana Rebe(11" "Rapana Rebecca")
Also entweder hat da schon einer rumgepfuscht oder die Datenbank aus der die Daten sein sollen hält die Namen redundant vor.

Dadurch wird der ohnehin schon komplizierte automatisierte Import dieser Tabelle m.E. zu aufwändig.

Einfacher wäre es die Daten eben per Hand zusammen zuschieben. Kommt natürlich drauf an um wie viele Tabellen im Jahr es sich handelt.

Mithilfe der Auto-Filterfunktion im Excel-Ribbon <Daten> lassen sich schnell die Leerzeilen löschen. Dann kann man die "Kurspakete" untereinander schieben, nochmal die Leerzeilen löschen, den Rest alphabetisch sortieren und dann mit einer kleinen Wenn-Funktion den Rest erledigen.
Ich habe dir eine Excel-Tabelle mit ein paar Zwischenschritten mal hochgeladen.
Im Arbeitsblatt <Belegung2> in der Spalte c findest du alle Namensungleichheiten (überall dort wo 3 Nullen untereinander stehen.)
Wenn die Namensprobleme bereinigt sind brauchst Du in der Spalte C nur  0 ausblenden und die Liste ist fertig.
Dann weiter wie im Arbeitsblatt <Belegung>.
Abschließend alles kopieren und in ein neues Arbeitsblatt <Inhalte einfügen>.

Frithjof

(Es gibt übrigens einen Vorschau-Button)

Domm

Du bist echt klasse!
Die von Dir ausgearbeiteten Arbeitsschritte werd ich als Erstes dem Lehrer verklickern. Vielleicht machen wir eine Excel- Vorlage, die er (bzw. der zweite OS- Leiter) in den nächsten Jahren zum Aufbereiten der Daten nutzen kann.
Zitat von: Frithjiof am November 04, 2017, 18:16:55
Dass die Tabelle ein Import aus einer Datenbank ist, ist kaum zu glauben.
Wie gesagt, ich kenne die Oberfläche nicht, aus der die Rohdaten importiert sind. Dass diese fehlerhaft sind, hab ich deshalb noch nicht bemerkt, weil der Lehrer beim Aufbau von <Belegung> die Fehler offensichtlich korrigiert hat. Natürlich händisch...
Ich hab ihn gefragt, wie andere Oberstufenleiter mit diesem Problem umgehen- da scheint jeder mit dem zu arbeiten, was er zur Verfügung hat. Entweder Software, die jemand selbst gestrickt hat, über Excel und viel Fleiß oder mit Papier und Stift.

Okay, wir haben jetzt also das fertige Datenblatt <Belegung>. Jetzt müssen die Daten nach Access importiert werden.
Die Daten <Schüler> in <tabSchueler>, die Daten <Kurse> in <tabKurs>. Wenn ich dem Lehrer eine "Bescheibsanweisung" als Access- Hilfe hinterlege, weiß er auch im nächsten Jahr noch, wie er sich durch das Menü wühlt, bis alles sauber verpackt ist.
Problematischer wird es, die ehemals zusammenhängenden Datenstränge wieder zusammen zu führen (Schüler-KursA-KursB). Er war echt dankbar, dass ihm das bei der von mir übergebenen DB unnötig ist.

Aber bevor ihr mich mit Euren Lösungsvorschlägen wieder erschlagt, lasst mir bitte ein bissl Zeit, die neuen Erkenntnisse für mich aufzuarbeiten. Meine Frau zeigt schon die Zähne. Und ich muss gestehen, dass ich mich noch nie so intensiv mit dem Thema Access beschäftigt habe. (Ja, das sollte ein Lob sein)

Lieber Klaus, lieber Frithjof, danke für die Tipps zum Thema "Zitat". Die Vorschau ist echt hilfreich bei solchen Unsicherheiten. Allerdings ist es so, dass -auch wenn ich nur einen Teil des Textes markiere, die gesamte Antwort als Zitat eingefügt wird. Wenn ich im Eingabefenster die überflüssigen Bereiche rauslösche, muss ich aufpassen, dass der Vor- und Nachtrag quote nicht verloren gehen. Dann passt es!
Gruß Domm

ebs17

ZitatAber bevor ihr mich mit Euren Lösungsvorschlägen wieder erschlagt, lasst mir bitte ein bissl Zeit, die neuen Erkenntnisse für mich aufzuarbeiten.
Dann warte bis Neujahr, ehe Du Dir das folgende ansiehst:
Option Explicit

Sub DoIt()
    DoItPart1
    DoItPart2
    MsgBox "Fertig"
End Sub

Sub DoItPart1()
    Const xlUp = -4162
    Const xlNo = 2
    Const xlAscending = 1
    Const xlTopToBottom = 1
    Const xlSortNormal = 0
    Dim oXL As Object
    Dim oWorkbook As Object
    Dim i As Long
    Dim LastRow As Long
    Dim LastRowN As Long

    Set oXL = CreateObject("Excel.Application")
    oXL.Visible = False
    oXL.DisplayAlerts = False
    Set oWorkbook = oXL.workbooks.Open(CurrentProject.Path & "\Name-Kurs1-KursB.xlsx")

    With oWorkbook
        If SheetExists(oWorkbook, "EineListe") Then .Sheets("EineListe").Delete
        .Sheets("kurse-kl").Copy After:=.Sheets(.Sheets.Count)
        .Sheets(.Sheets.Count).Name = "EineListe"
    End With

    With oWorkbook.Worksheets("EineListe")
        LastRow = .UsedRange.Rows.Count + .UsedRange.Row - 1
        ' überflüssige Zeilen löschen
        For i = LastRow To 1 Step -1
            Select Case .Cells(i, 1).Value
                Case 1 To 100
                Case Else
                    .Rows(i).Delete Shift:=xlUp
            End Select
        Next

        ' Inhalte auf die ersten beiden Spalten kopieren
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        LastRowN = LastRow
        For i = 4 To 9 Step 2
            .Range(.Cells(1, i), .Cells(LastRow, i + 1)).Copy .Range(.Cells(LastRowN + 1, 2), .Cells(LastRowN + LastRow + 1, 3))
            LastRowN = .Cells(.Rows.Count, 2).End(xlUp).Row
        Next
        ' rechte Spalten löschen
        For i = 9 To 4 Step -1
            .Columns(i).Delete
        Next
        ' Nummernspalte löschen
        .Columns(1).Delete
        ' sortieren
        .Range("A:B").Sort _
                Key1:=.Range("A1"), Order1:=xlAscending, _
                Header:=xlNo, OrderCustom:=1, _
                MatchCase:=False, Orientation:=xlTopToBottom, _
                DataOption1:=xlSortNormal
        ' Titelzeile einfügen
        .Range("A1").EntireRow.Insert
        .Range("A1").Value = "Schueler"
        .Range("B1").Value = "Kurs"
        'Debug.Print .UsedRange.Rows.Count
        'Debug.Print .UsedRange.Columns.Count
    End With
    oWorkbook.Save
    oWorkbook.Close
    oXL.DisplayAlerts = True
    oXL.Quit
    Set oXL = Nothing
End Sub
   
Function SheetExists(ByVal oWorkbook As Object, ByVal SheetName As String) As Boolean
    Dim sh As Object
    For Each sh In oWorkbook.Worksheets
        If sh.Name = SheetName Then
            SheetExists = True
            Exit For
        End If
    Next
End Function

Sub DoItPart2()
    Dim db As DAO.Database
    Dim sFrom As String
    Dim sSQL As String

    Set db = CurrentDb
    sFrom = "[excel 12.0 xml;hdr=yes;imex=1;DATABASE=" & CurrentProject.Path & "\Name-Kurs1-KursB.xlsx].[EineListe$]"
   
    sSQL = "INSERT INTO tabSchueler(SchuelerName) SELECT DISTINCT Q.Schueler FROM " & sFrom & " AS Q LEFT JOIN" & _
           " tabSchueler AS Z ON Q.Schueler = Z.SchuelerName WHERE Z.SchuelerName IS NULL"
    db.Execute sSQL, dbFailOnError
   
    sSQL = "INSERT INTO tabKurse(KursPruefer) SELECT DISTINCT Q.Kurs FROM " & sFrom & " AS Q LEFT JOIN" & _
           " tabKurse AS Z ON Q.Kurs = Z.KursPruefer WHERE Z.KursPruefer IS NULL"
    db.Execute sSQL, dbFailOnError
   
    sSQL = "INSERT INTO tabSchuKursterm(schuelerNr, kursNr)" & _
            " SELECT Q.schuelerID, Q.kursID FROM (SELECT S.schuelerID, K.kursID" & _
            " FROM (" & sFrom & " AS E INNER JOIN tabSchueler AS S ON E.Schueler = S.SchuelerName)" & _
            " INNER JOIN tabKurse AS K ON E.Kurs = K.KursPruefer) AS Q LEFT JOIN tabSchuKursterm AS Z" & _
            " ON Q.schuelerID = Z.schuelerNr AND Q.kursID = Z.kursNr WHERE Z.kursNr IS NULL"
    db.Execute sSQL, dbFailOnError
End Sub

Mit freundlichem Glück Auf!

Eberhard

MzKlMu

Hallo,
ZitatAllerdings ist es so, dass -auch wenn ich nur einen Teil des Textes markiere, die gesamte Antwort als Zitat eingefügt wird.
Bei Teilzitaten sollte nicht der Button verwendet werden, der im Beitrag mit "Zitat" zu sehen ist, sondern der Zitate Button in der Knopfleiste (siehe Bild). Dann wird nur der markierte Text als Zitat verwenden. Allerdings fehlt dann der Bezug zum Autor, was aber meist verzichtbar ist. Der Button daneben (der Gartenzaun #) ist für Code Darstellung.
Gruß Klaus

Domm

So ganz langsam finde ich mich hier zurecht  ;D
Das Ganze erinnert mich an einen Fortsetzungsroman, bei dem man kaum erwarten kann, wie es weitergeht. Wer hätte das gedacht; aus einer belanglosen Frage ist einer der größten Threads geworden!!!
Die Excelliste hab ich zum Verständnis selbst aus den Rohdaten nachgearbeitet. Das Blatt Temp erschließt sich mir dabei leider nicht.
Nach dem Löschen überflüssiger Zeilen und Spalte A die Kursblöcke untereinander gestellt, mit der Prüfung der doppelten Einträge wird komfortabel die Kursbelegung der Schüler auf zwei Spalten gesplittet und nebenbei Namenstoleranzen aufgespürt. Wenn der Lehrer diese bereinigt hat, können mit der Feststellung der Nullen die doppelten Namen gefiltert werden.
Wahrscheinlich hat er diese Arbeit ohne eine einzige Funktion gemacht.
Aus dem Code kann ich nichts herauslesen, aber das hast Du Dir schon gedacht. Hatte schon mit Ekkehards VBA zu kämpfen; da fehlts einfach an Wissen.

ZitatBei Teilzitaten sollte nicht der Button verwendet werden
Danke Klaus, die Icons hatte ich bisher weitgehend vernachlässigt.
Trotzdem funzt es nicht!
Ich habe Deinen Text markiert und dann den Icon Zitat gedrückt. Rausgekommen ist das:
Zitat
Bin halt ein Newbie  :-\
Gruß Domm

Lachtaube

@Doimm,

wenn Du den Knopf in der Leiste ganz rechts (Ansicht umschalten) wählst, sollte der zitierte Text in der Nachricht so aussehen (hier als Code dargestellt, weil sonst ein Zitat entstünde):[quote]Bla Bla ...[/quote]ergibt dann:
ZitatBla Bla ...
Optional kann quote noch einige Parameter verarbeiten, die man sich am besten durch ein volles Zitat holt, um an den Hyperlink in der Zitatüberschrift zu gelangen. Den Text stutzt man sich dann auf den gewünschten Inhalt zurecht.[quote author=Domm link=topic=22746.msg133261#msg133261 date=1509835648]Bla Bla ...was dann so aussieht:
Zitat von: Domm am November 04, 2017, 23:47:28Bla Bla ...
oder auch einfach nur[quote="Domm"]Bla Bla ...[/quote]was dann so aussieht:
Zitat von: DommBla Bla ...

PS: ... und in der Vorschau kannst Du ja die Nachricht auch testen.
Grüße von der (⌒▽⌒)

Domm

Hallo junge Frau, danke für die Nachricht.
Aber Du hast sicher längst gemerkt, dass mir schon das Leichte schwer fällt.
Ich erkläre mein Problem nochmal:
Gehe ich auf Deine Post und klicke den Button Zitat, entsteht Folgendes:
Zitat von: Lachtaube am November 05, 2017, 08:46:52
@Doimm,

wenn Du den Knopf in der Leiste ganz rechts (Ansicht umschalten) wählst, sollte der zitierte Text in der Nachricht so aussehen (hier als Code dargestellt, weil sonst ein Zitat entstünde):[quote]Bla Bla ...[/quote]ergibt dann:
ZitatBla Bla ...
Optional kann quote noch einige Parameter verarbeiten, die man sich am besten durch ein volles Zitat holt, um an den Hyperlink in der Zitatüberschrift zu gelangen. Den Text stutzt man sich dann auf den gewünschten Inhalt zurecht.[quote author=Domm link=topic=22746.msg133261#msg133261 date=1509835648]Bla Bla ...was dann so aussieht:
Zitat von: Domm am November 04, 2017, 23:47:28Bla Bla ...
oder auch einfach nur[quote="Domm"]Bla Bla ...[/quote]was dann so aussieht:
Zitat von: DommBla Bla ...

PS: ... und in der Vorschau kannst Du ja die Nachricht auch testen.
Warum das so ist, hat mir Klaus schon erklärt.
Wenn ich jetzt einen Teil Deines Beitrages markiere und klicke den Icon Zitat, passiert das:
Zitat
Also nur [quote][/quote]
Deshalb muss ich den markierten Text dazwischen schieben, damit das Zitat auch drin steht:
Zitatwenn Du den Knopf in der Leiste ganz rechts (Ansicht umschalten) wählst, sollte der zitierte Text in der Nachricht so aussehen
Wieso???
Gruß Domm

DF6GL

Hallo,



wieso?

weil sich "Zitat" nicht um markierten Text schert...

Um einen bestimmten Text zu zitieren, copy & paste den gewünschten Text in das Antwortfenster, markiere diesen Text und klicke auf das "Zitat einfügen"-Icon in der "Icon"-Leiste  (unter "Schriftart")..

Domm

Zitatweil sich "Zitat" nicht um markierten Text schert...
Endlich!
Danke, Franz.
Gruß Domm

Domm

Hallo, da immer noch einige Fragen offen waren, möchte ich mich nochmal melden.

Die Tatsache, dass die Inhalte der Datenbank höchstens eine Lebensdauer von einem halben Jahr haben, macht die gutgemeinte Aufbereitung fragwürdig. Nachdem die Schüler im laufenden Schuljahr die Wahl ihrer Kurse getroffen haben, werden die Daten nach Ende des Kolloquiums nutzlos. Einzig die Kursbezeichnungen haben eine Überlebenschance; angepasst werden müssen sie aber auch.
Nachdem ich mit Fridhjofs Excelliste beehrt wurde, habe ich mich das erste Mal mit diesem Datenursprung überhaupt befasst. Dabei ist mir klargeworden, dass die Aufgabenstellung der Datumszuweisung auch ohne Umweg über Access zu meistern ist. Sicher liegt die späte Erkenntnis auch daran, dass es von dem Lehrer kein "Pflichtenheft" für sein Problem gab.
Das bedeutet letztendlich, dass der Versuch, diese Daten zu normalisieren und über ungeahnte Codestränge zum Leben zu erwecken, überflüssig scheint.

Nicht überflüssig war der Informationsaustausch hier im Forum. Ich habe jede Menge erfahren, vieles noch nicht begriffen, aber einen enormen Impuls bekommen.
Es war sehr spannend, zu beobachten, wie sich die Dinge entwickeln oder auch nicht.
Ich hab mir die Mühe gemacht, auch in anderen Foren zu stöbern und hab den einen oder anderen bekannten Namen dort wiedergefunden. Keine Ahnung, wie Ihr das mit Euren Partnern ausmacht, aber eins ist gewiss- man muss Euch sehr viel Fleiß und Hingabe bescheinigen!
Ich komme gern wieder mit meinen kleinen unausgereiften Problemchen zu Euch.
Wenn Ihr es ertragt.

Das Auflösen des letzten Codes hätte ich gern vor Sylvester erlebt. Genauso die Module, welche "man immer mal brauchen kann".

Vielleicht seid Ihr ganz dankbar, dass diese Odysee endlich vorbei ist. Wieder Platz im Kopf für Neues.
In diesem Sinne nochmal Danke an die ganze Mannschaft! Domm
Gruß Domm