Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: ThorG am Juli 17, 2010, 11:39:47

Titel: Neuer Datensatz abhängig vom Datenfeld
Beitrag von: ThorG am Juli 17, 2010, 11:39:47
Liebe Forumsteilnehmer, ich möchte folgendes realisieren und benötige Unterstützung  ;) Ich bastele im Moment an einer Datenbank zur Planung von Qualifizierungsmaßnahmen. In diesem Zusammenhang möchte ich in einem Formular 12 Felder für die Monate anlegen. In jedem Feld soll dann die geplante Stundenzahl abgelegt werden. Wie muss nun der VBA-Code aussehen, der in Abhängigkeit einer Eingabe einen neuen Datensatz in der Tabelle ablegt? Ich stelle es mir so vor, dass zum Beispiel bei einer Eingabe im 3. Feld ein Datensatz mit der Zahl 3 (für März) und der eingegebenen Stundenzahl zusammen mit dem zugehörigen Maßnahmen-Key gespeichert wird. Vielen Dank für Eure Unterstützung.
Titel: Re: Neuer Datensatz abhängig vom Datenfeld
Beitrag von: MzKlMu am Juli 17, 2010, 11:47:57
Hallo,
speichere in einem Feld das Datum für die Maßname, einem feld für die Stunden und in einem weiteren Feld zugehörigen Maßnahmen-Key. Was ist eigentlich mit der person (Key) ? Keine 12 Felder, immer fortlaufend jeden Monat ein Datensatz. Falls kein genauer Termin bekannt ist, nimm einfach den 15. jeden Monats.
12 Felder würden den Regeln eines relationalen Datenmodells nicht entsprechen.
Du hättest auch das Problem beim nächsten Jahr, Du bräuchtest ja eine weitere Tabelle.
Titel: Re: Neuer Datensatz abhängig vom Datenfeld
Beitrag von: ThorG am Juli 17, 2010, 13:16:37
Hallo MzKIMu erst mal DANKE für Deine Antwort. Es handelt sich um eine Zwischentabelle und natürlich wird auch der Personen_Key abgelegt. Ich habe die Zwischentabelle so aufgebaut, dass für jeden Monat (jede Maßnahme u. dazugehörige Person) eine neuer Datensatz angelegt werden soll. Deshalb ist es möglich, dass für eine Maßnahme zwölf Datensätze existieren, sofern sie ein ganzes Jahr andauert. Da auch das Jahr abgelegt wird, ggf. auch mehr Datensätze. Die zwölf Felder will ich ja nur auf dem Formular vorsehen (Übersicht und monatliche Planung). Ich denke, dass ich einen VBA-Code benötige, damit Access den richtigen Monat mitgibt, oder?
Titel: Re: Neuer Datensatz abhängig vom Datenfeld
Beitrag von: DF6GL am Juli 17, 2010, 14:02:43
Hallo,

Zitat"Die zwölf Felder will ich ja nur auf dem Formular vorsehen (Übersicht und monatliche Planung). Ich denke, dass ich einen VBA-Code benötige, damit Access den richtigen Monat mitgibt, oder?"


Wenn die Daten sequentiell (ein Datensatz pro Maßnahme und Person), dann sollte eine Kreuztabellenabfrage für die Darstellung(!) brauchbar sein.  Evtl. ist auch ein Pivot-Formular geeignet.


VBA-Code dürfte in diesem Fall nur wenig benötigt werden.
Titel: Re: Neuer Datensatz abhängig vom Datenfeld
Beitrag von: ThorG am Juli 17, 2010, 14:37:32
Hallo DF6GL, ich benötige nicht nur die Darstellung, sondern zunächst mal die Möglichkeit der Eingabe. Die Führungskräfte sollen diese Daten bei der Maßnahmenplanung erfassen. Der Vorteil von Access ist ja, dass man durch die Formulare den Prozess gestalten kann. Selbstverständlich wäre das Ganze grds. auch durch Tabellen (Excel) machbar. Allerdings deutlich unkomfortabler.
Titel: Re: Neuer Datensatz abhängig vom Datenfeld
Beitrag von: MzKlMu am Juli 17, 2010, 14:44:22
Hallo,
wenn die Daten in der Kreuztabellensicht bearbeitbar sein sollen, sehe ich keine Möglichkeit das mit den 12 Felder im Formular darzustellen.
Ich könnte mir höchtesns 12 Unterformulare vorstellen und in jedem ein Monat anzeigen.
Oder die 12 Felder ungebunden und den Inhalt per Code zuweisen.
Habe ich aber keinen Vorschlag dazu.

