August 15, 2020, 07:32:52

Neuigkeiten:

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


Abfrage durchsuchen und bei vorhandenem Datensatz Status ändern

Begonnen von Konservenkalle, Juli 28, 2020, 20:28:10

⏪ vorheriges - nächstes ⏩

Konservenkalle

Hallo liebe Community,

ich erstelle gerade eine Datenbank, die Wartungen von Maschinen sowie Unterweisungen von Mitarbeitern verwalten soll. Um einen Überblick über alle fälligen Termine zu ermöglichen habe ich eine Union-Abfrage erstellt, welche die letzten Wartungs- sowie Unterweisungstermine anzeigt und daraus den nächsten Wartungs-bzw Unterweisungstermin berechnet. In einem weiteren Feld wird der Status ausgegeben, also bald Fällig, Fällig, Abgeschlossen, geplant. Die Berechnung habe ich wie folgt gelöst:

IIf([Durchgeführt]=True,"Abgeschlossen","Offen") AS StatusDG, IIf([Durchgeführt]<0,DateAdd("yyyy",[Zyklus],[Datum]),[Datum]) AS Fällig, IIf(Date()<[Datum],"geplant",IIf(Date()>=([Fällig]-14) And Date()<[Fällig],"bald Fällig!",IIf(Date()>=[Fällig],"Fällig!",IIf(Date()>=[Datum] And [Durchgeführt]=True,"Abgeschlossen","")))) AS Status
Sie dürfen in diesem Board keine Dateianhänge sehen.

Der Zuständige Mitarbeiter soll sodann eine Schulung planen und einen Termin hinterlegen.
Nun stehe ich jedoch vor dem Problem, dass sobald eine Unterweisung fällig ist und der Mitarbeiter eine neue Schulung zu dem Thema anlegt, ein neuer Datensatz in der Abfrage auftaucht und der vorherige im Status "Fällig" bleibt. Somit dauerhaft Datensätze "mitgeschleppt" werden, die eigentlich nicht mehr aktuell sind.

Gibt es eine Möglichkeit, dass die Abfrage nach der Kombination Mitarbeiter und Maschine durchsucht wird und bei einem gefundenen Datensatz der Status sich auf abgeschlossen ändert? Ich komme da partout nicht weiter...falls ihr andere Ideen habt wäre ich sehr offen.

Das sind die Beziehungen der DB:
Sie dürfen in diesem Board keine Dateianhänge sehen.
 
Ich habe das nun erstmal unter Thema VBA gepackt, da ich denke, dass es in einer Abfrage nicht lösbar ist. Falls ich hier falsch bin, verzeiht mir bitte!

Vielen Dank für eure Hilfe.

LG Konservenkalle

markus888

Zitat von: Konservenkalle am Juli 28, 2020, 20:28:10Gibt es eine Möglichkeit, dass die Abfrage nach der Kombination Mitarbeiter und Maschine durchsucht wird und bei einem gefundenen Datensatz der Status sich auf abgeschlossen ändert?

Ja natürlich geht das.
Du erwartest aber hoffentlich nicht, dass jemand ohne die Zusammenhänge genau zu kennen und ohne diese Unionsabfrage zu kennen, das einfach so aus dem Ärmel schütteln kann.

Du könntest ja die UNIONS Abfrage zeigen und den kompletten Inhalt von einem konkreten betroffenen Fall.
(Mit den Einträgen aus den betroffenen Tabellen).
Denke auch darüber nach, welche Informationen erforderlich sind, damit die berechnete Abfrage korrekte Daten anzeigen kann.
Aus meiner Sicht machst du es dir nämlich hier etwas zu einfach.

Markus
10 Jahre Access

Konservenkalle

Hi Markus,

erstmal vielen Dank für deine Antwort! Nein, das erwarte ich ganz und gar nicht. :)
Ich kann mir gut vorstellen, dass ein grundlegender Fehler vorliegt. Daher mal wie folgt der ganze Prozess:

Es gibt zu jeder Maschine eine Unterweisung. Zu dieser Unterweisung werden in tblUnterweisungstermine mehrere Termine festgelegt. Und da pro Termin mehrere Mitarbeiter teilnehmen können sowie ein Mitarbeiter mehrere Unterweisungstermine wahrnehmen kann (da ein Mitarbeiter nicht nur eine Maschine bedient) habe ich tblTNSchulung angelegt, um beides zusammenzuführen.

Nun kann über ein Frm ein Termin angelegt werden...
Sie dürfen in diesem Board keine Dateianhänge sehen.

...und Mitarbeiter zugeordnet werden, sowie der Termin abgeschlossen werden...
Sie dürfen in diesem Board keine Dateianhänge sehen.


Da in der Union keine berechneten Felder hinterlegt sind, würde ich einmal eine der beiden Abfragen zeigen, mit der ich mich auch gerade hauptsächlich befasse, bzw in der das ursprüngliche Problem auch besteht.

