Abfrage mehrerer verknüpfter Tabllen

Ich habe mehrere Tabellen die mit 1:n Verbindung verknüpft sind sind. Die erste Tabelle ist 1:n mit der zweiten Tabelle, die zweite Tabelle 1:n mit der dritten Tabelle, usw. verknüpft. Wenn ich mir die erste Tabelle in der Datenblattansicht anschaue und mich durch die Untertabellen/-formulare klicke sieht es für mich so aus, als wäre alles richtig verknüpft.

Das Problem habe ich bei der Erstellung eines Formulares. Ich möchte ein Formular erstellen, bei dem ich Datensätze aus der ersten Tabelle auswählen möchte, ohne die Möglichkeit neue hinzuzufügen. Anschließend möchte ich in dem selben Formular Daten aus der zweiten Tabelle auswählen oder aber auch neue hinzufügen können. Im weiteren verlauf möchte ich aus der dritten Tabelle Daten die an den Datensatz aus der zweiten Tabelle geknüpft sind auswählen oder aber auch neue hinzufügen. Gleiches gilt auch für die vierte Tabelle.

Vielen Dank

Jan

Hallo, Jan!

Vielen Dank

Wofür? Welches Problem hast Du genau? Welche Datenbank verwendest Du?

Ich gehe jetzt mal von Access aus, weil das ein Problem verursacht, mit dem Du konfrontiert sein könntest.

Du hast ein Formular mit Daten aus Tabelle1. Dann möchtest Du ein Endlosformular mit den verknüpften Daten aus Tabelle2. So weit, so kein Problem (mit VerknüpfenVon/VerknüpfenNach des Unterformulars). Problematisch wird’s mit den nächsten Ebenen, denn in einem Endlosformular kann Access kein Endlosunterformular einbauen.

Ich würde mir an dieser Stelle mit drei (oder mehr, je nach Verschachtelungstiefe) Listen anstelle von (Endlos-)Unterformularen helfen. Die Eingaben/Datensatzänderungen werden dann in einen eigenen Eingabedialog ausgelagert. Das Handling erfolgt dann über explizite „Neuer Datensatz“-, „Datensatz löschen“- und sonstige Schaltflächen.

Gruß, Manfred

Hallo Manfred!

Ich verwende Access.Ich habe folgende Tabellen:

1.) tblProjekte: In dieser Tabelle speichere ich projektspezifische Daten, wie zum Beispiel Straße, Ort, PLZ, etc. außerdem noch einen Kundennamen aus der tblKunden und einen Bearbeiter aus der Tabelle tbl Personal.

2.) tblProjektdetails1: hier möchte ich einen Bauabschnitt aus tblBauabschnitte, ein Anfangs- und Enddatum speichern, welches projektbezogen ist, d. h. es sollen mehrere Datensätze aus dieser Tabelle einem Projekt aus tblProjekte zu geordnet werden können.

3.) tblProjektdetails2: hier sollen Datensätze aus mehreren Tabellen abgerufen werden können, sowie Eingaben und Berechnungen durchgeführt werden können. Die Datensätze die ich hier auswähle sollen dann jeweils einem Datensatz aus tblProjektdetails1 zu geordnet werden können.

Letztendlich möchte ich mit meinem Formular folgenden machen:

1.) Auswahl eines Projektes, welches sich in tbl Projekte befindet.

2.) Nach Auswahl des Projektes möchte ich ein DropDown-Feld haben aus dem ich vorhandene Datensätze aus tblProjektdetails1 auswählen kann oder neue anlegen.

3.) Nach der Auswahl unter 2.) möhte ich Datenätze aus tblProjetkdetails2 auswählen können die schon vorhanden sind oder ebenfalls neue hinzufügen.

4.) Eine Anzeige einiger Daten aus tblProjektdetails2 im selben Formular.

Ich möchte nach Möglichkeit keine Endlosformulare verwenden, Ausnahme ist die Anzeige der Daten (Punkt 4.) die in einem Endlosformular dargestellt werden soll.

Mein Problem besteht darin, das ich den Aufbau dieses Formulares nicht hinbekomme, d. h. welche Abfragen muss ich deiner Meinung nach erstellen und sollte ich es vielleicht über Unterformular machen und wenn ja wieviele Unterformular kann oder sollte ich sinnvollerweise verschachteln.

Gruß Jan

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo, Jan!

Nun gut…

1.) Auswahl eines Projektes, welches sich in tbl Projekte
befindet.

Würde ich in einer Kombobox oder Liste ermöglichen.

2.) Nach Auswahl des Projektes möchte ich ein DropDown-Feld
haben aus dem ich vorhandene Datensätze aus tblProjektdetails1
auswählen kann oder neue anlegen.