Besser wäre es, die Daten der Maßnahme in einem Unterformular als Datensätze anzuzeigen. Im Hafo werden dann die Daten zur Person angezeigt. Die Auswahl der Maßnahme erfolgt mit einem Kombi. Man hat so auf einen Blick welche Maßnahmen kommen und kann auch gleichzeitig nach Jahren, Monaten etc. Filtern.
Das ist nach meiner Auffassung die einfachste Möglichkeit.
Titel: Re: Neuer Datensatz abhängig vom Datenfeld
Beitrag von: ThorG am Juli 17, 2010, 14:47:36
Hallo MzKIMu, letzte Alternative stelle ich mir vor ;)
Titel: Re: Neuer Datensatz abhängig vom Datenfeld
Beitrag von: MzKlMu am Juli 17, 2010, 14:50:10
Hallo,
den Code für die 12 Felder müste ich erst erfinden, da habe ich nichts auf der Pfanne. Da musst Du eventuell auf jemand anderen warten.
Ich habe oben noch was ergänzt, das mit dem einzelnen Ufo.
Titel: Re: Neuer Datensatz abhängig vom Datenfeld
Beitrag von: DF6GL am Juli 17, 2010, 15:35:18
Hallo,

ich denke mal, dass die "12 Felder" (in einem Datensatz) eine grundlegende falsche Basis sind.   Natürlich müssen die Daten vorher erfasst werden, das kann mit einer nomalisierten m:n-Tabelle in einem Endlosform erfolgen.  (wie MzKlMu  es auch beschrieben hat.)

Dabei sollte das "Erfassungsdatum" (eines Datensatzes) immer der Erste eines Monats sein, um Monat und Jahr genau zu definieren und um Mehrfacheinträge für einen bestimmten Monat zu vermeiden.



Die Auswertung/Darstellung der erfassten Daten geschieht dann über die besagte Kreuztabellenabfrage oder ein Pivotformular.


(Von Excel habe ich nichts geschrieben  ;) )

Titel: Re: Neuer Datensatz abhängig vom Datenfeld
Beitrag von: ThorG am Juli 17, 2010, 15:42:47
Smile die 12 Felder sind nicht Bestandteil eines Datensatzes, sondern es handelt sich im Zweifel um 12 Datensätze (wenn eine Maßnahme über ein komplettes Jahr geht) ;)

Über die Idee des Endlosformulars muss ich mal nachdenken.

Der Prozess soll aber so gestaltet sein, dass die Führungskraft die Maßnahme plant bzw. mit dem Mitarbeiter vereinbart und dann die Erfassung vornimmt. Bei der Erfassung legt er Maßnahmendetails etc. fest; u. a. auch für welchen Zeitraum er die Maßnahme plant und wie sich der Zeitaufwand auf die Monate verteilt.
Ich habe also grds. nur ein Erfassungsdatum (ggf. noch ein Datum, wenn nachträglich Änderungen erfolgen). Aus diesem Grund habe ich die Vorstellung, dass im Formular für jeden Monat ein Feld existiert, das aber nicht zwingend ausgefüllt werden muss.
Ich stelle mir 12 Datenfelder (u. a.) auf dem Formular vor (Bezeichnung: Monat Jan - Dez) Im Feld selbst werden nur die geplanten Stunden eingetragen. Access soll dann aber diese Stundenzahl (in Abhängigkeit des Monats) in der Zwischentabelle speichern, dabei muss aber halt eine Kennzeichnung mitgegeben werden. Beispiel geplant Stunden 4,0 im März ... werden im 3. Datenfeld eingetragen ... Access legt es als Datensatz für März ab, weil eben das 3. Datenfeld den März "repräsentiert".
Titel: Re: Neuer Datensatz abhängig vom Datenfeld
Beitrag von: MzKlMu am Juli 17, 2010, 15:43:05
@Franz
ich denke die DB ist schon korrekt aufgebaut als n:m.
ZitatIch habe die Zwischentabelle so aufgebaut, dass für jeden Monat (jede Maßnahme u. dazugehörige Person) eine neuer Datensatz angelegt werden soll. Deshalb ist es möglich, dass für eine Maßnahme zwölf Datensätze existieren, sofern sie ein ganzes Jahr andauert.
Er möchte ja sozusagen das normalisierte Datenmodell vergewaltigen und 12 Datensätze in 12 Feldern anzeigen. Und da sehe ich keine einfache Möglichkeit. Besonders auch weil die Daten ja bearbeitbar sein sollen.
Ich würde das wie vorgeschlagen mit dem Hafo und dem einzelnen Ufo machen. Das ist auch übersichtlich. Zumal man dann ganz einfach den gewünschten Zeitraum filtern kann.

