Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: keineAhnung123 am November 21, 2017, 10:47:55

Titel: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: keineAhnung123 am November 21, 2017, 10:47:55
Hallo Zusammen,

ich muss mich mal kurz vorstellen, bin ganz neu hier und habe leider (wie der Name schon sagt) keine Ahnung von Access. Da ich arbeitsbedingt ein wenig damit arbeiten soll, habe ich mir ein Anfänger Buch gekauft und das durchgearbeitet. Da stehen super Sachen drin, aber leider nicht alles.

Ich hänge jetzt seit vier Stunden an meiner ersten Datenbank. Und zwar habe ich eine Tabelle mit Mitarbeitern erstellt ("Stammdaten der Mitarbeiter"). In einer weiteren Tabelle "Sicherheitsunterweisung" stehen für jeden Mitarbeiter, der eine solche Unterweisung bekommen hat, das jeweilige Datum (verknüpft mit der Mitarbeiter über MitarbeiterID) der Unterweisung. Diese Unterweisung muss jährlich wiederholt werden.

Jetzt versuche ich eine Abfrage zu erstellen, die mir alle Mitarbeiter ausgibt, die im Jahr 2018 noch KEINE Sicherheitsbelehrung bekommen haben. Habe im Kriterium Jahr "Ist Null" eingegeben. Wenn aber ein Mitarbeiter im Vorjahr eine Belehrung erhalten hat, wird dieser dann gar nicht mehr angezeigt. Heisst, ich brauche irgendwie ein Kriterium dass sagt "Ist null in [Jahr]" Allerdings kenne ich den Ausdruck für das Kriterium in Access nicht und kann dazu nichts finden... könnt ihr mir vielleicht helfen?

danke schonmal und viele Grüße

keineAhnung123
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: MzKlMu am November 21, 2017, 11:04:55
Hallo,
wahrscheinlich hier fehlt noch eine Tabelle, in der die Unterweisungen dem Mitarbeiter zugewiesen werden.
Aber, das dürfte noch nicht alles sein.

Sind die Unterweisungen für jeden Mitarbeiter notwendig und für alle gleich ?
Mit anderen Worten jeder Mitarbeiter bekommt die gleiche Unterweisung ?

Zeige bitte mal ein Bild des Beziehungsfensters.
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: keineAhnung123 am November 21, 2017, 11:38:19
Hi Klaus,

vielen Dank für deine schnelle Rückmeldung. In der Tabelle Mitarbeiter existiert ein Feld "Sicherheitsbelehrung" (Ja/Nein Feld). Wenn das angeklickt ist, dann benötigt der Mitarbeiter die Unterweisung. Die Unterweisung ist für alle Mitarbeiter dann gleich.

