Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: datekk am März 04, 2013, 17:16:42

Titel: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 04, 2013, 17:16:42
Hallo :)

Ich habe folgende Frage zu Access 2010:

Ich habe folgenden Tabellenkopf:

Kunde; Jan.; Feb.; März; Apr.; Mai bis Dezember

Die Spalten Januar bis Dezember enthalten jeweils ein Häckchen feld welches zeigt, in welchem Monat ein Kunde aktiv wird. Die Daten werden also wie folgt erfasst:

A; x;;;x;;;x
B; x;x;;x;x

Wie schaffe ich es nun, über ein Formular die Kunden in einer Tabelle anzeigen zu lassen, welche z.B. im Februar aktiv sind, welche also im Februar ein häckchen haben. Dabei soll es keine Rolle spielen, ob sie z.B. im Mai auch aktiv sind. Es müsste auch so funktionieren, dass die Tabelle anzeigen soll, welche Kunden u.a. im Februar und im März ein Häckchen haben.

Bisher habe ich es wie folgt versucht:
In einem neuen Formular habe ich für jeden Monat ein Kontrollkästchen Feld eingerichtet, in dem ich die Monate anhaken kann, welche mir später angezeigt werden sollen. Über die o.g. Tabelle habe ich eine Abfrage eingerichtet und in den Eigenschaften in jede Spalte von Jan. bis Dez. dann z.B. [Formulare]![NEU_Formular]![Kont_Jan] als Kriterium eingefügt.

Das funktioniert aber nicht so richtig.

Es sollte einfach so funktionieren, als ob ich in einer Spalte der Abfrage, z.B. im Februar und März einen Filter setze und die anzeigt bekomme, die ein aktiviertes Häkchen in diesen Monaten haben. Dabei sollen aber nicht die Kunden ausgeschlossen werden, die z.B. nur im Februar ein Häkchen haben und keines im März haben.

Nochmal ein Beispiel:

Kunde A hat Häckchen bei Februar, März, Mai, Juni, August, September, November, Dezember
Kunde B hat Häckchen bei Februar, Mai, August, November
Kunde C hat Häckchen bei Januar, April, Juli, Oktober

nun möchte ich selektieren nach Juli und August und müsste folgende Ausgabe erhalten:

Kunde A
Kunde B
Kunde C

oder Februar:

Kunde A
Kunde B

Wie wirds gemacht? Würde mich über Vorschläge freuen.
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: MzKlMu am März 04, 2013, 18:14:17
Hallo,
die Grundstruktur ist bereits falsch. Das ist eine n:m Beziehung zwischen Kunde und Monat.
Hierzu sind 3 Tabellen notwendig.

- Kunden
- Monate (einfach als Zahl 1-12)
- Zuordnung Kunde zu Monat

In der 3- Tabelle wird nur die KundenID und die Monatszahl gespeichert in der der Kund aktiv ist.
Hat der Kunde 3 Monate, dann sind das 3 Datensätze.

So sieht das aus:

KundeID         Monat
   1             1
   1             3
   1             5
   2             2
   2             6
   2             9


Dein Wunsch lässt sich dann völlig problemlos realisieren.
In einer Abfrage den Monat 3 als Kriterium und Du hast alle Kunden des Monats 3.

Mit Deinem jetzigen Aufbau kommt Access nicht zurecht, da das nicht datenbankkonform ist.
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 04, 2013, 18:27:06
Alles klar.. So hatte ich es bereits, fand es aber ziemlich umständlich. Schade, dass dieser Weg nicht funktioniert.
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: MzKlMu am März 04, 2013, 18:32:54
Hallo,
der andere Weg ist der Umständliche. Du hast einen enormen Aufwand zur Auswertung und langsam wäre diese auch.
Lege ein Formular für den Kunden an und darin ein Unterformular mit der Zuordnungstabelle.
Und statt Haken trägst Du einfach die Monatszahl ein, die weis man ja auswendig.
Die KundenID wird bei einem verknüpften Unterformular automatisch übertragen.
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 04, 2013, 18:50:15
OK, bin nun wieder bei der alten Methode. Das Formular sieht nun so aus, dass ich oben ein Kombinationsfeld habe, welches die Monate von Januar bis Dezember aus der Tabelle "Monatsdaten" abruft. Nach der Auswahl wird eine Anfrage aktiviert, welche die Ergebnisse liefert.

Ein anderes Formular soll mir Konkret einen Kunden und seine Monate anzeigen. Auch hier gibt es oben wieder ein Kombinationsfeld, in dem ich den Kunden auswäheln kann. Auch hier wird wieder eine Anfrage aktualisiert und das Ergebnis gezeigt.

Ist allerdings für diesen Kunden noch keine Monatsübersicht erfasst bleiben alle Felder leer und ich kann neue Daten erfassen. Hier ist es allerdings so, dass ich jedes Mal bei einem neuen Datensatz wieder den Kundennamen erfassen muss. Die Daten sind zwar bereits in einer Liste zum auswählen, aber kann das nicht automatisch gleich den Kunden aus dem obigen Kombinationsfeld übernehmen? Es könnte sonst zu fehleingaben kommen...???
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: MzKlMu am März 04, 2013, 18:53:04
Hallo,
baue das wie vorgeschlagen mit Hafo und Ufo auf, dann wird die KundenID automatisch übernommen.

