Formular gemäß einer übergeordneten Tabelle filtern.

18/08/2009 - 18:49 von Christian | Report spam
Hallo,

in einer Access-2003-kompatiblen MDB-Datei gibt es mehrere Tabellen,
die hiearchisch über 1:n-Beziehungen verknüpft sind.

Beispiel (stark vereinfacht):
- Tabelle 1: Kunden
- Tabelle 2: Regale (ein Regal ist jeweils komplett einem Kunden
zugeordnet)
- Tabelle 3: Aktenordner
- Tabelle 4: Dokumente

Für jede Tabelle habe ich ein Formular, um die Daten der
entsprechenden Tabelle àndern oder neue Datensàtze hinzufügen zu
können.

Beim Formular für Tabelle 2 gibt es eine Kombobox, die die Kunden-IDs
und -namen enthàlt, so kann man leicht durch Auswahl des
entsprechenden Namens, die Kunden-ID für den aktuellen Regal-Datensatz
setzen.

Nun wird gewünscht, dass die Formulare 3 und 4 jeweils nach einem
Kunden gefiltert werden können. Motivation dafür ist, dass die
Gesamtmenge an Regalen bzw. Aktenordnern sehr groß ist.

Der Benutzer möchte also einen Aktenordner hinzufügen. Er kennt den
Kunden, zu dem der Aktenordner gehört. Anstatt jetzt aus einer Flut
von Regalen, von denen der Benutzer nicht weiß, welchem Kunden sie
gehören, auswàhlen zu müssen, wàre es schön, wenn ihm sowieso nur die
Regale eines bestimmten Kunden angezeigt werden.

Doch die Kunden-ID steht in der Tabelle der Aktenordner nicht drin,
sondern nur in der Tabelle der Regale. Ich muss also die Regale nach
Kundenfiltern, die Regal-IDs irgendwie merken, und dann die
Aktenordner filtern (alle Aktenordner mit Regal-IDs aus der gemerkten
Liste)

Ich kann eine Abfrage schreiben, die im Hintergrund die Regal-IDs
eines bestimmten Kunden auflistet, doch wie filtere ich die Tabelle
der Aktenordner dann.

Wenn ich eine verknüpfte SQL-Abfrage über mehrere Tabellen direkt als
Datenquelle für das Formular angebe, kann ich keine Daten àndern und
keine Datensàtze hinzufügen. So geht es also nicht.

Ich könnte die Abfrage nur über die Aktenordner laufen lassen, aber
mit "WHERE Regal-ID IN (...)" arbeiten, aber das führte bosher nicht
zum Erfolg.

Ebenso könnte ich die WHERE-Klausel in die Filter-Eigenschaft des
Formulars schreiben. Aber auch das brachte keinen Erfolg.

Welches ist denn da überhaupt der bessere Ansatz:
- Eine Abfrage zu erstellen, die irgendetwas vorverdaut, und dann
diese Abfrage in dem Formular irgendwie zu benutzen?
- Als Datenquelle direkt eine SQL-Abfrage zu verwenden, die das
gewünschte realisiert?
- Mit der Filter-Eigenschaft zu arbeiten?

Ich wàre für einen Hinweis oder ein Beispiel sehr dankbar.

Viele Grüße,

Christian Kirchhoff
 

Lesen sie die antworten

#1 Thomas Möller
18/08/2009 - 19:58 | Warnen spam
Hallo Christian,

Christian schrieb:
in einer Access-2003-kompatiblen MDB-Datei gibt es mehrere Tabellen,
die hiearchisch über 1:n-Beziehungen verknüpft sind.

Beispiel (stark vereinfacht):
- Tabelle 1: Kunden
- Tabelle 2: Regale (ein Regal ist jeweils komplett einem Kunden
zugeordnet)
- Tabelle 3: Aktenordner
- Tabelle 4: Dokumente

Für jede Tabelle habe ich ein Formular, um die Daten der
entsprechenden Tabelle àndern oder neue Datensàtze hinzufügen zu
können.

