Hallo Zusammen,
stehe total auf dem Schlauch. Hoffe ihr könnt mir weiterhelfen?
Habe ein Formular (Projektierung) mit folgenden Feldern:
- Datum
- Mitarbeiter
- Maschine
etc.
Und eine Tabelle (Urlaub) mit folgenden Werten (als Beispiel)
Nr. Name Datum Dauer
1 MustermannA 01.07.2013 5 Tage
2 MusterfrauB 03.07.2013 5 Tage
3 MustermannA 10.07.2013 3 Tage
Nach Eingabe des Datums im Formular (Projektierung), sollen nun nur die Mitarbeiter in einem Kombifeld angezeigt werden, die in diesem Zeitraum keinen Urlaub haben.
Hatte dazu auch schon eine Abfrage erstellt (siehe weiter unten) die das Datumfeld aus dem Projektbuch heranzieht und somit die Mitarbeiter ausblendet die das Kriterium erfüllen.
Zum Beispiel, bei Eingabe von ,,01.07.2013" soll dieser nur die MusterfrauB anzeigen und MustermannA komplett ausblenden.
SELECT tab_Urlaub.Mitarbeiter
FROM tab_Urlaub
WHERE (((tab_Urlaub.Urlaub) Not Between [Formulare]![tab_Projektierung]![Datum] And [Formulare]![tab_Projektierung]![Datum]-[Datum]));
In diesem Beispiel (Urlaub) wird Datensatz 1 ausgeblendet, 2 eingeblendet und leider auch 3 eingeblendet (dieser soll nicht angezeigt werden, weil Datensatz 1 das Kriterium erfüllt)!
Ich hoffe es ist einigermaßen verständlich rübergekommen
Vielen Dank vorab.
Gruß
Claudio
Hallo,
eher so:
SELECT Mitarbeiter
FROM tab_Urlaub
WHERE [Forms]![tab_Projektierung]![Datum] not between [Datum] and [Datum] + [Dauer]
Vielen Dank,
aber leider funktioniert der Code nicht. Jetzt erscheint gar kein Mitarbeiter mehr.
Hab es so abgeändert
SELECT tab_Urlaub.Mitarbeiter
FROM tab_Urlaub
WHERE (((tab_Urlaub.Urlaub) Not Between [Datum] And [Datum]+[Dauer]));
Aber leider passiert es wieder, das doppelte Einträge erscheinen.
In meinem Fall "MustermannA"
Gruß und Danke für die Mühen
Claudio
Hallo,
wenn du in der Tabelle im Feld 'Dauer' oder im Formularfeld tatsächlich '5 Tage' drin stehen hast wird's mit einer Berechnung [Datum] + [Dauer] nicht gehen.
Ansonst zum 'Ausblenden' der doppelten Namen
SELECT DISTINCT tab_Urlaub.Mitarbeiter
FROM tab_Urlaub
WHERE (((tab_Urlaub.Urlaub) Not Between [Datum] And [Datum]+[Dauer]));
Wie ist es dann möglich, einem Mitarbeiter einen oder mehrere Urlaubsbereiche zu hinterlegen (von - bis)
und diesen dann im Formular abzufragen.
Beispiel:
MustermannA Urlaub vom 01.07.2013 bis 10.07.2013
MustermannA Urlaub vom 05.08.2013 bis 15.08.2013
MustermannA Urlaub vom 10.12.2013 bis 24.12.2013
MusterfrauB Urlaub vom 05.08.2013 bis 10.08.2013
Jetzt sollte im Formular (Projektierung) durch Eingabe von Datum (z.B. 04.07.2013)
nur MusterfrauB (im Kombifeld) erscheinen, weil MustermannA im ersten Datensatz das Kriterium erfüllt.
Grüsse
Hallo,
hast du jetzt die Tabelle geändert?
Wenn die Datumseinträge jetzt so in der Tabelle stehen sollte das so funktionieren:
SELECT tab_Urlaub.Mitarbeiter
FROM tab_Urlaub
WHERE [Forms]![tab_Projektierung]![Datum] not between [tab_Urlaub].[UrlaubVon] and [tab_Urlaub].[UrlaubBis]
Fügst du DISTINCT hinzu, wird jeder Mitarbeitername nur einmalig angezeigt.
Wenn aber der gleiche Mitarbeiter Urlaubsbereiche hat, die das Kriterium nicht erfüllen werden die auch angezeigt.
Unterscheiden kannst du die Einträge dann dadurch, dass du auch die Urlaubsdaten anzeigst.
Erstmal möchte ich mich bedanken. Danke, das du dir die Zeit nimmst. :)
Ich habe die Tabelle noch nicht abgeändert, werde dies aber noch tun.
Es funktioniert soweit, das doppelte Einträge ausgeblendet werden.
Wenn aber der gleiche Mitarbeiter Urlaubsbereiche hat, die das Kriterium nicht erfüllen werden die auch angezeigt.
Unterscheiden kannst du die Einträge dann dadurch, dass du auch die Urlaubsdaten anzeigst.
Dies würde ich gerne vermeiden. Also, der Mitarbeiter soll ausgeblendet werden.
Hallo,
dann sollte es eigentlich damit gehen, dass die Mitarbeiternamen ermittelt werden, die im Kriterienbereich liegen und deren Namen dann in der Liste auszuschließen.
Hmmm.... ein ungetesteter Schnellversuch
SELECT tab_Urlaub.Mitarbeiter
FROM tab_Urlaub
WHERE tab_Urlaub.Mitarbeiter NOT IN
(SELECT DISTINCT tab_Urlaub.Mitarbeiter
FROM tab_Urlaub
WHERE [Forms]![tab_Projektierung]![Datum] BETWEEN [tab_Urlaub].[UrlaubVon] AND [tab_Urlaub].[UrlaubBis])
Mal sehen ... ::)
Ab heute bist du mein ACCESS-GOTT!
GENIAL ES FUNKTIONIERT
mit einer kleiner Änderung :)
Der fertige Code
SELECT DISTINCT tab_Urlaub.Mitarbeiter
FROM tab_Urlaub
WHERE (((tab_Urlaub.Mitarbeiter) Not In (SELECT DISTINCT tab_Urlaub.Mitarbeiter FROM tab_Urlaub WHERE [Forms]![tab_Projektierung]![Datum] BETWEEN [tab_Urlaub].[UrlaubVon] AND [tab_Urlaub].[UrlaubBis])));
MILLE GRAZIE