# Brauche Hilfe bei einer Urlaubs-Datenbank



## Schu (13. März 2013)

Hey Leute,
habe schon das ganze Internet durchforstet, aber leider nichts richtig zu meinem Thema gefunden. Bin Anfänger in Datebanken, und muss fürs Studium eine Urlaubsdatenbank schreiben, ohne VBA- und SQL- Programmierung.

Aufgabenstellung:





Bin auch schon recht weit, aber jetzt komme ich nicht weiter.
Ich habe:
-die Tabellen: Mitarbeiter, Abteilungen, Abwesenheiten, Urlaubsanspruch, Jahre und Abwesenheitsart
-ausgerechnet, wieviele MA pro Abteilung sind, wieviele MA mindestens da sein müssen

Aber:
Ich komme mit der Datumsrechnung nicht klar. Ich brauche noch einen Vergleich, wieviele MA an einem bestimmten Tag nicht da sind.
Im Optimalfall mit einer kleinen Visualisierung alos Art Urlaubskalender.

Ich hoffe ich habe meine Problemstellung ausreichend gut formuliert. 
Bitte helft mir!

Beste Grüße, Schu


----------



## Yaslaw (13. März 2013)

> ohne VBA- und SQL- Programmierung



Mit was setzt du denn das um? jenachdem gibts da ganz unterschiedliche Ansätze


----------



## Schu (13. März 2013)

Muss alles mit den Standartfunktionen von Access 2003 machen, also mit Tabellen und Abfragen und deren eingebauten Funtionen wie z.B.: Anzahl, Summe,... ect.


----------



## Yaslaw (13. März 2013)

Ah. Access 2003. Das ist der Hinweis den ich brauchte. Mir SQL war also MS SQL oder Oracle etc. gemeint.

Annahme 1: In der Tabelle [Abwesenheiten] hast du die Mitarbeiter-ID als Long und ein [VON] und ein [BIS] jeweils als Datum.
Wieviele der MA am Tag X einen Eintrag haben.

Was du suchst ist der BEFEHL BETWEEN

```
SELECT 
    COUNT(a.id) AS [anzahl_abwesende_mitarbeiter]
FROM
    [Abwesenheiten] AS a
WHERE
    #19/09/2013# BETWEEN a.von AND a.bis
```


----------



## Schu (13. März 2013)

Danke, damit kann ich vllt was anfangen. Aber leider darf ich VBA und SQL nicht benutzen.


----------



## Schu (13. März 2013)

Deinen Code kann man ja vllt auch als Ausdruck in der Abfrage formulieren. Aber wie kriege ich das Datum als Variable rein? Im Optimalfall würde ich gerne eine Urlaubssperre als Fhlermeldung bei einem Urlaubsantrag bekommen, wenn die Mindestzahl an MA erreicht ist.


----------



## Yaslaw (13. März 2013)

Abfragen sind SQL! Kein MS SQL, aber ganz klar SQL. Wenn jemand was anderes behaubtet hat er keine Ahnung von MS Access. (glaub mir, ich arbeite seit Version 1, also etwa 22 Jahre, mit MS Access. Ich kenne das Ding)

Step 1:
Ersetze die Namen im folgenden SQL durch die Namen die du verwendest.

```
PARAMETERS [Stichtag] DateTime;
SELECT 
    COUNT(a.id) AS [anzahl_abwesende_mitarbeiter]
FROM
    [Abwesenheiten] AS a
WHERE
    [Stichtag] BETWEEN a.von AND a.bis
```

Step 2:
Du erstellst eine neue Abfrage. Wenn die Quellenauswahl kommt klickst du diese weg ohne etwas auszuwählen. Dann wechselst du die Ansicht auf SQL

Step 3:
Kopieren dein angepasstes SQL in das offene weisse fenster

Step 4:
wechsle die Ansicht zurück auf Entwurf.


Du kannst natürlich auch die Abfrage mit Drag&Drop in der Entwurfsansicht zusammen schustern. Aber dort kann ich dir keine importierbare Lösung anbieten


----------



## Schu (13. März 2013)

Vielen Dank. Scheint genau das zu sein was ich brauche. Aber eine Fehlermeldung habe ich noch. 
Der will einen Parameter für den Stichtag.
Stichtag habe ich so gelassen. muss ich dafür noch irgendwo eine Abfrage erstellen?


```
PARAMETERS [Stichtag] DateTime;

SELECT 
Count(AbwesenheitID.id) AS anzahl_abwesende_mitarbeiter

FROM 
tblAbwesenheiten AS AbwesenheitID
WHERE 
((([Stichtag]) Between [AbwesenheitID].[StartDatum] And [AbwesenheitID].[EndDatum]));
```


----------



## Yaslaw (13. März 2013)

Den Stichtag wolltest du doch als Parameter haben. Oder?


----------



## Schu (13. März 2013)

Ja wollte ich, aber wie soll ich den implementieren? Hatte mir vorgestellt, in einem Formular "Urlaubsantrag" den Urlaubswunsch anzugeben. Wenn die Ateilung nicht unterbesetzt ist, sollte da eine Antwort kommen, und bei Ablehnung auch.
Muss ich dann für Stichtag noch eine neue Tabelle anlegen oder geht das auch in der selben Abfrage, oder sogar erst im Formular?


----------



## Yaslaw (13. März 2013)

Ohne VBA? 
Auch ohne Makro?

Nimm die erste Zeile mit der Parameterdefintion weg
Nimm den ganzen WHERE-Teil weg.
Setze das hinter ein Endlosformular.
Erstelle einen Formularkopf.
Erstell darin das Datumsfeld und benamse es sinnvoll
Speichere das Formular.
Ändere nun die Filtereigenschaft des Formulars auf

```
Forms!MeinFormularname!MeinDatumfeld BETWEEN [von] AND [bis]
```

Dann suchst du ob du ein Makro machen kannst, dass die Tabelle neu berechnet.
Hinterlege das Mokro in der Feldeigenschaft afterUpdate des Datumfeldes.

Das ganze ist ohne gewähr, denn seit 20 Jahren löse ich sowas elegangt über VBA.


----------

