August 13, 2022, 21:06:51

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Neue Abfrage zeigt Dubletten an

Begonnen von Mero, Juli 23, 2022, 21:12:56

⏪ vorheriges - nächstes ⏩

Mero

Hallo zusammen,

ich hab eine Test-DB erstellt, um das Problem zu zeigen.
In der realen DB werden die Datensätze nach dem angemeldeten Benutzer gefiltert und die beiden Abfragen sinid in einer Abfrage zusammengefasst.

Ziel der Abfragen ist es, die MajorTasks in einem Endlosformualar anzuzeigen, aber nur für die Beutzer, die es betrifft.

Die Abfrage "CustomerMajorTasksQ" liefert das gewünschte Ergebnis.

Nun hab ich aber eine neue Tabelle (SubTasks) erstellt, um die einzelnen Schritte eines MajorTasks zu erfassen. Zu den einzelnen Schritten wird der entsprechende Mitarbeiter erfasst, der dann auch den MajorTask im Endlosformular sehen soll.

Problem mit der neuen Abfrage "MajorTasksSubTasksQ":
Der Mitarbeiter mit der Nr. 3 bekommt jetzt den MajorTask mit ID 1 im Endlosformular 6 mal angezeigt, weil dieser MajorTask in den SubTasks 6 mal eingetragen ist.

Mit Select distinct bzw, distinctrow möchte ich nicht arbeiten, da dann der Recordset nicht mehr bearbeitet werden kann, Meldung "Recordset not updatable".

Was kann ich tun, damit jeder Record nur einmal angezeigt wird?

Gruß Stefan

MzKlMu

Hallo,
Zitat von: undefinedMajorTask mit ID 1 im Endlosformular 6 mal angezeigt
das ist normal und richtig und wirst Du auch nicht ändern können. Abfragen verwendet man auch nicht zur Bearbeitung, im Regelfall noch nicht mal zur direkten Ansicht. Datenanzeige und Bearbeitungen erfolgen immer über Formulare. Und das ist ein Anwendungsfall für ein Hauptformular für die MajorTask und einem Unterformular das über die Schlüsselfelder zu verknüpften ist. Das Ufo zeigt dann die Subtask an.
Das ist dann alles bearbeitbar und die MajorTask werden nur 1x angezeigt.
Gruß
Klaus

Mero

Hallo Klaus,

das Endlosformular ist die Übersicht, die den Mitarbeitern zeigt, in welche MajorTasks sie involviert sind. Über das Endlosformular wird dann das Formular zur Bearbeitung der SubTasks aufgerufen (und einige andere Dinge, die schon länger in Benutzung sind).

Damit die Mitarbeiter, die weder als kundenverantwortlich (EmployeeR) noch als majorTaskverantwortlich (EmployeeM) eingetragen sind (sondern "nur" als Mitarbeiter im neuen SubTask), den MajorTask im Endlosformular überhaupt sehen, muss die Abfrage angepasst werden.

Wie nur...

Gruß Stefan


DF6GL

Hallo,

ZitatWie nur...


hat Klaus schon erläutert.

Wirf die Abfragen weg und baue die HFO/UFO-Konstruktion auf.  Die Formulare erhalten als Datenherkuft die jeweilige Tabelle.



ZitatÜber das Endlosformular wird dann das Formular zur Bearbeitung der SubTasks aufgerufen

Dafür braucht es kein separates Form (außer man will es unbedingt so haben). Die Daten können gleich im UFO editiert/gepflegt werden.


ZitatDamit die Mitarbeiter, die weder als kundenverantwortlich (EmployeeR) noch als majorTaskverantwortlich (EmployeeM) eingetragen sind (sondern "nur" als Mitarbeiter im neuen SubTask), den MajorTask im Endlosformular überhaupt sehen, muss die Abfrage angepasst werden.

 Die Filterung des HFO erfolgt über Auswahl-Kombis oder andere Steuerelemente entspr. der gewünschten Kriterien, bzw. über die Abfrage (als Datenherkunft):

MajorTasksSubTasksQ 
mit Kriterium SubTasksID ist Null

Wenn sich das HFO (bzw. die Abfrage) nicht mehr editieren läßt, dann versuch folgende Abfrage in der Datenherkunft des HFO:

Select * From Customer Where Exists (Select Null from MajorTasks as MT Where MT.CustomerID = Customer.CustomerID)


Mero

Hallo zusammen,

das Endlosformular ist schon UFO eines Reiters in der Registerkartenansicht.
Das Endlosformular ist auch wichtig als Gesamtübersicht der MajorTasks, mit denen der angemeldete Mitarbeiter zu tun hat.

Unabhängig davon müsste auch bei der Umsetzung von HFO/UFO der Mitarbeiter erstmal den MajorTasks sehen können, denn wie beschrieben, alle Anzeigen werden auf Basis des angemeldeten Mitarbeiters gefiltert.


Zitat von: undefinedDie Filterung des HFO erfolgt über Auswahl-Kombis oder andere Steuerelemente entspr. der gewünschten Kriterien, bzw. über die Abfrage (als Datenherkunft):

Und als Kriterium muss ja auch der EmployeeS berücksichtigt werden, was dann aber zu den Dubletten führt.

Wenn ich als Kriterium SubTasksID ist null benutzhe, sieht Mitarbeiter 3 den MajorTask 2 nicht mehr, bei dem er im SubTask tätig ist.

Grüße Stefan

MzKlMu