Würde ich ggf. schon in einer Liste machen. Da Du ja u. U. was neues hinzufügen willst, ist es einfacher, mit einer Liste alles bereits vorhandene anzeigen zu lassen, als dies nur in einer Kombobox zu tun. Das Prinzip bleibt das gleiche. Zum Auswählen würde ein Klick auf die Liste langen, zum Hinzufügen eine Schaltfläche. Datensätze entfernen würde ich über eine weitere Schaltfläche machen oder beim Doppelklick in der Liste.

3.) Nach der Auswahl unter 2.) möhte ich Datenätze aus
tblProjetkdetails2 auswählen können die schon vorhanden sind
oder ebenfalls neue hinzufügen.

Hier gilt oben gesagtes. Liste brauchst Du nicht, wenn Du das eh im Unterformular anzeigen willst. In dem kann man auch besser ändern als in einer Liste…

4.) Eine Anzeige einiger Daten aus tblProjektdetails2 im
selben Formular.

Dies dann ggf. im Unterformular.

Ich möchte nach Möglichkeit keine Endlosformulare verwenden,
Ausnahme ist die Anzeige der Daten (Punkt 4.) die in einem
Endlosformular dargestellt werden soll.
Mein Problem besteht darin, das ich den Aufbau dieses
Formulares nicht hinbekomme, d. h. welche Abfragen muss ich
deiner Meinung nach erstellen und sollte ich es vielleicht
über Unterformular machen und wenn ja wieviele Unterformular
kann oder sollte ich sinnvollerweise verschachteln.

Also: Nimm ein ungebundenes Formular, darauf eine Kombobox cboProjekte, eine Liste lstDetails1, ein Unterformular (Endlos) fsubDetails2. Die Datenquelle von lstDetails1 und dem Unterformular lässt Du leer; sie wird erst nach der jeweiligen Auswahl gesetzt.

Dann ungefähr folgende Codes:

Sub cboProjekte\_AfterUpdate()
 ' Anmerkung: Tabellen- und Feldnamen ggf. anpassen
 ' Datentyp hier Zahl; diesen ggf. auch anpassen
 ' Detailformular: nix anzeigen
 me.fsubDetails2.form.recordsource=""
 if nz(me.cboProjekte,0)=0 then
 ' wenn kein Projekt angewählt, auch leere Liste
 me.lstDetails1.rowsource=""
 else
 ' wenn Projekt, dann die passenden Details
 ' hier ggf. nur die gewünschten Felder einblenden
 ' gebundene Spalte muss die ID des Datensatzes sein.
 me.lstDetails1.rowsource="SELECT \* FROM tblProjektdetails1 WHERE Projektid="& me.cboProjekte
 endif
end sub

sub lstDetails1\_AfterUpdate()
 if nz(me.lstDetails1,0)=0 then
 me.fsubDetails2.form.recordsource="" ' s. o.
 else
 me.fsubDetails2.form.recordsource="SELECT \* FROM tblProjektdetails2 WHERE ProjDetail1="&me.lstDetails1
 endif
end sub

Die Hinzufügen-Schaltfläche öffnen dann jeweils ein Eingabeformular im Dialog. Nach Rückkehr ein Requery auf das entsprechende Steuerelement. Wie immer ungetestet/uncompiliert. So mal ganz grob; langt Dir das?

Gruß, Manfred

Hallo Manfred,

Ich habe das, was du mir vorgeschlagen hast umgesetzt, allerdings bekomme ich folgende Fehlermeldung:

Fehler beim Kompiliere: Sub oder Function nicht definiert.

Habe ich etwas vergessen oder übersehen?

Gruß Jan

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo, Jan!

Ich habe das, was du mir vorgeschlagen hast umgesetzt,
allerdings bekomme ich folgende Fehlermeldung:
Fehler beim Kompiliere: Sub oder Function nicht definiert.

Was ist denn dann markiert? Das ist ja das Problem hier mit dem fehlenden Compiler…

Habe ich etwas vergessen oder übersehen?

Wahrscheinlich nicht.

Gruß, Manfred

Hallo Manfred,

nachdem ich den Code erneute eingeben habe scheint es zu funktionieren, zumindestens bekomme ich keine Fehlermeldung mehr. Ich habe wahrscheinlich beim kopieren des Codes doch irgend einen Fehler gemacht zu haben.

Jetzt muss ich allerdings jedesmal eine Projektid eingeben und ich weiss nicht warum, da ich davon ausgegangen bin, dies mit der Auswahl des Projektes getan zu haben.

Wie kann ich dieses abstellen?

Gruß Jan