collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 48
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13974
  • stats Beiträge insgesamt: 66586
  • stats Themen insgesamt: 8974
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Filtern von DS  (Gelesen 1534 mal)

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Filtern von DS
« am: Dezember 14, 2017, 10:52:15 »
Hallo, Ihr Gönner der unentwegt Fragenden, ich hab mich schon wieder in ein Thema verbissen:
Im HF ein Listenfeld mit Werten aus [tabZeiten].
Beim Auswählen eines DS (also einer eingetragenen Uhrzeit) wird die ZeitID in eine Verknüpfungstabelle übergeben. Zum Verständnis- vor dieser Auswahl ein Wochentag ausgewählt, der ebenfalls in der Verknüpfungstabelle gespeichert wird (Anhang). Wie kann ich es erreichen, dass für diesen gewählten Tag alle Zeiten gefiltert werden, welche schon vergeben sind?
Beim DS- Wechsel (Anderer Tag) sollen alle freie Zeiten angezeigt werden.
Sorry für das Milchreisthema, aber ich finde keinen Zugang.
Meine Idee war, in der Abfrage den ausgewählten Tag als Kriterium zu nehmen. Dann werden aber genau nur die Zeiten angezeigt, welche schon vergeben sind. Aber im Eingabeform brauche ich genau die Anderen...
Gruß Domm
 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 889
Re: Filtern von DS
« Antwort #1 am: Dezember 14, 2017, 11:32:07 »
Abfragen in SQL sind Mengenoperationen.
Freie Zeiten ergeben sich also aus der Menge aller Zeiten (hier alle möglichen Zeiten eines Tages) abzüglich der Menge der vergebenen Zeiten. Technisch wird man das über eine Inkonsistenzabfrage lösen: Datensätze aus A, die nicht in B sind
Mit freundlichem Glück Auf!

Eberhard
 

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Filtern von DS
« Antwort #2 am: Dezember 14, 2017, 13:09:01 »
Bist ein Schatz, Eberhard!!! :-*
Gruß Domm
 

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Filtern von DS
« Antwort #3 am: Dezember 14, 2017, 20:41:47 »
Ach nee, funzt doch noch nicht.
Der Tip von Eberhard war genial, weil er mich zum Abfrageassi zur Inkonsistenzsuche geführt hat.
Jetzt das Ergebnis von [qryzeitenFrei]:
Wenn in der Verknüpfungstab [tabKandKurs] eine der Zeiten eingetragen ist, wird sie in [qryZeitenFrei] sofort gefiltert. Bis jetzt kein Problem.
Aber sobald ich ein weiteres Filterkriterium eingebe, ist die Abfrage leer.
Aber vor der Auswertung von (qryZeitenFrei] muss gefiltert werden, in welcher Woche (Krit 1), an welchem Tag (Krit 2) und in welcher Tabellenposition (Krit 3) die Einträge der Prüfungsstunden enthalten sind. Da ja jede Prüfungsstunde mehrmals in Frage kommt.
Bedeutet, ich muss im ungebundenen HF eine weitere Abfrage erstellen, welche die drei Filter (da sie ja variabel sind) ausführt; und [qryZeitenFrei] muss mit dieser verknüpft werden.
Da es ja offensichtlich nicht in einer qry geht, stellt sich mir die Frage, ob man das Problem in VBA lösen kann.
Zur Erinnerung nochmal die Oberfläche des (ungebundenen) HF. Der obere Teil ist Auswahlbereich (zur Anzeige der gefüllten Tab unten und des (Tages-) Berichtes), der mittlere der Eingabebereich und unten die Auswertung.
Liebe Grüße und Gute Nacht!
Gruß Domm
 

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Filtern von DS
« Antwort #4 am: Dezember 14, 2017, 20:47:25 »
Hab grad noch eine Idee:
Da ja über die Auswahl der Tabellenspalte (links) die jeweilige Abfrage in der Auswertungstabelle angesprochen wird, müsste es doch möglich sein, die [qryZeitenfrei] so zu manipulieren, dass die in [qryZeitenFrei] benötigte zweite Tabelle die Filter der Spaltenabfrage erhält...
War jetzt wahrscheinlich zu breiig...
Gruß Domm
 

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Filtern von DS
« Antwort #5 am: Dezember 14, 2017, 20:55:56 »
Sorry, zu guter Letzt noch die SQL als Bettlektüre:
SELECT tblzeiten.stdbeginn,
       qrykandkomplettunion.stundea,
       qrykandkomplettunion.wochea,
       qrykandkomplettunion.taga,
       qrykandkomplettunion.positiona
