online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon Inka2007 vom 12.12.2019, 10:23 Options

Historie für Feld in Access (Mitarbeiterkariere in Personaldatenbank)

Hallo!

Ich habe eine Personaldatenbank. Für jeden Mitarbeiter gibt es einen Datensatz. Dort ist abgelegt unter Postision, welche Stelle der Mitarbeiter bekleidet. In einem zweiten Feld ist dann abgelegt seit wann er diese Position ausübt.

Ich möchte, wenn sich die Position des mitarbeiters im Unternehmen ändert (beförderung etc.), dass man in einer Art Historie oder Lebenslauf den Werdegang des Mitarbeiter verfolgen kann. Z.B.

seit 1997 Sachbearbeiter
seit 1999 stellv. teamleiter
seit 2003 Teamleiter

Das könnte man natürlich auch händsich eintragen, aber vielleicht findet jemand von Euch ja einen eleganteren Weg. Ich stelle mir vor, dass man auf eine Schaltfläche klickt "neue Position eingeben" daruf hin wird der Inhalt des Feldes "Position" und des Feldes "seit" in die Historie übertragen in den Felder "Position" und "seit" können die neuen Angaben dann eingetragen werden.

Wäre super spitze, wenn mir jemand da einen groben Bauplan zu schildern könnte!

Grüße!

Inka


Antwort schreiben

Antwort 1 von Marie vom 12.12.2019, 12:40 Options

na bei Änderung des entsprechenden Feldes schreibst Du Me!seit = Year(Date)

Private Sub neudatum_AfterUpdate()
Me!seit = Year(Date)
End Sub

und genauso nacch Aktualisierung des anderen Feldes

Private Sub neuePosition_AfterUpdate()
Me!Position = Me!neuePosition
End Sub

Gruß Marie

Antwort 2 von Inka2007 vom 12.12.2019, 13:25 Options

Das ging ja fix! Danke Marie!
Ist aber leider nicht ganz das was ich suche. Jedes Mal wenn ich das Feld neuePosition wieder aktualisiere wird der vorher ins altePositionen über tragene Wert wieder überschrieben. Ich brauche aber alle alten Werte nicht nur den letzten in einer Art Liste.

Ich probier jetzt mal hin und her, aber wär super wenn jemand ne direkte Lösung für hätte!

Inka

Antwort 3 von Teddy7 vom 12.12.2019, 13:51 Options

Hallo Inka !

Du hast m.E. nur eine Chance, wenn Du den Datensatz duplizierst, einen auf das Tagesdatum als "gültig ab" änderst und in dem anderen "gültig bis" setzt.

Das macht man am besten mit VBA-Code.

Gruß
Teddy

Antwort 4 von Inka2007 vom 12.12.2019, 16:28 Options

Hm, gleich ein ganzer DS?
Ich hatte jetzt die Idee, dass ich weitere Steuerelement mit den Namen altPosition1, als Position2, altPosition3 einfüge, die ich dann im Formular unsichtbar mache.

Ich dachte man könnte soetwas in dieser Richtung in VBA schreiben:

bei Klick auf Schaltfläche neuer "Eintrag"

wenn altPosition1 schon einen Wert enthält schreibe den Wert aus neuePosition in das Feld altPosition2

sonst altPosition1=neue Position

wenn altPosition2 schon einen Wert enthält, dann schreibe den Wert aus neue Position in das Feld aldPosition3

sonst altPosition2=neuePosition