SELECT tblMitarbeiter.MA_Name, tblMitarbeiter.MA_Vorname, tblMitarbeiter.MA_Kostenstelle, tblMS_Unterweisungen.Bezeichnung, tblMS_Unterweisungen.Zyklus, tblUnterweisungstermine.Datum, tblUnterweisungstermine.Uhrzeit,
tblTNSchulung.Schulungsnachweis AS Nachweis,
tblUnterweisungstermine.Durchgeführt, IIf([Durchgeführt]=True,"Abgeschlossen","Offen") AS StatusDG, IIf([Durchgeführt]<0,DateAdd("yyyy",[Zyklus],[Datum]),[Datum]) AS Fällig,
IIf(Date()<[Datum],"geplant",IIf(Date()>=([Fällig]-14) And Date()<[Fällig],"bald Fällig!",
IIf(Date()>=[Fällig],"Fällig!",IIf(Date()>=[Datum] And [Durchgeführt]=True,"Abgeschlossen","")))) AS Status
FROM (tblMS_Unterweisungen
INNER JOIN tblUnterweisungstermine
ON tblMS_Unterweisungen.[Maschine] = tblUnterweisungstermine.[Unterweisung])
INNER JOIN (tblMitarbeiter
INNER JOIN tblTNSchulung
ON tblMitarbeiter.[Mitarbeiternr] = tblTNSchulung.[Teilnehmer])
ON tblUnterweisungstermine.[Terminnr] = tblTNSchulung.[Terminnr];

Wenn die Schulung abgeschlossen ist, wird in Fällig der Zyklus auf das Schulungsdatum aufgerechnet, wenn nicht übernimmt er das Schulungsdatum (Um die Fälligkeit zu behalten). Wenn ich jetzt hier jedoch im folgenden Beispiel die 2. Zeile (Steht auf Fällig da der 01.07. nun schon etwas zurück liegt) für diese Person eine Unterweisung der gleichen Maschine am 30.07. anlege, wird ein neuer Datensatz hinzugefügt, der alte bleibt jedoch auf Fällig (obwohl die neue Schulung bereits durchgeführt wurde).

Sie dürfen in diesem Board keine Dateianhänge sehen.

Folgend die betroffenen Tabellen mit den entsprechenden Datensätzen:

tblMitarbeiter
Sie dürfen in diesem Board keine Dateianhänge sehen.

tblMS_Unterweisungen
Sie dürfen in diesem Board keine Dateianhänge sehen.

tblUnterweisungstermine
Sie dürfen in diesem Board keine Dateianhänge sehen.

tblTNSchulung
Sie dürfen in diesem Board keine Dateianhänge sehen.


Ich hoffe, ich habe das ganze verständlich erläutert. Würde mich über Tipps freuen!

Vielen Dank und

LG Konservenkalle

DF6GL

Hallo,

Zitatdass ein grundlegender Fehler vorliegt

der Meinung bin ich auch.  Zumindest fehlt in jeder Tabelle ein autonomes Primärschlüsselfeld, Wenn hier
ZitatON tblMS_Unterweisungen.[Maschine] = tblUnterweisungstermine.[Unterweisung])

Schlüsselfelder sind, frage ich mich, was eine Maschine mit einer Unterweisung zu tun hat (bezgl. Schlüsselfelder)

Zeig mal den Screenshot des Beziehungsfenster, dabei sichtbar alle Tabelle mit ihren Feldern.

Weiterhin nenne den Datentyp(!) der einzelnen Schlüsselfelder, wenn vorhanden.



markus888

Zitat von: DF6GL am Juli 30, 2020, 20:56:21Zumindest fehlt in jeder Tabelle ein autonomes Primärschlüsselfeld

Das sind doch 1:1 Beziehungen. Wozu sollen die einen anderen Primärschlüssel haben?
Wenn sich der Zyklus aber nie ändert machen die Tabellen keinen Sinn. Man kann den Zyklus gleich bei der Maschinen Tabelle hinterlegen.

@Konservenkalle,
ich habe jetzt nicht die Zeit mich das konzeptuell zu vertiefen.
Ich würde vermutlich eine Tabelle erstellen, die für Mitarbeiter, Maschien + Zyklus einen Eintrag erstellt, dem man dann einen Schulungstermin einfügen könnte - also einfach die jetzige Tabelle erweitern.
Da könnten dann einfach per VBA/SQL die Einträge für einen bestimmten Zeitraum erzeugt werden.

Grundsätzlich wäre für mich aber die Usability im Vordergrund, auch wenn das nicht ganz den Regeln der Normalisierung entsprechen würde.

LG Markus
10 Jahre Access

DF6GL

Hallo,

ja, ok, habe das Beziehungsfenster aus Beitrag #1  nicht gesehen...

Ansonsten gehen wir konform...