Access 2003: In Unterabfrage Ergebnisse filtern mit Wert aus aktuellem Datensatz
In Datensatzherkunft (SELECT...FROM...WHERE) auf einen Wert im aktuellen Datensatz verweisen
Ich erstelle gerade eine Access Datenbank. Darin gibt es eine Tabelle PERSONAL, eine Tabelle FIRMEN und eine Tabelle STUNDEN.
PERSONAL hat den (vereinfachten) Aufbau PersNr,Firma,Name,Vorname
FIRMEN hat den (vereinfachten) Aufbau Firma, Anschrift, Kontakt
STUNDEN hat den (vereinfachten) Aufbau Datum,Firma,PersNr,Tätigkeit,Stunden
Soweit so gut. In STUNDEN kann im Datensatz über eine Unterabfrage also die betreffende Firma ausgewählt werden. Für die Auswahl der Personalnummer soll jetzt eine Unterabfrage auf die Tabelle PERSONAL so gefiltert werden, dass als Rückgabewerte aus der Gesamtmenge nur diejenigen vorkommen, die ebenfalls den Wert von Firma beinhalten.
Hintergrund ist der, dass es in den zu erfassenden Firmen und Mitarbeitern durchaus identische Personalnummern geben kann.
Wenn ich die Abfrage fest verdrahtet als SELECT Personal.Personalnummer, Personal.Name, Personal.Vorname FROM Personal WHERE Firma="FIRMENNAME" ORDER BY [Name], [Vorname], [Personalnummer] eingebe, dann funktioniert dass einwandfrei. Aber anstelle von FIRMENNAME soll dort ja der Wert gesetzt werden, den ich (beim erfassen einen Satzes) ein Feld vorher unter Firma eingesetzt habe.
Kann mir da jemand vielleicht auf die Sprünge helfen? Danke.
Ich erstelle gerade eine Access Datenbank. Darin gibt es eine Tabelle PERSONAL, eine Tabelle FIRMEN und eine Tabelle STUNDEN.
PERSONAL hat den (vereinfachten) Aufbau PersNr,Firma,Name,Vorname
FIRMEN hat den (vereinfachten) Aufbau Firma, Anschrift, Kontakt
STUNDEN hat den (vereinfachten) Aufbau Datum,Firma,PersNr,Tätigkeit,Stunden
Soweit so gut. In STUNDEN kann im Datensatz über eine Unterabfrage also die betreffende Firma ausgewählt werden. Für die Auswahl der Personalnummer soll jetzt eine Unterabfrage auf die Tabelle PERSONAL so gefiltert werden, dass als Rückgabewerte aus der Gesamtmenge nur diejenigen vorkommen, die ebenfalls den Wert von Firma beinhalten.
Hintergrund ist der, dass es in den zu erfassenden Firmen und Mitarbeitern durchaus identische Personalnummern geben kann.
Wenn ich die Abfrage fest verdrahtet als SELECT Personal.Personalnummer, Personal.Name, Personal.Vorname FROM Personal WHERE Firma="FIRMENNAME" ORDER BY [Name], [Vorname], [Personalnummer] eingebe, dann funktioniert dass einwandfrei. Aber anstelle von FIRMENNAME soll dort ja der Wert gesetzt werden, den ich (beim erfassen einen Satzes) ein Feld vorher unter Firma eingesetzt habe.
Kann mir da jemand vielleicht auf die Sprünge helfen? Danke.
Please also mark the comments that contributed to the solution of the article
Content-ID: 41522
Url: https://administrator.de/forum/access-2003-in-unterabfrage-ergebnisse-filtern-mit-wert-aus-aktuellem-datensatz-41522.html
Printed on: January 15, 2025 at 23:01 o'clock
7 Comments
Latest comment
Äh, schwierig, weil mir nicht klar ist, wie Du was machen willst.
Was ist bei Dir eine Unterabfrage? Ein Unterformular in einem Formular?
Und Dein SQL Beispiel geht nur auf eine Tabelle. Was meinst Du mit Feld vorher?
Also wenn Du in einer Abfrage die zwei Tabellen verknüpft haben willst, kann man das so machen:
SELECT Personal.PersNr, Personal.Firma, Personal.Name, Stunden.Datum, Stunden.Stunden
FROM Personal INNER JOIN Stunden ON (Personal.PersNr = Stunden.Persnr) AND (Personal.Firma = Stunden.Firma)
Damit wird so verknüpft, daß sowohl die Firma als auch die Personalnummer übereinstimmen muß.
Falls Du was anderes wissen willst, versuchs nochmals zu beschreiben.
Was ist bei Dir eine Unterabfrage? Ein Unterformular in einem Formular?
Und Dein SQL Beispiel geht nur auf eine Tabelle. Was meinst Du mit Feld vorher?
Also wenn Du in einer Abfrage die zwei Tabellen verknüpft haben willst, kann man das so machen:
SELECT Personal.PersNr, Personal.Firma, Personal.Name, Stunden.Datum, Stunden.Stunden
FROM Personal INNER JOIN Stunden ON (Personal.PersNr = Stunden.Persnr) AND (Personal.Firma = Stunden.Firma)
Damit wird so verknüpft, daß sowohl die Firma als auch die Personalnummer übereinstimmen muß.
Falls Du was anderes wissen willst, versuchs nochmals zu beschreiben.
Moin manuel-r,
Warum sollte keine Firma in der Datenbank existieren dürfen ohne Mitarbeiter oder kein Mitarbeiter ohne bereits erfasste Stunden?
Natürlich sollte der übergeordnete DS schon gespeichert sein.
Eine Integritätsbedingung "es darf kein DS in MA existieren, wenn keine dazugehörigen STUNDEN-Datensätze existieren" wäre doch DB-technisch und auch rein vom gesunden Menschenverstand her Unsinn.
Gruß
Biber
dass es so ohne weiteres nicht funktioniert, da der eben eingegebene Wert GHI noch nicht in der DB verewigt wurde.
Das ist aber ein hausgemachtes Problem. Nichts spricht dagegen, den FIRMA-Datensatz mit "GHI" zu speichern, bevor Du das STUNDEN-Eingeben erlaubst bzw. beginnst.Warum sollte keine Firma in der Datenbank existieren dürfen ohne Mitarbeiter oder kein Mitarbeiter ohne bereits erfasste Stunden?
Natürlich sollte der übergeordnete DS schon gespeichert sein.
Eine Integritätsbedingung "es darf kein DS in MA existieren, wenn keine dazugehörigen STUNDEN-Datensätze existieren" wäre doch DB-technisch und auch rein vom gesunden Menschenverstand her Unsinn.
Gruß
Biber
Hm, manuel,
dann lass uns nochmal auf AndreasHosters Fragen zurückkommen: Wird das ganze denn in einem Formular mit Unterformular und Unter-Unterformular auf den Bildschirm gebracht oder versuchst Du, die Anzeige (und Neuerfassung) in einer Tabellenansicht, die auf einem SELECT-Statement basiert, abzufackeln?
Wenn Unterformulare und wenn dann in einigen Feldern "eingeschränkte Wertebereiche" (wie im Feld PERSNR in Abhängigkeit von FIRMA), dann:
wie sieht denn dann die ListBox aus? Irgendwas muss doch da schon vorhanden sein?
Gruß
Biber
dann lass uns nochmal auf AndreasHosters Fragen zurückkommen: Wird das ganze denn in einem Formular mit Unterformular und Unter-Unterformular auf den Bildschirm gebracht oder versuchst Du, die Anzeige (und Neuerfassung) in einer Tabellenansicht, die auf einem SELECT-Statement basiert, abzufackeln?
Wenn Unterformulare und wenn dann in einigen Feldern "eingeschränkte Wertebereiche" (wie im Feld PERSNR in Abhängigkeit von FIRMA), dann:
wie sieht denn dann die ListBox aus? Irgendwas muss doch da schon vorhanden sein?
Gruß
Biber
So wird das nicht gehen.
In der Tabellenansicht kannst Du nicht auf noch nicht gespeicherte Werte zugreifen.
In einem Formular mit etwas Programmierung ist es machbar, da kann man auf den Wert im Formular, selbst wenn er noch nicht gespeichert ist, zugreifen.
Im Moment habe ich nur nicht die Zeit es genauer auszuführen, wie man es in einem Formular macht. Poste ich später noch.
In der Tabellenansicht kannst Du nicht auf noch nicht gespeicherte Werte zugreifen.
In einem Formular mit etwas Programmierung ist es machbar, da kann man auf den Wert im Formular, selbst wenn er noch nicht gespeichert ist, zugreifen.
Im Moment habe ich nur nicht die Zeit es genauer auszuführen, wie man es in einem Formular macht. Poste ich später noch.