Das heir habe probiert, klappt natürlich nicht :(

Private Sub neueEingaben_Click()

If altFunktion1 = " " Then
Me!altFunktion2 = Me!Funktion
Else
Me!altFunktion1 = Me!Funktion

End If
End Sub

Die Felder alt Position1 bis altPositionX kann man dann ja in einem Textfeld zusammenfassen, oder? Dann wäre das sowas wie eine Auflistung.

Man merkt meine Ahnung in VBA liegt faktisch bei Null.

Mein Chef will aber unbedingt so eine Historie, ahh!

Antwort 5 von Teddy7 vom 12.12.2019, 18:53 Options

Es gibt grundsätzlich 2 Möglichkeiten.
Entweder der ganze Datensatz, oder eine zweite Tabelle, in die man den Schlüssel, den Feldnamen, alterWert, neuerWert, geändert von und geändert am speichert.
Der Code sieht dann etwa so aus:
Dim i1 As Integer
Dim ktab1 As String
Dim ttab1 As DAO.Recordset
Set ttab1 = CurrentDb.OpenRecordset("Select * from tblÄnderungen", dbOpenDynaset)

if AltePosition <> Position then

ttab1.AddNew
ttab1!Schlüssel = PersonalNr
ttab1!Feldname = "Position"
ttab1!alterWert = AltePosition
ttab1!neuerWert = Position
.....usw......

ttab1.Update
end if

..........und das für jedes relevante Feld...............

ttab1.Close
Set ttab1 = Nothing


Natürlich muß man sich beim Anzeigen die alten Werte wegspeichern.

Gruß
Teddy

Antwort 6 von Inka2007 vom 13.12.2019, 10:46 Options

Hallo Tedddy!

Muss ich denn von einezuerst neue Tabelle erstellen? Passiert das allein durch diesen Code? An welcher Stelle geb ich den Code denn ein? Ich versteh das versteh irgendwie nicht. Ist doch zum verzweifeln.

Ich habe das jetzt mal so versucht:

Private Sub neueEingaben_Click()

Dim i1 As Integer
Dim ktab1 As String
Dim ttab1 As DAO.Recordset
Set ttab1 = CurrentDb.OpenRecordset("Select * from tblNeueingaben", dbOpenDynaset)

if AltFunkion1 <> Funktion then

ttab1.AddNew
ttab1!Schlüssel = AutoWert

..bes gibt keine Personalnummern in der DB...

ttab1!Feldname = "Funktion"
ttab1!alterWert = altFunktion1
ttab1!neuerWert = Funktion

ttab1.Update
end if

ttab1.Close
Set ttab1 = Nothing

End Sub

Der stört sich am DAO.Recordset (wenn ich DAODB.Recordset eingebe ist der Fehler weg. Dann stört er sich aber am OpenDynaset. Ich weiß echt nicht weiter. Und was ist bitte "ktab1" und "i1"?

Muss ich für jede alte Funkion einen Code schreiben? Ich brauche immer Platz für 3 bis 10 alte Funktionen des
Mitarbeiters.

Wenn es dir nicht aus machst, könntes du mir das mal etwas genauer beschreiben?

Danke!

Antwort 7 von Marie vom 13.12.2019, 12:22 Options

Zitat:
Der stört sich am DAO.Recordset (wenn ich DAODB.Recordset eingebe ist der Fehler weg. Dann stört er sich aber am OpenDynaset.


Bitte nicht schreiben "Der stört sich am", bitte den genauen fehlertext immer schreiben, damit nicht unzählige Rückfragen notwendig sind.

In diesem Fall vermute ich (ich weiss es aber nicht, weil Du den Fehlertext nicht geschrieben hast), dass Du keinen Verweis auf die DAO gesetzt hast.

Allerdings müsste man dann auch erstmal wissen welche Accessversion Du verwendest.

Geh mal in Module, Entwurf, und klick dann im Menü auf Extras Verweise und klick mal die Microsoft DAO 3.51 Object Library an.

Gruß Marie

Antwort 8 von Inka2007 vom 13.12.2019, 12:36 Options

Hi!
Ich habe den Haken jetzt wie beschrieben auf DAO 3.51 gesetzt und es kommen keine Fehlermeldungen mehr. Jedoch passiert jetzt nach dem klicken auf "neueEingaben" schlicht gar nichts. Hab ich noch was vergessen, oder wo finde ich die altFunktion jetzt?

Das ist hier mein jetziger Code:

Private Sub neueEingaben_Click()
Dim i1 As Integer
Dim ktab1 As String
Dim ttab1 As DAO.Recordset
Set ttab1 = CurrentDb.OpenRecordset("Select * from tblÄnderungen", dbOpenDynaset)

If altFunktion1 <> Funktion Then

ttab1.AddNew
ttab1!Schlüssel = AutoWert
ttab1!Feldname = "Funktion"
ttab1!alterWert = altFunktion1
ttab1!neuerWert = Funktion

ttab1.Update
End If

ttab1.Close
Set ttab1 = Nothing
End Sub

Was muss ich nun machen?

Antwort 9 von Teddy7 vom 13.12.2019, 13:17 Options

1) Tabelle anlegen

2) ktab1 und i1 kannst Du löschen

3) beim Anzeigen mußt Du den alten Wert aller Felder zwischenspeichern