FROM   tblzeiten
LEFT JOIN qrykandkomplettunion
        ON tblzeiten.zeitid = qrykandkomplettunion.stundea
WHERE  ( ( ( qrykandkomplettunion.stundea ) IS NULL )
         AND ( ( qrykandkomplettunion.wochea ) = [auswahlwoche] )
         AND ( ( qrykandkomplettunion.taga ) = [auswahltag] )
         AND ( ( qrykandkomplettunion.positiona ) = [auswahlposition] ) ); 
[Edit PhilS: SQL formatiert]
« Letzte Änderung: Dezember 15, 2017, 11:02:06 von PhilS »
Gruß Domm
 

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Filtern von DS
« Antwort #6 am: Dezember 15, 2017, 10:39:30 »
Entschuldigung, dass ich die Zeilenumbrüche in der SQL vergessen habe!
Hätte vielleicht die Vorschau öffnen sollen...
Gruß Domm
 

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Filtern von DS
« Antwort #7 am: Dezember 15, 2017, 13:36:06 »
Ha, mir ist noch etwas eingefallen:
Könnte man die Abfrage, auf deren Basis die Auswertung in den Tabellenspalten (unten) stattfindet, so formatieren, dass das Feld [Stunde] keine Duplikate zulässt?
Dann wäre zumindest als Krückstock zuverlässig die Eingabe gleicher Zeiten verhindert.
Allerdings finde ich weder im Abfrageentwurf noch im Eigenschaftsfenster des textfeldes eine entprechende Möglichkeit.
Schönes WE!
Gruß Domm
 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 889
Re: Filtern von DS
« Antwort #8 am: Dezember 15, 2017, 14:10:01 »
Zitat
Allerdings finde ich weder im Abfrageentwurf noch im Eigenschaftsfenster des textfeldes eine entprechende Möglichkeit.
Ab einem Punkt an muss man programmieren (SQL schreiben) statt nur etwas zusammenzuklicken. Die Assistenten bieten selbstverständlich nur einen Bodensatz von den vorhandenen Möglichkeiten an, schon mal deshalb, weil sie auch von Anfängern und Ahnungslosen bedient werden können sollen.

Zitat
Da es ja offensichtlich nicht in einer qry geht
Woraus entnimmst Du eine Offensichtlichkeit?

Zu Deiner SQL-Anweisung: Ein Nachdenken fällt an der Stelle schwer, weil man nicht um den Inhalt der verwendeten Abfrage weiß. Zudem tue ich mich persönlich schwer damit, vorgegebene Abfragen als gegeben zu nehmen, insbesondere dann, wenn der Fragesteller so seine Problemchen mit Abfragen hat.

Zum Selber-Nachdenken:
WHERE  ( ...
         AND ( ( qrykandkomplettunion.wochea ) = [auswahlwoche] )
         AND ( ( qrykandkomplettunion.taga ) = [auswahltag] )
         AND ( ( qrykandkomplettunion.positiona ) = [auswahlposition] ) );

Es ist ein Unterschied, ob die Filterung der rechten Tabelle vor oder nach der eigentlichen Inkonsistenzprüfung erfolgt. Beschreibe den Unterschied. Tipp: Die Mengenbetrachtung wäre auch hier hilfreich.

Weil ich es gerade so herausgestellt sehe: Eine Woche leitet sich von einem Tag (Datum) ab. Warum filterst Du nach beiden Werten gleichzeitig?
Man kann ja beides irgendwann am Ende der Verarbeitung anzeigen. Wenn man aber beides ohne Not durch eine gesamte Verarbeitung durchschleppt oder gar damit hin- und herrechnet, ist das Ressourcenverschwendung und geht letztendlich zu Lasten der Performance.
"Spannend" wäre es dann, wenn sich diese redundanten Werte widersprechen würden, dass also der betrachtete Tag gar nicht in der betrachteten Woche liegt ... Da läufst Du Amok bei einer Fehlersuche.

