Januar 20, 2021, 13:58:25

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Anfügeabfrage | Parameter aus Formular(en)

Begonnen von VIE81, Dezember 17, 2020, 00:00:25

⏪ vorheriges - nächstes ⏩

VIE81

Hallo zusammen!

Ich erstelle gerade eine Kursdatenbank, bei der die Möglichkeit gegeben sein soll, anhand bereits erfasster Kursdaten (Teilnehmer, Kurstage inkl. Dauer bzw. Stundenangabe - jeweils in separaten Tabellen) automatisiert Datensätze in eine Tabelle mit Anwesenheiten zu schreiben.

Ich erfasse zunächst die Grunddaten des Kurses (Zeitraum, Thema etc.) und weise dem Kurs dann Teilnehmer zu. Danach erfasse ich den/die Kurstag(e) mit der Angabe der Kursdauer am jeweiligen Tag.

Die Anzeige der Kurstage und der Teilnehmer erfolgt nach der Erfassung in einem UFormular in der Endlosansicht, wobei dieses UFormular nicht für die Erfassung vorgesehen ist. Dies geschieht in separaten Formularen.

Mein Problem bzw. mein "Hänger" ist nun, dass ich nicht weiß, wie ich vorgehen kann/soll, um beim Klick auf einen Button im UFormular "Kurstage" in die Tabelle mit den Anwesenheitsdaten Daten schreiben kann, die für den jeweils ausgewählten Kurstag und je Teilnehmer einen eigenen Datensatz erzeugt.

Tabellenaufbau (ohne Angaben von Datentypen) lautet wie folgt:

tblTNzuKurs
======================
ID
TN_ID (ist die ID aus der "Personenstammdatentabelle")
TN_Zuname
TN_Vorname
TN_GebDatum


tblKurstage
======================
ID
Kurs_ID (ist die ID aus den Grunddaten des Kurses)
Kurs_Kalendertag
Kurs_Dauer_vorgesehen


tblAnwesenheiten
======================
ID
AW_Kurs_ID
AW_Kurstag
AW_TN_ID
AW_Zuname
AW_Vorname
AW_Dauer_vorgesehen
AW_Dauer_anwesend


Vorgehensweise soll also sein, dass beim Klicken auf den Button im Endlosformular die Anwesenheitsdaten der Teilnehmer für den jeweiligen Kurstag automatisch angelegt werden; die Bearbeitung bzw. Erfassung der tatsächlichen Anwesenheitsdauer geschieht dann wieder in einem UFormular.