Hallo,
die Abfrage so wie Du diese hast, lässt sich nicht ändern, die wird Dupletten anzeigen, da gibt es keine andere Möglichkeit.
Du machst auch Denkfehler, das ist einfacher als Du denkst.
Das Hafo hat als Datenherkunft nur die Tabelle mit dem MajorTasks und zeigt demzufolge diese auch ohne Dupletten an. Das Ufo bekommt als Datenherkunft nur die Tabelle der Subtask. Hafo und Ufo sind über die MajorTasksID zu verknüpfen. In diesem Hafo/Ufo Aufbau kannst Du die Daten anzeigen und auch bearbeiten und auch filtern.
Bei der von Dir geschilderten Problematik ist so gut wie immer der Hafo/Ufo Aufbau die einzige sinnvolle Möglichkeit.


Nebenbei:
Warum ist keine referentielle Integrität in den Beziehungen eingestellt (das müsste man in den Verknüpfungen der Abfrage sehen)? RI sollte immer eingestellt werden.

Zeige mal ein Bild des Beziehungsfensters.
Gruß
Klaus

Beaker s.a.

Hallo,
ZitatZeige mal ein Bild des Beziehungsfensters.
unterstreich

Das kann so nicht hinhauen. Wie willst du einem EmployeeS denn eine
Liste der Major Tasks anzeigen? Da gibt es doch gar keine Verbindung,
sprich Beziehung zwischen den Employees. Ich vermute, dass du die IDs
von EmployeeR und -M an die SubTasks durchreichen musst.
Wie ist denn die Tabelle Employees überhaupt aufgebaut.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

Mero

Hallo zusammen,

erstmal vielen Dank für eure Zeit.

Ich hab jetzt mal schnell meine Test-DB erweitert und stell diese hier bereit. Das ist dann hoffentlich einfacher.

Bei der Konstellation mit HFO/UFO sieht z.B. Employee 4 (MA4_Susi in der Test-DB) nichts.
Jeder Mitarbeiter, der nur im SubTask vorkommt, sieht dann den MajorTask nicht.

Hier eine Übersicht, was die einzelnen Mitarbeiter sehen sollten:
MA1 soll (einmal) sehen: MTask1_MA3, MTask2_MA1, MTask5_MA1, MTask6_MA1, MTask7_MA3, MTask8_MA1
MA2 soll (einmal) sehen: MTask1_MA3 (MTask1_MA2_viaSubT4), MTask3_MA2, MTask4_MA2, MTask5_MA1
MA3 soll (einmal) sehen: MTask1_MA3, MTask2_MA1 (MTask2_MA3_viaSubT2), MTask7_MA3, MTask8_MA1
MA4 soll (einmal) sehen: MTask1_MA3 (MTask1_MA4_viaSubT5)

Problem: ich kann jetzt weder ein Bild (was beim Start des Threads ging) noch die Test-DB anhängen.
Wie geht das bei einer Antwort?

Grüße Stefan

MzKlMu

Hallo,
Du musst den Antwortbutton klicken, dann siehst Du unten die Zeile
"Attachments and other options"
Gruß
Klaus

Mero

DANKE!!!

Entweder über Form_AllQ oder MainForm testen.

MzKlMu

Hallo,
gerade in einer Beispieldb sollte man unbedingt Beziehungen anlegen, damit der Fremde die Zusammenhänge einfach erkennen kann.
Lege also mal Beziehungen an (mit RI) und lade die DB noch mal hoch.
Gruß
Klaus

Mero

Hallo Klaus,

ich dachte die Infos aus den Abfragen sei ausreichend. Anbei die geänderte Test-DB.

Grüße Stefan

MzKlMu

Juli 24, 2022, 19:18:11 #12 Letzte Bearbeitung: Juli 24, 2022, 19:23:40 von MzKlMu
Hallo,
beziehen sich alle Employee der 3 Tabellen auf die Mitarbeitertabelle ?

Mir ist immer noch nicht richtig klar, was Du jetzt sehen willst, bzw. was das Problem ist.
Gruß
Klaus

Mero

Hallo Klaus,

ja, die Mitarbeiter sind immer die gleichen. Ich habe die nur zu Demozwecken so benannt.

Es geht darum, dass die Mitarbeiter, die an irgendeinem Punkt mit dem MajorTask zu tun haben, diesen auch in der Übersichtsliste sehen.

Der EmployeeR betreut den Kunden, der EmployeeM ist für einne MajorTask des Kunden verantwortlich und der EmployeeS erbringt irgendeine Leistung im Rahmen der dem MajorTask untergeordnetem SubTasks.

Bisher hatten wir nur die Kundentabelle und die Majortasks, da klappt die Freigabe für die entsprechenden Mitarbeiter ohne Problem und ohne Dubletten.
Problem ist die neue SubTasks Tabelle, denn dort können auch Mitarbeiter auftauchen (z.B. MA4_Susi), die weder den Kunden betreuen noch für den MajorTask verantworlich sind. Susi muss aber auch den Majortask sehen können, um in dem untergeordneten SubTask Eintragungen machen zu können.

Ich hab jetzt als einzigen Ausweg die Idee, die SubTasks Tabelle hier aus dem Spiel zu nehmen und dafür eine separate Abfrage zu machen und die Infos aus der MajorTasks dann über DLookup oder so einzufügen.

Lieber wäre mir aber, wenn das hier mit dem Endlosformular ginge, sonst haben die Mitarbeier zwei Baustellen in der Datenbank.

Grüße Stefan

Mero

Gelöst!

Hab's über SQL hinbekommen, vollkommen zuverlässig und kein Fehler "Recordset not updateable".

Falls es jemanden interessiert nehme ich mir die Zeit und beschreibe die Lösung und poste die Datenbank.

Grüße
Stefan