(//)

habe auch ein Formular erstellt, in dem die Mitarbeiter als Hauptformular hinterlegt sind und die Sicherheitsbelehrung als Unterformular nur die Belehrungen anzeigt, die der Mitarbeiter gemacht hat (also pro Jahr) - z.B. Mustermann Max Sicherheitsbelehrung in 2015, 2016, 2017. Daher denke ich eigentlich, dass die Beziehung zwischen den Tabellen ok ist. Nun soll in der Abfrage aber angezeigt werden,dass Mustermann in 2018 noch keine Belehrung bekommen hat. Für einen Mitarbeiter, der neu hinzugefügt wurde und der noch gar keinen Datensatz in Tabelle Sicherheitsbelehrung hat funktioniert die Abfrage mit Feld Jahr Kriterium Ist null. Da aber Max Mustermann in 2015,2016,2017 bereits eine Belehrung bekommen hat, wird er nicht mit angezeigt... macht es das verständlicher?

Hab versucht das Bild für die Beziehung einzufügen... Mal sehen obs gleich angezeigt wird.

Danke nochmal und viele Grüße

keineAhnung123
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: MzKlMu am November 21, 2017, 12:01:11
Hallo,
hast Du für jedes Jahr eine extra Spalte angelegt ?
Wenn Du nur eine Beziehung hast, hast Du nur 2 Tabellen, es werden aber 3 benötigt.
Erkläre bitte mal den Aufbau der Tabelle mit den Jahren.
Das mit dem Bild hat nicht geklappt.
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: keineAhnung123 am November 21, 2017, 12:14:08
Hallo Klaus,

ja, das ist mir aufgefallen, dass das Bild nicht hochgeladen wurde. Ich hab hier im Forum gesucht - ich muss angemeldet sein um Bilder hochladen zu können (-bin ich ja, sehe auch einen Button mit "Bild hochladen", klicke ich dadrauf sieht es allerdings aus wie eben (//).... kriegs also scheinbar nicht hin...

Habe aber auf jeden Fall nur 2 Tabellen. Tabelle 1: Felder: MitarbeiterID, Nachname, Vorname, Ort, SIcherheitsbelehrung (Ja/Nein): Tabelle 2: Felder: BelehrungID, MItarbeiterID (1:n Verknüpfung zu Tabelle Mitarbeiter), Jahr, erfolgt am (genaues Datum). Das Jahr berechnet sich aus "erfolgt am".

In der Abfrage dann die folgenden Felder: Nachname [Mitarbeiter], Vorname [Mitarbeiter], Sicherheitsbelehrung [Mitarbeiter] ->Kriterium wahr, Jahr [Sicherheitsbelehrung] Kriterium zur Zeit: Ist null (das ist aber wohl falsch).

Eine dritte Tabelle würde ich dann benötigen um die Unterweisungen den Mitarbeitern zuzuordnen? Aber mache ich das nicht schon über die Beziehung von MItarbeiterID aus Mitarbeiter mit MItarbeiterID aus Sicherheitsunterweisung?  :o :o

Fragen über Fragen... Danke dir Klaus, dass du dir Zeit für eine (für euch Access Pros) so einfache Frage nimmst

VG

keineAhnung123
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: MzKlMu am November 21, 2017, 12:33:11
Hallo,
Das Jahr in der Tabelle ist überflüssig. Von berechneten Feldern in TAbellen ist abzuraten. Berechnet wird in Abfragen.

Du benötigst eine Tabelle die lückenlos alle Jahre enthält von z.B. 2017 bis 2030, jedes Jahr ein Datensatz. Mit einer Inkonsistenzabfrage (gibt es einen Assi dazu) kannst Du dann ermitteln wer in einem bestimmten Jahr noch keine Unterweisung hatte.
Versuche das bitte noch mal mit dem Bild, das muss klappen.
Du muss das Bild über durchsuchen auswählen.

Habt Ihr nur Sicherheitsunterweisungen oder auch noch andere Unterweisungen ?
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: keineAhnung123 am November 21, 2017, 13:02:59
Hallo Klaus,

wir haben noch mehr Unterweisungen. Die Unterweisung, von der ich gerade spreche, ist eine Unterweisung für Staplerfahrer. Dann gibt es eine weitere Unterweisung für Hygiene. Diese kann, muss aber nicht die selben Mitarbeiter betreffen.

Werde mal eine Tabelle Jahre einfügen und mit der Sicherheitsunterweisung verknüpfen. Selbiges dann auch für die Hygienebelehrung. Melde mich gleich wieder, wenn ich ein bischen rumprobiert habe.

Danke auf jeden Fall für den Tip mit der 3. Tabelle! Da hätte ich ja noch weitere 10h suchen können und es hätte nicht funktioniert... manchmal liegt das einfache so nah!

Viele Grüße

keineAhnung123
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: ebs17 am November 21, 2017, 13:21:38
ZitatJetzt versuche ich eine Abfrage zu erstellen, die mir alle Mitarbeiter ausgibt, die im Jahr 2018 noch KEINE Sicherheitsbelehrung bekommen haben
Diese Abfrage könntest Du Dir sparen, wenn Du Dir bewusst machst, dass wir noch im Jahr 2017 sind.
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: keineAhnung123 am November 21, 2017, 13:27:58
 8) 8) 8) na vielen Dank Eberhard, dann kann ich ja jetzt aufhören :D