4) der Code muß ausgeführt werden nach Änderung - also entweder für jedes einzelne Feld (dann kann man vielleicht eine function daraus machen), oder beim verlassen des Formulars, oder ........

5) Du solltest Dich schon mit VBA beschäftigen. Es ist sehr gefährlich VBA-Code einzusetzen, ohne zu wissen, was der macht

Antwort 10 von Inka2007 vom 13.12.2019, 16:30 Options

Es geht! Supi! Danke für eure Nerven!
Schaut jetzt so aus:


Private Sub neueEingaben_Click()

Dim ttab1 As DAO.Recordset
Set ttab1 = CurrentDb.OpenRecordset("Select * from tblÄnderungen", dbOpenDynaset)

ttab1.AddNew
ttab1!Schlüssel = AutoWert
ttab1!Name = Me!Name
ttab1!Vorname = Me!Vorname
ttab1!seit = Me!seit
ttab1!Abteilung = Me!Abteilung
ttab1!Funktion = Me!Funktion


ttab1.Update
ttab1.Close
Set ttab1 = Nothing

Me![Mitarbeiterhistorie].Form.Requery

End Sub

Habe das ganze als Unterformular "Mitarbeiterhistorie" in mein Hauptformular hinein gebastelt!

@Teddy: Naja, manchmal kapier ich VBA nich auf Anhieb -alles was ich weiß, hab ich mir selbst irgendwie durch nachlesen und abgucken beigebracht. Habe aber noch soooone Lücken und lerne jeden Tag neu dazu.

Das wars denn jetzt auch von mir!

Antwort 11 von Inka2007 vom 17.12.2019, 16:08 Options

Hallo nochmal!

Ich habe jetzt ein neues Problem, was mit meiner Historie (s.o) zusammenhängt.

Ich möchte gerne die Daten zu einem Mitarbeiter in einem Bericht (eine Art Kartei) drucken. Ich habe dazu einen Button angelegt und dahinter einen Code, dass der aktuell im Formular angezeigte Datensatz gedruckt /bzw. angezeigt werden soll.

Das sieht so aus:

Private Sub Karteiansehen_Click()

If Auswahl = 1 Then

Dim stDocName As String
Dim sMyFilter As String

sMyFilter = "AutoWert =" & Me!AutoWert
stDocName = "Karteikarte"
DoCmd.OpenReport stDocName, acPreview, , sMyFilter

Else

sMyFilter = "AutoWert =" & Me!AutoWert
stDocName = "Karteikarteohne"
DoCmd.OpenReport stDocName, acPreview, , sMyFilter

End If

Exit_Karteikarte_Click:
Exit Sub

Err_Karteikarte_Click:
MsgBox Err.Description
Resume Exit_Karteikarte_Click
End Sub

Ich habe um den Datensatz zu identifizieren den Autowert genommen. Das Problem ist, dass er mir nun auch für jeden Datensatz mit Autowert im Unterformular (Historie) einen Bericht anzeigt. Das Unterformular ist über den Autowert mit dem Hauptformular verknüpft. Das ist auch logisch, aber kann mir jemand sagen, wie er nur einen Bericht druckt. Gibt es eine Möglichkeit ihm zu sagen, dass er nur den ersten Datensatz als Bericht anzeigen soll oder nicht auf Autowerte im Unterformular zurück greifen soll. Ist nämlich unpraktisch, wenn ich jedesmal die gleiche Kartei x-mal ausdrucken muss mit den gleichen Inhalten.

Ich hoffe, das war halbwegs vertändlich.

Gruß Inka

Antwort 12 von Teddy7 vom 17.12.2019, 16:48 Options

1)
Dim stDocName As String
Dim sMyFilter As String

dann erst
If Auswahl = 1 Then

2) wo ist denn der Knopf ? Me..... sagt ja nur, der Autowert steht im gerade aktiven Formular.