Wenn Du nicht klar kommst, beschreibe mal die 3 Tabellen und die relevanten Felder.
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 04, 2013, 19:02:13
Nein, leider Steht bei ID immer nur "(Neu)". Kann man das einstellen, dass der neue Datensatz die ID der Auswahl des Kombinationsfeldes übernimmt und man sich somit auf die Auswahl der Monate beschränken kann?
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: MzKlMu am März 04, 2013, 19:34:54
Hallo,
und warum ignorierst Du völlig meine Hinweise auf Hafo und Ufo?

Im Anhang ein einfaches Beispiel. Im Kombi kannst Du den Monat auswählen oder die Zahl eintragen.
Öffne einfach das Formular "Formular1".
Schaue Dir auch die Beziehungen im Beziehungsfenster an.

[Anhang gelöscht durch Administrator]
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 05, 2013, 09:41:43
Also vielen Dank für die Hilfe... Ich versuche das nun mit dem UFO, aber wie kann ich das UFO an das Kombifeld binden? Es gelingt mir nicht... Im Kobifeld steht in der Layoutansicht immer ungebunden. Wenn ich das Feld "ID" im UFO an das Kombinationsfeld binde, so wird die Auswahl aus dem Kombifeld zwar in das ID Feld übernommen, das wars aber auch. Der entsprechende Datensatz wird nicht aufgerufen.

Wie funktioniert also die Bindung zwischen dem Kombinationsfeld im HFO mit den Datensätzen im UFO?

Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: MzKlMu am März 05, 2013, 09:49:40
Hallo,
das Kombi dient nur dem Suchen und muss ungebunden sein.
Das Kombi sucht den Datensatz und stellt diesen dar. Die Verbindung erfolgt über die Verknüpfung von Hafo und Ufo, nicht über das Kombi.
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 05, 2013, 09:59:39
Ja, aber wie schaffe ich es, dass das Kombi den Datensatz sucht?
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: MzKlMu am März 05, 2013, 10:24:52
Hallo,
ZitatJa, aber wie schaffe ich es, dass das Kombi den Datensatz sucht?
Ist doch drin in meinem Beispiel, schaue es Dir an.
Das ist mit etwas VBA Code gelöst.
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 05, 2013, 10:44:08
Ja und wo genau wurde VBA genutz? Ich finde es nicht....
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 05, 2013, 10:46:28
Ahhh ich habs.... Nun, mit VBA kenne ich mich gar nicht aus... Das lässt sich nicht anders lösen?
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: MzKlMu am März 05, 2013, 10:50:26
Hallo,
lass das Kombi weg, dann kannst Du einfach durch die Kunden blättern, das geht auch, wenn es nicht zu viele Kunden sind.
Ein Kombi zum Suchen geht nicht ohne VBA.
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 05, 2013, 11:20:44
Ok, übertragen auf meine Tabelle erhalte ich nun folgende Fehlermeldung:

Laufzeitfehler 91
Objektvariable oder With-Blockvariable nicht festgestellt.

Beim Klick auf Debuggen zeigt er einen gelben Feil auf die Zeile

  Set rs = Me.Recordset.Clone

Hier der auf meine Felder angepasste VBA Text:

Option Compare Database
Option Explicit

Private Sub Medienwahlfeld_AfterUpdate()
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
    Dim rs As Object

    Set rs = Me.Recordset.Clone
    rs.FindFirst "[ID_Medien_Auflagen] = " & Me![Medienwahlfeld]
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Private Sub Form_Current()
    Me.Medienwahlfeld = Me.ID_Medien_Auflagen
End Sub
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: MzKlMu am März 05, 2013, 11:41:55
Hallo,
wie ist die Datensatzherkunft des Kombis (Spaltenreihenfolge)?
Wie sind die Eigenschaften des Kombis eingestellt?
Spaltenzahl, Spaltenbreiten, gebundene Spalte ?

Wenn Du nicht klar kommst, lade die DB hoch, anonymisiert, komprimiert und gezippt.
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 05, 2013, 11:58:27
Kombi ist eingestellt auf Datensatzherkunft aus einer Tabelle aus den Spalten ID und Name. Spaltenbreite 1=0cm, 2=2cm

Es ist eigenlich genau so eingestellt wie bei Dir.

Wo kann denn der Fehler genau bei dieser Zeile sein?

Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 05, 2013, 12:10:48
Ich habe jetzt meine Datenbank bereinigt und gezipt zur weiteren Fehlersuche...

Hier meine Datenbank.