Die Datenbank soll ab nächstem Jahr genutzt werden. Dieses Jahr suchen wir tatsächlich die Personalakte von jedem Mitarbeiter nach den Unterweisungen durch um zu prüfen, dass die alle gemacht haben.

Anyways,
Tabelle mit Jahren ist erstellt - Nächstes Problem - wie wird die Tabelle verknüpft? Muss die mit der MitarbeiterID verknüpft werden? oder mit der Sicherheitsbelehrung? Ich steh voll aufm Schlauch...
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: MzKlMu am November 21, 2017, 13:41:16
Hallo,
ich fürchte, das Konzept muss komplette überdacht werden. Das würde ich so auf keinen Fall machen.
Du solltest auch für die Unterweisungen (alle) eine Stammdatentabelle anlegen in der alle Unterweisungen erfasste werden, nur die reinen Unterweisungsdaten.
Dann wird eine Tabelle benötigt die die für den Mitarbeiter zutreffenden Unterweisungen zuordnet. In die Tabelle kommen keine Termine. Die dient nur dazu festzulegen wird welche bekommt. Das Ja/Nein Feld in der Mitarbeitertabelle entfällt dann ersatzlos.

Dann wird noch mal eine Tabelle benötigt mit dem gleichen Aufbau und in diese Tabelle kommen dann die Termine.

Sind die Personen die belehren auch Mitarbeiter ?

PS:
Auf Leer und Sonderzeichen aller Art sollte in Feldnamen unbedingt verzichtet werden.

Ich bin erst gegen Abend wieder am Rechner. Du hast also eine kreative Pause.  ;D
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: ebs17 am November 21, 2017, 13:52:38
@keineAhnung123: Du siehst, ich lese, was geschrieben steht.

Wenn die Abfrage auf nur ein (beliebiges) Jahr auszuführen ist, würde ich eine solche Parameterabfrage verwenden:
PARMETERS VorgabeJahr INTEGER
;
SELECT
   M.*,
   S.*
FROM
   Mitarbeiter AS M
      LEFT JOIN
         (
            SELECT
               *
            FROM
               Sicherheitsunterweisung
            WHERE
               [erfolgt am] BETWEEN DateSerial(VorgabeJahr, 1, 1)
                  AND
               DateSerial(VorgabeJahr, 12, 31)
         ) AS S
         ON M.MitarbeiterID = S.MitarbeiterID
WHERE
   S.MitarbeiterID IS NULL
      AND
   M.inaktiv = False

Basis ist hier die momentane Tabellenstruktur.

Richtige Abfragen würde man erst dann erstellen, wenn das Datenmodell durchgeplant und fertig ist.
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: keineAhnung123 am November 21, 2017, 14:46:41
Hallo Zusammen,

@Ebs17: Du hast natürlich recht, ich merke selber, dass ich um selber in Access zu arbeiten zu wenig abstrakt denke. Muss das erst noch üben, aber ich gebe mir Mühe :)  Leider hatte ich die Tabellen schon gelöscht. als du die Abfrage so geschickt hattest. Ich werd mal versuchen, die Tabellen so aufzubauen, wie Klaus das geschríeben hat um auch evtl noch andere Unterweisungen hinzufügen zu können (hier gibts jeden Tag was Neues, da sind sicher auch mal Unterweisungen dabei). Dachte eigentlich auch, ich hätte das Datenmodell durchgeplant und fertig... hatte ja auch schon das Formular erstellt und getestet. Nur die Abfragen fehlten noch - aber - ich muss noch viel lernen in Access. Danke trotzdem für den Code und Glück auf!


