Access 2010 - Abfrage über mehrere Tabellen
Hallo zusammen!
Ich bin gerade etwas am Verzweifeln mit Access 2010. Meine Datenbank besteht aus folgenden Tabellen / Beziehungen:
Sie soll Verträge verwalten zwischen unterschiedlichen Gesellschaften. Alle Gesellschaften sind in tblGesellschaft enthalten.
Jede Gesellschaft kann Empfänger oder Zahlender sein.
tblVertrag enthält alle Verträge, die sich in einzelne Positionen aufteilen (tblVertragPosition). Jede Einzelposition bekommt ein Kennzeichen zugeordnet (=Art der Leistung). Alle Kennzeichen sind in tblKennzeichen gespeichert.
Die beiden Tabellen tblKtoEmpfangend und tblKtoZahlend enthalten die Info, welches Konto für welche Kombination Gesellschaft und Kennzeichen verwendet werden soll.
tblSteuer und tblMonat enthalten Kennzeichen für die einzelnen Steuerarten und Monate.
Wird ein Vertrag angelegt, müssen Empfänger und Zahlender festgelegt werden. Aus diesen beiden und dem Kennzeichen in tblVertragPosition ergibt sich dann das jeweilige Konto aus tblKtoEmpfangend bzw. tblKtoZahlend.
Ich möchte jetzt einen Bericht zu den Verträgen mit Einzelpositionen, in dem für jede Einzelposition das korrekte Konto enthalten ist inkl. Name der Gesellschaften und Name der Kennzeichen, mit Angabe von Steuer und Monat.
Ich habe schon gestern den ganzen Tag mit sämtlichen JOIN Arten experimentiert. Die Art, wie Access dann noch Klammern darum möchte, macht es auch nicht gerade einfacher. Auch mit einzelnen Unterabfragen, die dann in die Hauptabfrage laufen, habe ich es versucht.
Funktioniert das überhaupt mit Access, wie ich das gern hätte? Muss ich die Beziehungen überarbeiten, damit es funktioniert?
Für einen kleinen Denkanstoß wäre ich sehr dankbar
Viele Grüße
Eisbrecherin
Ich bin gerade etwas am Verzweifeln mit Access 2010. Meine Datenbank besteht aus folgenden Tabellen / Beziehungen:
Sie soll Verträge verwalten zwischen unterschiedlichen Gesellschaften. Alle Gesellschaften sind in tblGesellschaft enthalten.
Jede Gesellschaft kann Empfänger oder Zahlender sein.
tblVertrag enthält alle Verträge, die sich in einzelne Positionen aufteilen (tblVertragPosition). Jede Einzelposition bekommt ein Kennzeichen zugeordnet (=Art der Leistung). Alle Kennzeichen sind in tblKennzeichen gespeichert.
Die beiden Tabellen tblKtoEmpfangend und tblKtoZahlend enthalten die Info, welches Konto für welche Kombination Gesellschaft und Kennzeichen verwendet werden soll.
tblSteuer und tblMonat enthalten Kennzeichen für die einzelnen Steuerarten und Monate.
Wird ein Vertrag angelegt, müssen Empfänger und Zahlender festgelegt werden. Aus diesen beiden und dem Kennzeichen in tblVertragPosition ergibt sich dann das jeweilige Konto aus tblKtoEmpfangend bzw. tblKtoZahlend.
Ich möchte jetzt einen Bericht zu den Verträgen mit Einzelpositionen, in dem für jede Einzelposition das korrekte Konto enthalten ist inkl. Name der Gesellschaften und Name der Kennzeichen, mit Angabe von Steuer und Monat.
Ich habe schon gestern den ganzen Tag mit sämtlichen JOIN Arten experimentiert. Die Art, wie Access dann noch Klammern darum möchte, macht es auch nicht gerade einfacher. Auch mit einzelnen Unterabfragen, die dann in die Hauptabfrage laufen, habe ich es versucht.
Funktioniert das überhaupt mit Access, wie ich das gern hätte? Muss ich die Beziehungen überarbeiten, damit es funktioniert?
Für einen kleinen Denkanstoß wäre ich sehr dankbar
Viele Grüße
Eisbrecherin
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 246571
Url: https://administrator.de/forum/access-2010-abfrage-ueber-mehrere-tabellen-246571.html
Ausgedruckt am: 09.01.2025 um 03:01 Uhr
12 Kommentare
Neuester Kommentar
Moin Eisbrecherin,
poste doch mal das generierte Statement, dann rücken wir das zurecht.
Und zum Verständnis:
In deinen Tabellen ist die Verknüpfung zu den Dimensionstabellen ja notgedrungen immer über diese ID-Felder, beispielsweise
steht in tblGesellschaft ja ein Feld "ID" und ein Feld "NameGes".
Die Verknüpfung zu (bspw.) tblKtoEmpfangend geht dann über das Feld "tblKtoEmpfangend GesellName", welches unabhängig vom Feldname in Wirklichkeit eine ID enthält, die auf "tblGesellschaft ID" refernziert????
Ich finde das DB-Modell nicht in Ordnung...zu viele irreführende Feldnamen, zu viele künstliche IDs.
Wonach sind denn die Vertragspositionen geordnet? Ich sehe da zwar den FK auf den zugehörigen Vertrag, aber keine "laufende Nummer" für Position 1, 2, 3....?
P.S. Aber deine verbale Beschreibung des Sachverhalts ist wirklich vorbildlich!
Grüße
Biber
poste doch mal das generierte Statement, dann rücken wir das zurecht.
Und zum Verständnis:
In deinen Tabellen ist die Verknüpfung zu den Dimensionstabellen ja notgedrungen immer über diese ID-Felder, beispielsweise
steht in tblGesellschaft ja ein Feld "ID" und ein Feld "NameGes".
Die Verknüpfung zu (bspw.) tblKtoEmpfangend geht dann über das Feld "tblKtoEmpfangend GesellName", welches unabhängig vom Feldname in Wirklichkeit eine ID enthält, die auf "tblGesellschaft ID" refernziert????
Ich finde das DB-Modell nicht in Ordnung...zu viele irreführende Feldnamen, zu viele künstliche IDs.
Wonach sind denn die Vertragspositionen geordnet? Ich sehe da zwar den FK auf den zugehörigen Vertrag, aber keine "laufende Nummer" für Position 1, 2, 3....?
P.S. Aber deine verbale Beschreibung des Sachverhalts ist wirklich vorbildlich!
Grüße
Biber
Du solltest noch die Kardinalitäten für die FKs richtig einstellen bzw die referenzielle Integrität einschalten (ohne Löschweitergabe), dann ist das schon mal sauber - und Access bastelt schönere JOINs
Ggfs. kannst du noch die Tabellen tblKtoiEmpfangend mit tblKontoZahlend und die KZ und Zahl Tabellen zu jeweils einer Tabelle zusammen führen (dann wird der Select auch schon übersichtlicher)
/EDIT:
Ggfs. kannst du noch die Tabellen tblKtoiEmpfangend mit tblKontoZahlend und die KZ und Zahl Tabellen zu jeweils einer Tabelle zusammen führen (dann wird der Select auch schon übersichtlicher)
/EDIT:
P.S. Aber deine verbale Beschreibung des Sachverhalts ist wirklich vorbildlich!
Dem kann ich nur zustimmen - das liest sich wie eine Klausuraufgabe :P
Moin Eisbrecherin,
leider muss ich jetzt mal das Wochenende vorbereiten und dich mit deinem Elend etwas alleine lassen.
Aber als Hinweis, bis ich wieder mal einen Rechner anschalte:
- stell die Abfragereihenfolge mal vom Kopf auf die Füsse - das generierte Statement nimmt als "zentrale Tabelle" für den ganzen Aufbau die "tblKennzeichen".... das kann nicht gutgehen.
Die "zentrale Tabelle", die als erstes genannt werden muss in dem ganzen FROM... INNER JOIN..INNER JOIN -Rattenschawanz ist die "tblVertragPosition", damit geht es los.
Das FROM sollte dann also von dieser Tabelle aus -beim Testen schrittweise, Verknüpfung um Verknüfung vorgehen:
Und zum Testen erstmal mit einer WHERE-Bedingung "WHERE v=ID = 4711" oder eine andere Vertragsnummer, die existiert
Natürlich auch statt v.*, vpos.* usw nur die Felder, die du auch brauchst.
Ich klinke mich gern wieder ein, aber nicht in den nächsten 20 Stunden.
Grüße
Biber
leider muss ich jetzt mal das Wochenende vorbereiten und dich mit deinem Elend etwas alleine lassen.
Aber als Hinweis, bis ich wieder mal einen Rechner anschalte:
- stell die Abfragereihenfolge mal vom Kopf auf die Füsse - das generierte Statement nimmt als "zentrale Tabelle" für den ganzen Aufbau die "tblKennzeichen".... das kann nicht gutgehen.
Die "zentrale Tabelle", die als erstes genannt werden muss in dem ganzen FROM... INNER JOIN..INNER JOIN -Rattenschawanz ist die "tblVertragPosition", damit geht es los.
Das FROM sollte dann also von dieser Tabelle aus -beim Testen schrittweise, Verknüpfung um Verknüfung vorgehen:
-- nur ein Anfang ...
SELECT v.*, vpos.* , m.*
FROM tblVertragPosition vpos
INNER JOIN tblMonat m ON m.ID = vpos.fk_Div
INNER JOIN tblVertrag v ON v.ID = vpos.fk_vertrag
...usw.
Und zum Testen erstmal mit einer WHERE-Bedingung "WHERE v=ID = 4711" oder eine andere Vertragsnummer, die existiert
Natürlich auch statt v.*, vpos.* usw nur die Felder, die du auch brauchst.
Ich klinke mich gern wieder ein, aber nicht in den nächsten 20 Stunden.
Grüße
Biber
Moin Eisbrecherin,
Ich denke, du bist auf dem richtigen Weg.
Wenn es zu holzig wird, dann kannst du mir auch den aktuellen Stand per Mail (Adresse in meinem Profil) senden.
Viel Glück
Biber
Zitat von @Eisbrecherin:
...
Es ist noch nicht alles drin, aber der Teil zumindest funktioniert schon mal.
So war der Plan, und ich denke, dieses Vorgehen hilft dir auch für die nächsten 20 Statements....
Es ist noch nicht alles drin, aber der Teil zumindest funktioniert schon mal.
Ich denke, du bist auf dem richtigen Weg.
Wenn mich Access komplett in den Wahnsinn treibt, wird der Rest hoffentlich auch noch
Hoffentlich auch, wenn dich Access NICHT in den Wahnsinn treibt. Ich markiere jetzt erst mal als gelöst, sollte es doch nicht so wollen wie ich melde ich mich nochmal.
Ich sage es voraus: Wenn das Statement drei DIN-A4-Seiten lang ist und nur noch eine einzige Tabelle drangeflanscht werden soll, dann wird dir Access mit einer lapidaren Meldung "Ungültige Anweisung in Nähe von ")", ankommen und du wirst schreien. Wenn es zu holzig wird, dann kannst du mir auch den aktuellen Stand per Mail (Adresse in meinem Profil) senden.
Viel Glück
Biber