Beim Formular für Tabelle 2 gibt es eine Kombobox, die die Kunden-IDs
und -namen enthàlt, so kann man leicht durch Auswahl des
entsprechenden Namens, die Kunden-ID für den aktuellen Regal-Datensatz
setzen.

Nun wird gewünscht, dass die Formulare 3 und 4 jeweils nach einem
Kunden gefiltert werden können. Motivation dafür ist, dass die
Gesamtmenge an Regalen bzw. Aktenordnern sehr groß ist.

Der Benutzer möchte also einen Aktenordner hinzufügen. Er kennt den
Kunden, zu dem der Aktenordner gehört. Anstatt jetzt aus einer Flut
von Regalen, von denen der Benutzer nicht weiß, welchem Kunden sie
gehören, auswàhlen zu müssen, wàre es schön, wenn ihm sowieso nur die
Regale eines bestimmten Kunden angezeigt werden.

Doch die Kunden-ID steht in der Tabelle der Aktenordner nicht drin,
sondern nur in der Tabelle der Regale. Ich muss also die Regale nach
Kundenfiltern, die Regal-IDs irgendwie merken, und dann die
Aktenordner filtern (alle Aktenordner mit Regal-IDs aus der gemerkten
Liste)

Ich kann eine Abfrage schreiben, die im Hintergrund die Regal-IDs
eines bestimmten Kunden auflistet, doch wie filtere ich die Tabelle
der Aktenordner dann.

Wenn ich eine verknüpfte SQL-Abfrage über mehrere Tabellen direkt als
Datenquelle für das Formular angebe, kann ich keine Daten àndern und
keine Datensàtze hinzufügen. So geht es also nicht.

Ich könnte die Abfrage nur über die Aktenordner laufen lassen, aber
mit "WHERE Regal-ID IN (...)" arbeiten, aber das führte bosher nicht
zum Erfolg.

Ebenso könnte ich die WHERE-Klausel in die Filter-Eigenschaft des
Formulars schreiben. Aber auch das brachte keinen Erfolg.

Welches ist denn da überhaupt der bessere Ansatz:
- Eine Abfrage zu erstellen, die irgendetwas vorverdaut, und dann
diese Abfrage in dem Formular irgendwie zu benutzen?
- Als Datenquelle direkt eine SQL-Abfrage zu verwenden, die das
gewünschte realisiert?
- Mit der Filter-Eigenschaft zu arbeiten?

Ich wàre für einen Hinweis oder ein Beispiel sehr dankbar.



wenn ich Dein Datenmodell richtig verstanden habe, dann solltest Du
Deine Aufgabe am einfachsten über eine Abfrage lösen können. Dazu
erstellst Du einfach eine neue, leere Abfrage. In diese Abfrage fügst Du
dann die Tabellen Kunden, Regale und Aktenordner ein. Wenn die Tabellen
entsprechend verknüpft sind, erscheinen gleich hier im Abfrageentwurf
die entsprechenden Beziehungslinien. Ansonsten musst Du die Tabellen
selber über die relevanten Felder verknüpfen. Jetzt fügst Du die
gewünschten Felder aus der Tabelle Aktenordner hinzu. Danach fügst Du
das ID-Feld aus der Kunden-Tabelle hinzu und tràgst als Kriterium
folgendes ein:

[Bitte Kunden-ID eingeben:]


Wenn Du die Abfrage jetzt öffnest erscheint ein Dialog, der Dich
auffordert, die gewünschte KundenID zu erfassen. Wenn dies geschehen
ist, werden Dir alle Aktenordner zu dieser Kunden-ID angezeigt. Diese
Abfrage kannst Du als Basis für ein Formular verwenden. Als Kriterium
kannst Du natürlich auch auf ein Feld im Kopfbereichs dieses Formulars
verweisen in dem Du die Kunde-ID auswàhlen làsst.


HTH
Thomas

Homepage: www.Team-Moeller.de

Ähnliche fragen