Hallo zusammen,
ich habe folgendes Problem bei Access 2007:
Ich habe eine Tabelle A mit den Spalten:
Tabelle A: ID / Projekt / Betreuer / Startdatum / Enddatum
und eine Tabelle B, in der nur Mitarbeiter vermerkt sind.
Tabelle B: ID / Mitarbeitername
Ich habe es so aufgebaut, dass beim Eintragen eines neuen Datensatzes in Tabelle A das Feld Betreuer eine Dropdown-Liste ist, in der alle Mitarbeiter aus Tabelle B ausgewählt werden können.
Mein Ziel ist es, einen Bericht zu erstellen, der bei Eingabe eines Stichtages zeigt, welche Arbeiten betreut werden. Dies habe ich auch hinbekommen, indem ich auf Tabelle A eine Parameterabfrage gemacht habe und auf diese Parameterabfrage baut der Bericht auf.
Jetzt stehe ich vor dem Problem, dass ich in dem Bericht auch reporten möchte, welche Mitarbeiter gerade keine Arbeit betreut, also gar nicht als Betreuer in der ABfrage auf Tabelle A auftaucht.
Wie kann ich das intelligent lösen?
Eine Idee, die ich habe, ist, nach der Parameterabfrage auf Tabelle A für jeden Mitarbeiter einen neuen Datensatz hinzuzufügen, indem jeweils alle Felder leer sind und nur das Betreuerfeld den Namen des Mitarbeiters hat.
Darauf würde ich dann den Bericht aufbauen und für jeden betreuer einfach bei der Summe der Datensätze 1 abziehen. Leider weiß ich nicht, wie ich das umsetzen kann und würde mich über SQL-Code freuen oder natürlich Hinweise, wie das Problem auch anders zu lösen ist.
Hallo,
Du brauchst eine Abfrage ähnlich hier:
http://www.donkarl.com/?FAQ3.16
btw: Lass Nachschlagefelder in Tabellen(!) und und Kriterienparameter in Abfrage gänzlich weg...
Hey DF6GL,
danke für die Antwort.
Ich habe jetzt so eine Anfrage, mit der ich alle Mitarbeiter selektieren kann, die nicht in dem betrachteten Zeitraum sind, selektieren kann.
Dennoch habe ich keine Ahnung, wie ich die jetzt in dem Datensatz anfüge.
Theoretisch könnte ich so einen Unterbericht in meinen bericht einbauen, der dann die Mitarbeieter ohne Betreute Arbeit anzeigt, leider muss ich dann beim erstellen des Berichts mehrmals den gleichen parameter (Stichtag) eingeben und das ist unschön...
Wie soll ich dein btw. verstehen? Wie kann ich die Aufgabenstellung ohne Parameterabfragen machen bzw. wie soll die Vorgabe des Dropdownfelds zur Wahl der Betreuer sonst gelöst werden?
Hallo,
ZitatWie kann ich die Aufgabenstellung ohne Parameterabfragen machen bzw. wie soll die Vorgabe des Dropdownfelds zur Wahl der Betreuer sonst gelöst werden?
Verwende die Dropdownfelder nur in Formularen, niemals in Tabellen, dort sind diese von Übel und verhindern den sauberen Aufbau einer DB. In Formularen sind die kein Problem.
Das ist aber nicht weiter schlimm, da man mit Tabellen direkt sowieso nicht arbeiten sollte.
Siehe hierzu:
Die Nachteile von Nachschlagefeldern (http://dbwikialt.ardiman.de/index.php/Access_Anf%C3%A4nger:_Die_Nachteile_von_Nachschlagefeldern)
Hallo MzKlMu,
danke für den Hinweis.
Mein Problem ist nur, wenn ich in dem Formular nur die Auswahl an Mitarbeitern zulasse, kann ich doch nicht implementieren, dass mal Mitarbeiter entlassen und evtl. neue eingestellt werden.
Außerdem wenn das nur im Formular zur Auswahl steht, wie kann ich dann checken, welcher Mitarbeiter noch nicht ausgewählt ist?
Hatte das eigentlich als Vorteil meiner Methode mit den Tabellen A und B gesehen.
Hallo,
das Vorhaben könntest Du auch mit den Nachschlagefeldern in Tabellen nicht umsetzen. Du musst dazu Abfragen verwenden mit entsprechenden Verknüpfungen (Right bzw. Left Join). So wie in dem Link von Franz weiter oben beschrieben.
Zitat von: MzKlMu am März 10, 2011, 08:18:19
Hallo,
das Vorhaben könntest Du auch mit den Nachschlagefeldern in Tabellen nicht umsetzen. Du musst dazu Abfragen verwenden mit entsprechenden Verknüpfungen (Right bzw. Left Join). So wie in dem Link von Franz weiter oben beschrieben.
Also ich hab es schon geschafft, so umzusetzen wie oben beschrieben und möchte da natürlich nicht die ganze schon gemachte Arbeit wegwerfen.
Ich habe die Datenbank so aufgebaut, dass beim Öffnen nur ein Formular erscheint. In diesem kann man dann auswählen, was man machen möchte. (Neue Arbeit eintragen (öffnet anderes Formular), Bericht aktuell betreuter Projekte anzeigen (Öffnet Bericht), Neuen Mitarbeiter anlegen (Öffnet Formular), Vorhande Mitarbeiter ändern (Formular, in dem man Mitarbeiter auf "ehemalig" setzen kann.
Für den Bericht brauche ich als Grundlage nur eine Abfrage, die
(1) Für gegebenen Stichtag die betreuten Projekte selektiert (aus Tabelle B)
(2) Ausgibt, welche aktiven Mitarbeiter aus Tabelle A aktuell bei dem selben Stichtag kein Projekt betreuen.
Meine momentane Lösung sieht so aus, dass ich (1) und (2) separat voneinander ohne Probleme umsetzen kann, jedoch daran scheitere, das intelligent in eine Abfrage zu packen, so dass ich im Bericht keinen Unterbericht erstellen muss und es so umsetze, dass der Stichtag nur einmal übergeben werden muss.
Meine Idee wäre nach wie vor, eine SQL-Umfrage so zu gestalten, dass ich (1) ausführe und dann irgendwie alle Mitarbeiter, die kein Projekt schreiben, in die Auswahl von Abfrage (1) hinzufüge, dass nur das Feld "Betreuer" gefüllt ist, jedoch sonst kein anderes Feld des jeweiligen Datensatzes mit Inhalt gefüllt ist.
HAllo,
1) und 2) sind zwei verschiedene Sachen (Berichte) und bedürfen zweier unterschiedlichen Abfragen. Die erste hast Du schon, die zweite ergibt sich aus dem geposteten Link.
Bleibt die Übergabe des Parameters oder der Parameter. Das geschieht am Besten so, als das die Berichtsabfragen gar kein Kriterium (Parameter) enthalten und die Berichte mittels einer Schaltfläche (Ereignisprozdur) auf einem Formular durch die OpenReport-Methode geöffnet werden.
Der Openreport-Methode übergibt man dann das oder die Kriterien in deren "Where-Condition-Parameter"
(siehe VBA-Hilfe zu Openreport oder auch hier die Forum-Suche)