Und wenn für einen Monat nichts geplant ist, wird auch kein Datensatz erfasst.
Titel: Re: Neuer Datensatz abhängig vom Datenfeld
Beitrag von: DF6GL am Juli 17, 2010, 17:45:25
Hallo,

ja, gut, wenn die Tabellen schon normalisiert sind, ist halt die Forderung nach 12 bearbeitbaren Feldern nicht ohne weiteres realisierbar.

Was nicht heißt , dass es nicht ginge, und dann halt mittels ungebundenen Formular, das entspr. programmiert werden muß.
M. E. bringt das aber keinerlei  "Komfort" oder sonstige Vorteile für die Datenbearbeitung. Wie gesagt, DARSTELLEN kann man die Daten sicherlich als Pivot.


Ich weiß jetzt auch nicht, was genau das Problem denn nun ist.





Titel: Re: Neuer Datensatz abhängig vom Datenfeld
Beitrag von: ThorG am Juli 21, 2010, 10:33:19
Hallo,

ich beschreibe mein Problem nochmal etwas genauer. Ich habe grds. zwei Tabellen: tblMitarbeiter (MIT_KEY, usw); tblMassnahme (MA_KEY, usw). Da ein Mitarbeiter mehrere Massnahmen haben kann und umgekehrt habe ich eine Zwischentabelle angelegt, in der neben MIT_KEY und MA_KEY auch noch der zeitliche Aufwand der Massnahme, verteilt auf Monate, abgelegt werden soll.

Das Formular (beabsichtige Darstellung und Bearbeitung) will ich wie folgt aufbauen: tblMitarbeiter und tblMassnahme jeweils als UF und die Zwischentabelle als HF. Die Daten des HF werden als Endlosformular (Vorschlag MzKIMu?) angezeigt. Die Darstellung bereits vorhandener Daten (direkt in die Tabelle geschrieben) funktioniert und ich kann den vorhandenen Datensatz auch bearbeiten. Problematisch wird es wenn ich einen neuen Datensatz anfügen will. In diesem Fall fehlen mir MIT_KEY und MA_KEY. ich habe deshalb folgendes ausprobiert:

Private Sub Befehl10_Click()

Dim sqltext As String

On Error GoTo Err_Befehl10_Click

sqltext = "insert into Mitarbeiter_Massnahme (MIT_MA_KEY, MA_KEY, MIT_KEY, MIT_MA_MONAT, MIT_MA_JAHR, MIT_MA_STUNDEN) values (" & _
           Str(MIT_MA_KEY) & "," & Str(Forms![MITARBEITER_MASSNAHME1]![ufrmMassnahme]!MA_KEY) & "," & Str(Forms![MITARBEITER_MASSNAHME1]![ufrmMITARBEITER]!MIT_KEY) & "," & MIT_MA_MONAT & "," & Str(MIT_MA_JAHR) & "," & Str(MIT_MA_STUNDEN) & ")"
MsgBox sqltext



CurrentDb.Execute (sqltext)

Bekomme dann aber den Fehler "1 Parameter wurde erwartet, aber es wurden zu wenig Parameter übergeben".

Wer hat eine Idee?

Nachtrag: Habe das Problem gelöst.
Titel: Re: Neuer Datensatz abhängig vom Datenfeld
Beitrag von: DF6GL am August 04, 2010, 16:54:29
Hallo,


Zitatwill ich wie folgt aufbauen: tblMitarbeiter und tblMassnahme jeweils als UF und die Zwischentabelle als HF.

ist nicht zu empfehlen. 

Bau ein HF als Einzelform mit Datenherkunft zur Mitarbeitertabelle ("tblMitarbeiter") und mit einem UFO darin, das ein Endlosform mit Datenherkunft zur "Zwischentabelle"  ("tblMitarbeiter_Massnahme") anzeigt.  Verknüpfe dieses über "MIT_MA_KEY" und "MIT_KEY".  Die Auswahl einer Massnahme geschieht über ein Kombi im UFO-Endlosform, das seine Daten aus der Massnahmen(stamm)tabelle bezieht. Die restliche Dateneingabe erfolgt über einfache Textfelder, (die an die entspr. Tabellenfelder gebunden sind).


Dann sind alle "Verbiegungen" über solche Anfügeabfragen überflüssig und die Standardfunktionalität von Access erledigt alles.