Das Feld Autowert im Hauptformular sollte ja anders heißen als der Autowert im UF.
Dieser Feldname muß mitgegeben werden.

Gruß
Teddy

Antwort 13 von Inka2007 vom 17.12.2019, 16:53 Options

Huhu!
1) habe ich geändertm acht aber irgendwie keinen Unterschied
2) Der Button ist auf dem Hauptformular wo auch das Unterformular eingebaut ist.

Im Hauptformular heißt das feld Autowert, im Unterformular heißt das damit vernüpfte Feld aber Schlüssel.

Antwort 14 von Teddy7 vom 18.12.2019, 13:05 Options

Und wie sieht die Datenquelle des Berichts aus ?

Antwort 15 von Inka2007 vom 18.12.2019, 13:12 Options

Die Daten stammen aus der Tabelle "Personaldatenblatt" die mit Hilfe des Hauptformulars "Personaldaten" gespeist wird. Ich habe in dem Bericht allerding auch noch einen Unterbericht mit der Mitarbeiterhistorie, welches aus der Tabelle "tbl.Änderungen" gespeist wird.

Ich hoffe, das ist das was du wissen wolltest.

Gruß

Antwort 16 von Teddy7 vom 18.12.2019, 15:16 Options

Ich nehme mal an, dass Dein Problem aus diesem Unterbericht resultiert. Vielleicht ist da die Zuordnung nicht in Ordnung.
Kopier doch mal den Bericht und schmeiß in der Kopie den Unterbericht raus.

Kommen jetzt immer noch falsche "Autowerte" ?

Gruß
Teddy

Antwort 17 von Inka2007 vom 18.12.2019, 17:43 Options

Huhu,

das brints auch nicht. Ich schätze mal, dass das daran liegt, das die Tabellen Personaldaten mit der Tabelle Änderung über den Autowert bzw. den Schlüssel mit einander veknüft sind. Bei Personaldaten ist der Autowert ein Primärschlüssel, daher dürfte er zu jedem Autowert nur einen Datensatz anzeigen. Das Feld Schlüssel in der tblÄnderung ist aber kein Primärschlüssel. Darf er auch nicht sein, weil sonst funktioniert die Historie nicht. Ich glaube fast ich muss mich zwischen meiner Historie und der Karteikarte (Bericht) entscheiden oder auf anderem Weg zu meiner Karteikarte kommen... weiß nur nicht wie.

Danke, aber dass du dir über mein Problem Gedanken machst.

Antwort 18 von Teddy7 vom 18.12.2019, 18:31 Options

Wenn nur die Tabellen miteinander verknüpft sind kanns das nicht sein.
Wenn Du aber eine Abfrage als Datenquelle des Berichts hast, in der beide Tabellen miteinander verknüpft sind, dann ist das der Fehler.
Aber das ist jetzt wie Stochern im Nebel.

Wenn Du willst kannst Du mir ausnahmsweise eine Kopie der DB mal zumailen.
Dann aber nur Testdaten drinlassen und gezippt senden.

Schade, dass Du kein Mitglied bist, dann könnte ich Dir über das interne Mitteilungssystem meine mail-Adresse mitteilen.

Gruß
Teddy

Antwort 19 von Inka2007 vom 19.12.2019, 11:58 Options

Hallo Teddy,

kann mich von der Arbeit aus nicht anmelden. Ich werd mich heute Abend anmelden, wenn ichs schaffe. Dann kann ich dir die Datenbank an deine Adresse mailen, hoffe, dass ich das vorm Urlaub noch schaffe, sonst komme ich in der zweiten Januarwoche auf dich zurück.

Gruß Inka

Ähnliche Themen

Zeilenwechsel in Access
thomAs  21.01.2007 - 74 Hits - 2 Antworten

Access
KRD  24.08.2007 - 61 Hits - 3 Antworten

Excel Abfrage mit Verknüpfung von Daten aus 2 Mappen
willymo  29.10.2007 - 336 Hits - 6 Antworten

Probleme beim exportieren von CSV aus Access
Inka2008  29.01.2008 - 215 Hits - 4 Antworten

Wie kann man ein Ja/nein Feld einer Excel Tabelle in Access importieren?
pooyan_5  29.02.2008 - 156 Hits - 3 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Tue Jan 27 23:36:03 2026