[Anhang gelöscht durch Administrator]
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: MzKlMu am März 05, 2013, 12:35:37
Hallo,
das entspricht nicht meinem Beispiel, das Hafo muss an die entsprechende Tabelel gebunden sein. Ohne Felder kannst Du ja nichts ´suchen. Und wenn das Formaular keine Datenherkunft (Recordset) hat, kannst Du auch kein Clon erzeugen.
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 05, 2013, 13:22:38
Dann schreib mir doch, wie ich die Bindung erzeugen kann. Wie muß ich nun vorgehen?
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: MzKlMu am März 05, 2013, 13:34:05
Hallo,
anbei die geänderte DB.
- Das Hafo muss gebunden sein an die Tabelle "Medien_und_Auflagen"
- Die Felder der Tabelle "Medien_und_Auflagen" gehören in das Hafo und nicht in das Ufo
- Hafo und Ufo müssen über die Schlüsselfelder verknüpft sein.

Nebenbei:
Entferne die Nachschlagefelder in den Tabellen direkt, die sind von Übel und verhindern den sauberen Aufbau einer DB. Nachschlagefelder sind nur in Formularen als Kombifelder sinnvoll.
Nenne ID Felder nicht einfach ID, sondern mit einem bezug zur Tabelle
Fremdschlüsselfelder sollte mit einem Anhängsel (_F) gekennzeichnet sein.

Vorstehende Ratschläge habe ich nicht umgesetzt, solltest Du noch dringend machen.

Zu den Nachschlagefeldern:
http://dbwiki.net/wiki/Access_Anf%C3%A4nger:_Die_Nachteile_von_Nachschlagefeldern (http://dbwiki.net/wiki/Access_Anf%C3%A4nger:_Die_Nachteile_von_Nachschlagefeldern)

[Anhang gelöscht durch Administrator]
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 05, 2013, 13:45:07
Sauber.. vielen Dank.. Ich verstehe nun, woran es gelegen hat... Das ist doch schon mal was.

Welche Alternative gibt es zu den Nachschlagefeldern? Wie kann man das stattdessen einrichten, dass in einer Tabelle nur bestimmte Optionen wählbar sind? Oder macht man das alles nur über Formulare?
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: MzKlMu am März 05, 2013, 13:48:05
Hallo,
ZitatOder macht man das alles nur über Formulare?
In Formularen kannst Du diese bedenkenlos verwenden, nur in Formularen.
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 05, 2013, 14:16:29
Ok, wenn ich diese in den Formularen verwende, speicher ich dann z. B. in einer Preisliste das Produkt als ID oder als Text?

Also Beispielsweise

Tabelle Preisliste
Produkte| Preis
Produkt1| 1000 Euro

Oder
1            | 1000 Euro

Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: MzKlMu am März 05, 2013, 14:27:09
Hallo,
es wird grunsätzlich nur die ID gespeichert, als Fremdschlüssel, niemals der Text. Der Text wird in einem Kombi angezeigt.
2 Spalten für das Kombi, Spalte 1 die ID, Spalte2 der Text.
Gebundene Spalte = die ID
Spaltenbreiten: 0cm:5cm. Daurch wird die ID ausgeblendet, aber der Text angezeigt. Gespeichert wird die ID.
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 05, 2013, 14:42:25
Genau... Super vielen Dank für Deine tolle Hilfe... Ich denke, jetzt komme ich ein ganzes Stück weiter. Ich habe ein bischen damit rumprobiert und komme ganz gut zurecht. Also nochmals 1000 Dank :)
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 05, 2013, 15:07:02
Eine Frage habe ich dann aber doch noch:

Wenn man dann z.B. in einer Preisliste nur noch die ID´s gespeichert hat, wie kann man dann aus diesem Zahlenchaos einen vernünftigen Bericht erstellen, in dem dann wieder der Text erscheint?
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: MzKlMu am März 05, 2013, 15:16:22
Hallo,
na über eine Abfrage mit den beteiligten Tabellen und der Beziehung über die Schlüsselfelder. Dann hast Du automatisch auch die Klartexte zur Anzeige. Das ist alles ganz einfach, ohne etwas programmieren zu müssen.

Übrigens. die ID eines Datensatzes ist im Regelfall nie zu sehen, die wird immer ausgeblendet. Diese dient ausschließlich der Herstellung der Beziehungen und ist für den User völlig bedeutungslos. Von Besonderheiten abgesehen, wie z.B. die Monatstabelle da würde man die Zahl ggf. auch zeigen, weil diese ja auch den Monat darstellt.

Bei der Gelegenheit, der Monatsname ist in Deiner Tabelle "Monatsdaten" auch überflüssig, aus der Zahl erhält man in einer Abfrage auch den Monat, automatisch.
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: datekk am März 05, 2013, 16:34:50
Es ergibt sich wieder eine Frage:

wie kann ich Abfragen mit dem Formular verknüpfen, so dass die Suche genau so mit dem Kombifeld funktioniert wie wenn das Formular mit einer Tabelle verknüpft ist?
Titel: Re: Spalten sortieren nach Abfrage über Felder
Beitrag von: MzKlMu am März 05, 2013, 16:46:20
Hallo,
erstelle eine Abfrage wie Du diese brauchst und speichere diese mit einem Namen ab. Für das Formular verwendest Du die Abfrage statt der Tabelle. Dem Formular ist egal ob Abfrage oder Tabelle, es müssen nur alle Formularfelder auch in der Abfrage sein.