Formular mit Summen-feldern

Ich habe in ACCESS 2003 folgendes Problem:

Eine Tabelle „Vorgang“ mit ID und vielen weiteren Feldern.
Eine Tabelle „Fragen“ mit ID des Vorgangs und weiteren Feldern.
Also zu einem Vorgang gibt es ggf. mehrere Fragen (1:n).

Die Tabellen sind zu umfangreich, um die Fragen als UFO im Vorgang darzustellen.
Ich will daher im Formular für den Vorgang die Anzahl der Fragen anzeigen und zwar so, dass auch ein formularbasierter Filter einsetzbar ist.

Ich habe eine Abfrage auf „Fragen“, gruppiert über die ID des Vorgangs.
Eine zweite Abfrage führt alle Felder des „Vorgangs“ mit der ersten Abfrage zusammen (1:1).

Im Formular auf die zweite Abfrage wird alles dargestellt, wie ich mir das vorstelle, incl. Filtermöglichkeit.

Sobald ich aber die gruppierten Felder einbinde, lassen sich die Werte nicht mehr editieren.

Auch die direkte Abfrage auf „Vorgang“ und „Frage“ mit Gruppierung hilft nicht weiter.

Ist dies mit ACCESS 2003 lösbar?

Gruß
Martin

Hallo,

nein… Felder in gruppierenden Abfragen sind grundsätzlich nicht editierbar.

Die Tabellen sind zu umfangreich, um die Fragen als UFO im Vorgang darzustellen.

Warum ALLE Fragen? Stelle doch einfach nur die Fragen dar, die zum Vorgang, der im Hauptform akt. angezeigt wird, zugeordnet sind.

Für was brauchst Du den Formaularbasierten Filter?

Gruß
Franz, DF6GL

Moin Moin,

Die Tabellen sind zu umfangreich, um die Fragen als UFO im
Vorgang darzustellen.

das verstehe ich nicht! Du kannst doch eine Endlosformular als UFO verwenden und dann ist es egal ob 10 oder 1000 Fragen vorkommen.

Ich will daher im Formular für den Vorgang die Anzahl der
Fragen anzeigen

nutze die Funktion DCount um die Anzahl zu ermitteln. Den Rückgabewert kannst du dann in ein Feld speichern bzw. anzeigen lassen. Allerdings erschließt sich mir der Sinn nicht.

und zwar so, dass auch ein formularbasierter Filter einsetzbar ist.

nein, sowas macht man nicht. Erst Recht nicht mit einem Endlosformular.
Jedes Formular hat einen Kopf- und Fußbereich. Nutze diesen für Such- und/oder Filterfelder wo du die Bedingung abfragst.

Ich habe eine Abfrage auf „Fragen“, gruppiert über die ID des
Vorgangs.
Eine zweite Abfrage führt alle Felder des „Vorgangs“ mit der
ersten Abfrage zusammen (1:1).

keine Ahnung warum und wieso, es hört sich auf jeden Fall falsch an.

Im Formular auf die zweite Abfrage wird alles dargestellt, wie
ich mir das vorstelle, incl. Filtermöglichkeit.

hmm, ok

Sobald ich aber die gruppierten Felder einbinde, lassen sich
die Werte nicht mehr editieren.

logisch, siehe Antwort vom Franz

Ist dies mit ACCESS 2003 lösbar?

ein paar Hintergrundinformationen wären hilfreich um dir den richtigen Weg zu zeigen.

Grüße aus Rostock
Wolfgang
(Netwolf)

Die Darstellung der Fragen im Formular ist nicht das Problem. Beide Tabellen haben viele Felder. Um alle Felder aus Frage darstellen zu können reicht der Platz nicht aus. Ich habe in einem UFO bereits die wichtigen Felder zum entsprechenden Vorgang dargestellt. Alles Ok.

Wie kann ich aber einen Filter formulieren, der mir Vorgänge filtert, die einen bestimmten Typ haben, einen bestimmten Ort, …, und zu dem es mehr als 5 Fragen gibt, die noch nicht alle beantwortet sind?

Gruß
Martin

Moin Moin,

Die Tabellen sind zu umfangreich, um die Fragen als UFO im
Vorgang darzustellen.

das verstehe ich nicht! Du kannst doch eine Endlosformular als
UFO verwenden und dann ist es egal ob 10 oder 1000 Fragen
vorkommen.

Ja, ist korrekt, nicht die Anzahl der Fragen ist das Problem, sondern die Anzahl der Felder. Aber die Darstellung der Fragen im Formular ist unkritisch.

Ich will daher im Formular für den Vorgang die Anzahl der
Fragen anzeigen

nutze die Funktion DCount um die Anzahl zu ermitteln. Den
Rückgabewert kannst du dann in ein Feld speichern bzw.
anzeigen lassen. Allerdings erschließt sich mir der Sinn
nicht.

Dcount ist zu langsam, und kann nicht für den Filter benutzt werden.

und zwar so, dass auch ein formularbasierter Filter einsetzbar ist.

nein, sowas macht man nicht. Erst Recht nicht mit einem
Endlosformular.
Jedes Formular hat einen Kopf- und Fußbereich. Nutze diesen
für Such- und/oder Filterfelder wo du die Bedingung abfragst.

Der Vorteil des Formulars (aus Sicht des Anwenders) ist, dass er formularbasiert nach unterschiedlichsten Kriterien filtern kann.

Ich habe eine Abfrage auf „Fragen“, gruppiert über die ID des
Vorgangs.
Eine zweite Abfrage führt alle Felder des „Vorgangs“ mit der
ersten Abfrage zusammen (1:1).

keine Ahnung warum und wieso, es hört sich auf jeden Fall
falsch an.