Kann mir hier vielleicht jemand von Euch helfen, wie ich hier vorgehen kann/soll? Ich habe hier echt eine Denkblockade  :-[  :-\

Danke für Eure Hilfe und viele Grüße,
VIE81

silentwolf

Hallo,
bevor Du Dich mit der Oberfläche Deiner App auseinandersetzt solltest Du Dein Datenmodell zuerst berichtigen.
tblKurs, tblTeilnehmer, tblKursInfos, tblKursTeilnehmer diese als Zwischentabelle also 1:m Beziehung zwischen tblKurs und tblTeilnehmer.
Nun könntest Du einfach die Daten in der tblKursTeilnehmer nach Bedarf eintragen aktualisieren auswerten.

Diese Abfragen kannst Du ohne Probleme mit einen Button steuern egal auf welcher Oberfläche dieser sich befinden mag.
Ich hoffe Dir dabei etwas geholfen zu haben.

Gruß Albert



VIE81

Hallo Albert!

DANKE für Deinen Denkansatz - das funktioniert auch ohne Probleme. Ich glaube, ich habe mich hier missverständlich ausgedrückt...

Die Kursteilnehmer erfasse ich über ein separates Formular, das sich auf die Tabelle tblKurseTeilnehmer bezieht. Hier ist das Feld KursID enthalten, das als Standardwert die KursID aus dem Formular "frmKursDetails" enthält. Das funktioniert auch.

In der Tabelle tblKurstage gibt es natürlich auch das Feld KursID. Die Daten hierfür sind auch wieder in einem versteckten Feld, das den Standardwert aus dem Formular "frmKursDetails" enthält. Somit sind auch hier die entsprechenden Bezugsdaten enthalten.

Mein Problem ist, dass ich nun nicht weiß, wie ich es geschickt anstelle, dass z.B. bei einem Kurs, der sich über 3 Tage erstreckt (z.B. 16.12.2020, 17.12.2020 und 18.12.2020) in der Tabelle tblAnwesenheiten bei z.B. 7 Kurstteilnehmern jeweils 7 Datensätze für den 16., 17. und 18.12.2020 einfügt.

Da hänge ich leider  :(

Danke trotzdem und viele Grüße,
VIE81

DF6GL

Hallo,



Du möchtest festhalten, welcher Teilnehmer bei welchem Kurs an den jeweiligen Veranstaltungstagen anwesend war?


Zeige mal den Screenshot des Beziehungsfensters, mit allen vollständig aufgezogenen Tabellen und Beziehungen

VIE81

Hallo Franz!

Siehe Beilage.

Danke und Viele Grüße,
VIE81

silentwolf

Hallo,
na  hier stimmt das Datenmodell nicht so wirklich.
Ich würde so in der Richtung wie im Anhang anfangen natürlich sind das nocht abgespeckte Tabellen mit nur absolut Essentiellen Informationen.. Das kann aber beliebig und umfangreicher gestalltet werden.

Schau mal was Du davon hältst.
Merkst Du das die Tabellen und Tabellenbezeichnungen und Felder verständlicher Benannt wurden? Das macht es leichter sich in der Datenbankstruktur zurecht zu finden finden. Nur ein Gedanke der Dir vielleicht auch weiter helfen könnte.

Mfg

Albert

VIE81

Hallo Albert!

Ich glaube - bei aller Wertschätzung Deines Beitrages bzw. Denkanstoßes - nicht, dass mich das weiterbringt, da es meiner Meinung nach nicht ein Problem vom Datenmodell ist, zumal ich bei der Zuweisung der Kursteilnehmer die "Personen-ID" bei der Auswahl der Teilnehmer ohnehin mitgebe. -> das funktioniert ohne Probleme.

Auch beim Erfassen der Kurstage gebe ich die "Kurs-ID" im Hintergrund auf den jeweiligen Kurstag mit -> auch das funktioniert ohne Probleme.

Folgende Annahme bzw. Ablauf in einem Hauptformular mit mehreren Registerkarten, das auf der 1. Registerkarte auf die Tabelle "tblKurse" referenziert:

  • Ich erfasse im Hauptformular auf der 1. Registerkarte einen Kurs mit seinen "Grunddaten". Dazu zählt u.a. der Kurstitel, das Start- und Enddatum und die Anzahl der Gesamt-Kursstunden
  • Ich weise dem Kurs die Teilnehmer auf der 2. Registerkarte zu - hierzu habe ich ein eigenes Formular erzeugt, über das ich Teilnehmerdaten mittels cbo in Felder übernehme. Beim Speichern (in die Tabelle "tblTNzuKurs") wird die KursID von der 1. Registerkarte mitgegeben und ein UForm auf der zweiten Registerkarte mit der zugewiesenen Person aktualisiert. Das mache ich so lange, bis ich alle Teilnehmer beisammen habe.
  • Ich erfasse die Kurstage auf der 3. Registerkarte - hierzu habe ich ebenfalls ein eigenes Formular erzeugt, über das ich beim Erfassen (Datum, Beginn- und Endzeit sowie die geplante Anzahl von Tages-Kursstunden) ebenfalls die KursID von der 1. Registerkarte mitgebe.
    Auch hier aktualisiere ich beim Speichern ein UForm auf der 3. Registerkarte ein UForm, in dem mir die Kurstage dann angezeigt werden

Die UForms haben als Datenquelle jeweils eine Abfrage, die als Kriterium wieder die KursID von der 1. Registerkarte haben.

Nun möchte ich - und das ist mein "Problem" oder meine "Anforderung", dass ich über einen Button für jeden einzelnen Kurstag in der Tabelle "tblAnwesenheiten", z.B. bei 7 zugewiesenen Teilnehmern und 3 Kurstagen für jeden erfassten Kurstag die Anzahl von 7 Datensätzen angelegt wird, die den Kurstag und den Teilnehmer sowie die Anzahl der geplanten Tages-Kursstunden beinhalten. In der Tabelle "tblAnwesenheiten" findet sich auch ein Feld "ea_UEabsolviert" - hier erfasse ich dann manuell die tatsächlichen Anwesenheitsstunden des Teilnehmers.

Alles Weitere - Berichtswesen, Kursbestätigungen etc. - ist dann "nur mehr Kosmetik", aber die Problemstellung ansich bleibt leider bestehen  :(

Mein Zugang oder meine Intention dies zu lösen, wäre eben eine Anfügeabfrage in die Tabelle "tblAnwesenheiten", aber hier komme ich nicht weiter, weil ich nicht weiß, wie ich die Kriterien, die so gesehen in zwei Tabellen bzw. Abfragen vorhanden sind so zusammenführen kann, dass eben die Anzahl von Datensätzen (eben wieder z.B. an 3 Kurstagen für jeden der definierten Kurstage eben jene 7 Datensätze mit den Mitarbeiterdaten, den geplanten Tages-Kursstunden am jeweiligen Kurstag) automatisch angelegt werden.

Danke trotzdem für Deine Hilfe - ich habe zwischenzeitlich schon eine andere Idee, wie ich das anstellen kann. Zwar auch zielführend, aber leider nicht so bequem.

Viele Grüße,
VIE81

VIE81

HEUREKA!

Ich habe es geschafft  ;)

Nach ein paar Änderungen bei den Feldbezeichnungen habe ich die Anfügeabfrage zusammengebracht...

INSERT INTO tblKurseAnwesenheiten ( ea_Kurstag, ea_Zuname, ea_Vorname, ea_AkadGrad, ea_Unternehmen, ea_KursID, ea_PersonID, ea_UEvorgesehen )
SELECT tblKurseTage.kt_Kalendertag, tblKurseTeilnehmer.kp_Zuname, tblKurseTeilnehmer.kp_Vorname, tblKurseTeilnehmer.kp_AkadGrad, tblKurseTeilnehmer.kp_Unternehmen, tblKurseTage.kt_KursID, tblKurseTeilnehmer.kp_PersonID, tblKurseTage.kt_UE
FROM tblKurseTage INNER JOIN tblKurseTeilnehmer ON tblKurseTage.kt_KursID = tblKurseTeilnehmer.kp_KursID
WHERE (((tblKurseTage.kt_Kalendertag)=[Formulare]![frm_p_Kurse_Details]![frm_s_Kurse_Kurstage_Liste].[Formular]![kt_Kalendertag]));

Danke für Eure Denkanstöße!

Viele Grüße,
VIE81

silentwolf

Hallo VIE81,

kein Problem freut mich das Du es selbst hinbekommen hast!