Nachtrag: Wenn ich mir das Datenmodell anschaue, bemerke ich, dass Kurse und Zeiten und Wochen jeweils unabhängig voneinander sind. Wenn da in der Praxis etwas mehr stattfindet, kommt man arg ins Schleudern. Nachbessern.
Ehe man Abfragen schreibt, muss das Fundament stimmen. Bei komplexeren Abfragen, in die man dann Aufwand und Zeit hineinsteckt, gilt das erst recht (zumindest wenn man die Zeit anderer beansprucht).
« Letzte Änderung: Dezember 15, 2017, 14:36:21 von ebs17 »
Mit freundlichem Glück Auf!

Eberhard
 

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Filtern von DS
« Antwort #9 am: Dezember 17, 2017, 18:44:55 »
Hallo Eberhard, danke für die vielen Überlegungen zu meinem Gewusel.
Ich versuchs mal, von oben her aufzurollen.
Die Gründe, die Daten nicht zu normalisieren, hatten wir ja in vorangegangene Threads zerpflückt. Also ein Kandidat, zwei Kurse (A und B) und die Prüfungstage (adequat A und B)und Zeiten (auch hier A und B).
Damit sind natürlich auch die Möglichkeiten begrenzt, diese Daten zu verwalten. Oder mit erhöhtem Aufwand. Das war mir von Anfang an klar.

Zitat
Ab einem Punkt an muss man programmieren (SQL schreiben) statt nur etwas zusammenzuklicken.
Die Idee, Duplikate zu verhindern, war eh nur ein Notnagel. Damit hätte man zumindest Eingabefehler vermieden.

Zitat
Woraus entnimmst Du eine Offensichtlichkeit?
Den Abfrageassi hab ich bisher noch nicht genutzt, aber im Fall der Inkosistenz hat er die Zusammenhänge gut dargestellt. Zumal ich nicht mal gewusst hätte, dass es für jede Lösung auch ein Problem gibt. Und er geht ja auch. Allerdings müsste die rechte Abfrage die Filter vor dem Vergleich der DS ausführen. Und da sehe ich die Grenzen, das in einer qry umzusetzen. Das schien offensichtlich.

Zitat
Beschreibe den Unterschied
Wunsch: Zeige die Daten, welche in der Ausgabetabelle in der ausgewählten Spalte stehen und vergleiche die Zeiten mit denen aus der Liste.
Realität: Sehe keine Möglichkeit, die Daten der Ausgabetabelle als Bezug zur Inkonsistenz heranzuziehen

Zitat
Warum filterst Du nach beiden Werten gleichzeitig?
Da beide Prüfungswochen, die in nicht festgelegten Zeiträumen liegen, in einem DS verankert sind, habe ich einfach die Wochentage aus der Woche berechnet. Also [Woche1] [Tag3] ist ein anderes Datum als [Woche2] [Tag3].

Zitat
Wenn ich mir das Datenmodell anschaue,...
Diese! DB sollte nicht als Beispiel für ein Referat benutzt werden. Aber für diesen Einsatzbereich ist sie optimal. Die Vorlage wird jedes Jahr neu befüllt und hat durchaus überschaubare Datenmengen. Der Datenimport ist auch für Access- nichtversteher unproblematisch.
Zitat
Da läufst Du Amok bei einer Fehlersuche
Ca. 100 DS können auch in der Verknüpfungstabelle gut verwaltet werden. Die Performance  ist zu vernachlässigen; selbst die Darstellung von 10 UF mit verschiedenen Filtern wird unproblematisch ausgeführt. Es gibt grundsätzlich nur zwei Kurse, nur zwei Prüfungswochen, nur 5 Schultage, nur soviel Prüfungsräume, wie die Schule hat, nur soviel Prüfungsstunden, wie ein Vor- oder Nachmittag fasst. Also keine Bedenken, dass die Struktur irgendwann gesprengt wird.
Die Empfehlung (ich glaube sogar, von Dir), mal die Grundlagen zu studieren, hat einige Erkenntnisse gebracht, aber diese! DB würde ich so ähnlich wieder konstruieren, da sie ohne große Umwege zum Ziel führt.