Die erste Abfrage liefert genau die Ergebnisse, die ich brauche, nämlich die Anzahl der Fragen, die Anzahl der offen Fragen, … zu jedem Vorgang.

Im Formular auf die zweite Abfrage wird alles dargestellt, wie
ich mir das vorstelle, incl. Filtermöglichkeit.

hmm, ok

Sobald ich aber die gruppierten Felder einbinde, lassen sich
die Werte nicht mehr editieren.

logisch, siehe Antwort vom Franz

Ist dies mit ACCESS 2003 lösbar?

ein paar Hintergrundinformationen wären hilfreich um dir den
richtigen Weg zu zeigen.

Grüße aus Rostock
Wolfgang
(Netwolf)

Ich möchte einen Filter formulieren, der alle Vorgänge einer bestimmten Art, eines bestimmten Ortes, …, mit mehr als 5 Fragen, die noch nicht alle beantwortet sind filtert.

Gruß
Martin

Moin Moin,

Die erste Abfrage liefert genau die Ergebnisse, die ich
brauche, nämlich die Anzahl der Fragen, die Anzahl der offen
Fragen, … zu jedem Vorgang.

kannst du mal den SQL-String hier posten?

Im Formular auf die zweite Abfrage wird alles dargestellt, wie
ich mir das vorstelle, incl. Filtermöglichkeit.

ok, d.h. dir fehlt das Editieren?

Ich möchte einen Filter formulieren, der alle Vorgänge einer
bestimmten Art, eines bestimmten Ortes, …, mit mehr als 5
Fragen, die noch nicht alle beantwortet sind filtert.

d.h. du nutzt als Datenquelle für dein UFO eine entsprechende Abfrage.
Da diese Abfrage Summenfelder beinhaltet, ist ein editieren nicht möglich. Eine alternative Nutzung von Dcount ist dir zu langsam.

Da sehe ich nur die Möglichkeit ein extra Hauptformular zum Editieren mit den Daten des gewählten Datensatzes zu öffnen.

Grüße aus Rostock
Wolfgang
(Netwolf)

Moin Moin,

Die erste Abfrage liefert genau die Ergebnisse, die ich
brauche, nämlich die Anzahl der Fragen, die Anzahl der offen
Fragen, … zu jedem Vorgang.

kannst du mal den SQL-String hier posten?

Hier die Abfrage:
SELECT Fortführung.Lfd_Nummer,
Count(Rückfragen.Frage) AS Anz_RÜ,
Count(Rückfragen.Frage)-Count(Rückfragen.gestellt_am) AS Anz_nicht_gestellt,
Count(Rückfragen.gestellt_am)-Count(Rückfragen.beantwortet_am) AS Anz_RÜ_offen,
Count(Rückfragen.beantwortet_am)-Count(Rückfragen.erledigt_am) AS Anz_bearb_offen
FROM Rückfragen
RIGHT JOIN Fortführung ON Rückfragen.EASY_Nummer=Fortführung.Lfd_Nummer
GROUP BY Fortführung.Lfd_Nummer;

Der RIGHT JOIN wird nur benötigt um auch Datensätze zu integrieren, zu denen keine Rückfragen gstellt wurden.

Da diese Abfrage Summenfelder beinhaltet, ist ein editieren
nicht möglich. Eine alternative Nutzung von Dcount ist dir zu
langsam.

Könnte ich denn auf Dcount Felder filtern? Soweit ich weiss nicht.

Da sehe ich nur die Möglichkeit ein extra Hauptformular zum
Editieren mit den Daten des gewählten Datensatzes zu öffnen.

Nun, ich denke ich werde eine separaten Filter-Button erstellen um entsprechende Auswahlmöglichkeiten (ggf. auch auf eineige Felder beschränkt) zu ermöglichen.
Auch die Aussage, dass es nicht funktioniert, hat mir mühsames Versuchen erspart.
Danke.

Grüße aus Rostock
Wolfgang
(Netwolf)

Gruß
Martin

Hier die Abfrage:

SELECT Fortführung.Lfd_Nummer,
Count(Rückfragen.Frage) AS Anz_RÜ,
Count(Rückfragen.Frage)-Count(Rückfragen.gestellt_am) AS
Anz_nicht_gestellt,
Count(Rückfragen.gestellt_am)-Count(Rückfragen.beantwortet_am)
AS Anz_RÜ_offen,
Count(Rückfragen.beantwortet_am)-Count(Rückfragen.erledigt_am)
AS Anz_bearb_offen
FROM Rückfragen
RIGHT JOIN Fortführung ON
Rückfragen.EASY_Nummer=Fortführung.Lfd_Nummer
GROUP BY Fortführung.Lfd_Nummer;

also ohne Filter in der Abfrage, ok

Könnte ich denn auf Dcount Felder filtern? Soweit ich weiss
nicht.

Dcount hat die Möglichkeit eine WHERE Bedingung = Filter auszuführen
TIPP: gebe im VBA-Editor DCOUNT ein, dann stelle den Cursor mitten auf das Wort DCOUNT. Nun drücke die Taste [F1], die Hilfe zeigt dir nun den Syntax für DCOUNT an.

Du kannst die Funktion DCOUNT auch in deine Abfrage einbauen!!

Also statt: Count(Rückfragen.Frage) AS Anz_RÜ,
könntest du auch z.B. Dcount(„ID“,„Rückfragen“;deineBedingung)
nutzen.

Nun, ich denke ich werde eine separaten Filter-Button
erstellen um entsprechende Auswahlmöglichkeiten (ggf. auch auf
eineige Felder beschränkt) zu ermöglichen.

wie gesagt, das ist sicher besser!

Grüße aus Rostock
Wolfgang
(Netwolf)