@Klaus:
Hallo Klaus, ich habe die Tabellen erstellt und die Beziehungen angepasst. Bei der Tabelle Jahre bin ich mir trotzdem unsicher, ob die Verknüpfung so richtig ist? Auch hatte ich eine Tabelle "Führerschein" die eben die Gültigkeit von Führerscheinen geprüft hat - diese Unterscheidet sich ein wenig von den Unterweisungen, zwar benötigen nicht alle Mitarbeiter die Führerscheinprüfung, aber wenn dann müssen mehr Daten hinterlegt werden als bei den Unterweisungen (Führerscheinnummer, gültig bis). Sollte das dann mit in die Unterweisungstabelle oder wäre das nochmal ne extra Tabelle?
Tut mir voll leid für die vielen Fragen, ich komme mir ziemlich dumm vor ehrlich gesagt.... beim Buch lesen hab ich gedacht ich hätte es verstanden... aber beim selber machen merkt man erst, was alles beachtet werden muss.
Werde mal auf dein Feedback warten, bevor ich weitermache :)
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: MzKlMu am November 21, 2017, 18:54:52
Hallo,
eine Frage noch, hatte ich in #9 schon gefragt, Antwort bleib aber aus:
Zitat von: MzKlMuSind die Personen die belehren auch Mitarbeiter ?

Und noch mal der Hinweis, entferne die Leerzeichen in den Feldnamen.

Der Aufbau ist noch überarbeitungsbedürftig.
Kannst Du die DB mal hier hochladen ?
Komprimieren/Repariern (Access Dienstprogramm). Als Zipfile mit einigen Spieldaten ?

Kannst Du die D
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: keineAhnung123 am November 22, 2017, 07:11:30
Hallo und guten Morgen Klaus,

sorry, ich hatte erst n Screenshot gemacht und dann die Leerzeichen aus den Feldnamen entfernt. Hier ist die Datenbank.
Die Personen die Belehren sind auch Mitarbeiter, ja. Hier findet mein Chef es aber nicht tragisch, wenn man die nicht mit der Tabelle Mitarbeiter verknüpft, sondern einfach n Namen angibt...

Habe 3 Datensätze in den MItarbeitern angelegt und in den anderen Datensätzen auch ein paar Daten eingefügt, ich hoffe, das ist okay so?

Viele Grüße

keineAhnung123
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: MzKlMu am November 22, 2017, 10:07:28
Hallo,
Zitat...sondern einfach n Namen angibt...
sag Deinem Chef das ist keine gute Idee. Da hast Du eines Tages einen Wildwuchs an Namen drin stehen. Der eine Schreibt Meier, einer schreibt Meier, dann kommt die Vertretung, der schreibe dann Meier K. usw. usw. So etwas macht man ausschließlich über ein Kombi zur Auswahl mit angelegten Beziehungen.

Was kommt in das Feld "eingegeben von" ?

Wird die DB zukünftig von mehreren Usern benutzt ?
Wenn ja, habt Ihr bedacht dass dann jeder User Access braucht (mindestens die Runtime) ?
Soll es eine Benutzerverwaltung geben mit Rechten ?

Das sind Dinge, die man bereits im Vorfeld betrachten sollte.

PS:
In der Beispieldb sind immer noch die Leerzeichen. Ist jetzt nicht schlimm, ich meine ja blos.
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: keineAhnung123 am November 22, 2017, 10:29:22
Hallo Klaus,

okay, ich denke nicht dass er etwas dagegen hat, wenn das über die Mitarbeiter zugeordnet werden kann. Ins Feld eingegebenvon soll derjenige, der eben den Eintrag vorgenommen hat sein kürzel hinterlassen. Die DB wird von 3 Leuten genutzt, die auch alle drei Daten eintragen und ändern können. Daher ist eine Benutzerverwaltung nicht vorgesehen.
Hier ist die DB nochmal, diesmal hoffentlich tatsächlich ohne Leerzeichen. Sind die Beziehungen richtig verknüpft (Vor allem im Bezug auf die Jahre)? Danke schonmal :)
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: MzKlMu am November 22, 2017, 10:46:40
Hallo,
nein, die Struktur ist so nicht richtig, die Jahrestabelle ist falsch, die Tabelle bekommt nur eine Spalte, nämlich das Jahr als Zahl welche denn gleichzeitig auch PS ist. Auch die anderen Tabelle müssen teilweise noch geändert werden.