Zitat
zumindest wenn man die Zeit anderer beansprucht
Das Argument, welches mir immer noch die meißten Bauchschmerzen macht!
Aber (Und ich hab immer ein ABER im Ärmel): Ich muss die DB nicht bauen. Die Verzeiflung, eine Lösung zu finden, entspringt meinem eigenen Antrieb. Wenn sich niemand findet, der dieses Unding von DB mit aufzurichten hilft, lass ich es bleiben oder probier etwas Neues.
Wenn aber (für mich) verständliche Lösungen angeboten werden, dann katapultiert mich das ins nächste Level.
Als begeisterter Kletterer wage ich einen Vergleich: Wenn ich mit meinen Kameraden unterwegs bin, lass ich mir lieber über eine Schlüsselstelle helfen, als dass ich mir eine andere Wand suche, die meinen Leistungen entspricht. Weil der Erfolg ungleich weiter bringt.
In diesem Sinne, lieber Eberhard- vergeude nicht Deine Zeit an mir. Aber wenn Du kannst, dann hilf mir. Es ist Weihnachten.
Gruß Domm
 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 889
Re: Filtern von DS
« Antwort #10 am: Dezember 17, 2017, 21:09:44 »
Zitat
hatten wir ja in vorangegangene Threads zerpflückt
Hatten WIR das?
Ich sag mal so: Wenn man immer die Wahrheit sagt, braucht man sich nicht merken, was man gesagt hat. Trotzdem käme das das gleiche.
Da ich in der Vergangenheit mehrere Diskussionen geführt habe, habe ich weder Willen noch Vermögen, mir das alles zu merken. Einen ursprünglichen Abfrage-Vorschlag hattest Du für Dich verworfen, Grund genug, mich im folgenden maximal zu Einzelpunkten zu melden und mich bezüglich Gesamtverständnis zurückzuhalten.
Zitat
Und da sehe ich die Grenzen, das in einer qry umzusetzen.
Damit man nicht aneinander vorbeiredet, müsste man definieren, was man unter EINER Abfrage versteht. Siehe Grundlagen - SQL ist leicht (6) - Komplexe Abfragen schreiben und lesen: Wenn in eine Abfrage einige Unterabfragen eingeschachtelt sind, bleibt das für mich eine Abfrage. Da eine Abfrage eigentlich nur die Definition ist, wie Daten aus Tabellen abzurufen und zu verarbeiten sind und somit eine Abfrage, die auch gespeicherte Abfragen verwendet und also im Rahmen der eigenen Ausführung auch diese anderen ausführen muss, ist auch das so gesehen eine Abfrage, wie man auch die SQL-Definitionen  der gespeicherten Abfragen in die Definition der eigenen Hauptabfrage einbetten kann.

Zitat
Aber wenn Du kannst, dann hilf mir.
In Antwort #3 und folgenden fehlen in meinem Verständnis hinreichende Informationen, die es erlauben, unmittelbar und direkt zu antworten.
Streiche mal Dein Wissen um diese DB und und lass Dir dann von Dir diese Fragen stellen.
Mit freundlichem Glück Auf!

Eberhard
 

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Filtern von DS
« Antwort #11 am: Dezember 18, 2017, 09:21:45 »
Eberhard, ich wollte Dich nicht verärgern!
Um wieder den Faden aufzunehmen, bitte ich vorher um Verständnis für meine Ansichten.
Ich distanziere mich von dem, was ich nicht verstehe. Das ist wichtig um neutral zu sein und das zu verteidigen, was ich mache. Dass ich damit schnell an meine Grenzen stoße, weiß ich selbst.
Eure Bemühungen, mich mit den Grundlagen von Access vertraut zu machen, weiß ich auch zu schätzen. Leider kann ich oft dem schlichtweg nicht folgen, was ihr als Lösung anbietet. Deshalb greife ich diese Vorschläge manchmal nicht auf.
Deinen Vorschlag, mich in SQL einzulesen, folge ich wiederum gern. Vielleicht gibts da neue Erkenntnisse, die mich weiterbringen.
Bis dahin alles Gute!
Gruß Domm
 

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Filtern von DS
« Antwort #12 am: Dezember 18, 2017, 14:26:15 »
Hallo Eberhard, jetzt bin ich es nochmal.
Die Abfrage funktioniert jetzt- es werden nur die Zeiten angezeigt, welche in der Spalte der Ausgabetab noch nicht vergeben sind.
Allerdings brauche ich dazu insgesamt drei Abfragen:
Setze in einer UnionQry die Zeiten [StundeA] und [StundeB] in eine Spalte.
Mit dieser Datensatzherkunft filtere nach [AuswahlWoche],[AuswahlTag],[AuswahlTageszeit],[AuswahlSpalte].
Diese Abfrage zur Inkonsistenzsuche.

Jetzt habe ich im MS Office Forum Deinen Beitrag gelesen, der komplexe Abfragen behandelt.
Aber wie ich es auch zusammenpappe, es geht nix.
Und mittlerweile ist es selbst Dir aufgegangen: Ich habe keine Ahnung!
Wenns Dir nicht zu schade um Deine Zeit ist, würde ich Dich bitten, mir die Nahtstellen dieser HauptQry mit UnterQry mit UnterQry zu erklären.
Wenn doch, dann lass ich die einzelnen Abfragen halt stehen. Das ist (für mich) auch kein Problem.

Abfrage1:
SELECT
WocheA, TagA, TageszeitA, StundeA, PositionA
FROM
tblKandKurs
UNION ALL SELECT
WocheB, TagB, TageszeitB, StundeB, PositionB
FROM
tblKandKurs;

Abfrage2:
SELECT qry1Uq1ZeitenFrei.WocheA, qry1Uq1ZeitenFrei.TagA, qry1Uq1ZeitenFrei.TageszeitA, _
qry1Uq1ZeitenFrei.PositionA, qry1Uq1ZeitenFrei.StundeA, qry1Uq1ZeitenFrei.ZimmerA _
FROM qry1Uq1ZeitenFrei
WHERE (((qry1Uq1ZeitenFrei.WocheA)=[AuswahlWoche]) AND ((qry1Uq1ZeitenFrei.TagA)=[AuswahlTag]) _
AND ((qry1Uq1ZeitenFrei.TageszeitA)=[AuswahlTageszeit]) AND ((qry1Uq1ZeitenFrei.PositionA)=[listePosition])) _
ORDER BY qry1Uq1ZeitenFrei.StundeA;

Abfrage3:
SELECT tblZeiten.StdBeginn
FROM tblZeiten LEFT JOIN qry1Uq2ZeitenFrei ON tblZeiten.ZeitID = qry1Uq2ZeitenFrei.StundeA
WHERE (((qry1Uq2ZeitenFrei.StundeA) Is Null));
Gruß Domm
 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 889
Re: Filtern von DS
« Antwort #13 am: Dezember 18, 2017, 16:28:52 »
Zusammenfügen bzw. zusammenkopieren am Beispiel von Abfrage 2:
Das ist die Stelle (eine Abarbeitung einer Abfrage beginnt im FROM-Teil):
Zitat
FROM qry1Uq1ZeitenFrei

Jetzt hat die genannte Abfrage selber eine SQL-Anweisung als Definition. Vorbereitung:
Zitat
FROM (...) AS qry1Uq1ZeitenFrei
Die Punkte ersetzt man nun durch die vollständige SQL-Anweisung von qry1Uq1ZeitenFrei (schlichtes Copy&Paste). Die Bezeichnung qry1Uq1ZeitenFrei ist hier nun ein Tabellenalias, in Unterscheidung zum Namen einer gespeicherten Abfrage.
Ein Tabellenalias wirkt nicht nach außen. Da kann und wird man eine kurze Bezeichnung für die interne Identifikation bevorzugen.

Das war es.
Hervorheben sollte man, dass die Anweisung durch die Schachtelung und damit durch mehrfaches Auftreten von FROM und WHERE (als Fixpunkte beim Lesen einer SQL-Anweisung) recht unübersichtlich werden könnte, wenn man die Anweisung nicht formatiert.
Mit Formatierung hat man aber den Überblick über alles, was in der Abfrage passiert, was einem u.a. dabei hilft, überflüssige Felder oder wirkungslose Sortierungen zu finden und herauszunehmen.
Mit freundlichem Glück Auf!

Eberhard
 

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Filtern von DS
« Antwort #14 am: Dezember 18, 2017, 18:56:57 »
Eberhard, Du machst Weihnachten zu dem, was es mal werden sollte!
Gruß Domm