Ich baue Dir das mal um, ich habe aber im Moment wenig Zeit, es wird also heute Abend werden. Bitte um etwas Geduld.
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: MzKlMu am November 22, 2017, 19:44:39
Hallo,
Ja/Nein Feld "inaktiv" ist überflüssig, es gibt ja ein Datum das reicht.
Die Führerscheinnummer hat ja mit der Prüfung nichts zu tun. Außerdem gibt es bestimmt noch mehr Nummern eines Scheines, z.B. Erstehilfe Ausweis, Staplerausweis, Flurförderfahrzeuge usw. Diese Nummern sind ja an die Person und die Art der Erlaubnis/Prüfung gebunden. Daher gehört eine solche Nummer in die Tabelle "MitarbeiterPrüfung".
Die Felder ...von... etc. wurden alle in Beziehung gesetzt. Die Mitarbeitertabelle wurde dazu mehrfach in die Beziehungen aufgenommen. Erst dadurch lassen sich die unterschiedlichen Inhalte auch unterscheiden.

Die DB habe ich umbenannt in "Unterweisungen_01".
Bei neueren Versionen wird hochgezählt.
Im Anhang die DB. Bitte setze Dich mal auseinander damit.
Bei Fragen bitte melden.
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: keineAhnung123 am November 22, 2017, 21:43:55
Hallo Klaus, vielen vielen Dank dafür! Ich bin total gespannt! Danke danke danke.

Hab morgen Urlaub, gucke aber vllt trotzdem Mal kurz rein  :D

Melde mich dann ws erst nächste Woche wieder wenn ich mich mit den Beziehungen usw auseinandergesetzt und ein bischen rumprobiert habe :)

Viele Grüße
Titel: nachgefragt
Beitrag von: Beaker s.a. am November 23, 2017, 12:40:36
Hallo Klaus,
Immer lernbereit, hätte ich eine Bitte, wenn du Lust und Zeit hast.
Kannst du mir diese "doppelte" n:m-Tabelle(n) erklären? Warum
geht es nicht mit einer?
Dank im Voraus.
gruss ekkehard
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: MzKlMu am November 23, 2017, 16:50:45
Hallo Ekkehard,
die eine Tabelle "MitarbeiterPrüfung" bildet ab, wer welche Prüfungen haben muss. Diese Tabelle wird einmalig gefüllt mit der MitarbeiterID und der für Ihn zutreffenden PrüfungID.
Die andere Tabelle "MitarbeiterPrüfungDatum" dient zur Erfassung der Prüfungen. An diese Tabelle kann mit Hilfe der Tabelle "MitarbeiterPrüfung" automatisiert zum Jahresbeginn die für jeden Mitarbeiter zutreffenden Prüfungen automatisiert angefügt werden. Dann müssen bei erfolgter Prüfung nur noch die Datensätze komplettiert werden.

Mit einer Tabelle geht es im Prinzip auch, aber es müsste bei jeder Prüfung der Mitarbeiter aus der ganzen Mitarbeitertabelle gewählt werden, weil es ja dann die festen Zuordnungen nicht gibt. 
Titel: Re: Abfrage in Access 2016: leeren Datensatz anzeigen
Beitrag von: Beaker s.a. am November 23, 2017, 18:25:38
Hallo Klaus,
Danke hatte ich schon im anderen Thread gesagt.
Und die dort für aufgetretene Frage ist jetzt hiermit auch noch beantwortet.
Also nochmal danke für deine Mühe.
gruss ekkehard