Automatische Tabellenerstellung

Hallo,

ich erstelle für eine Firma eine Personaldatenbank. Die Stammdaten sind schon alle vorhanden in der Tabelle, nun sollen aber noch Gehaltsdaten monatlich in einer Tabelle gespeichert werden. Wie kann ich monatlich eine neue Tabelle erstellen lassen, in der Perosnalnummer, Name und Vorname des Mitarbeiters aus der Personaltabelle verwendet werden und neue Spalten (Gehalt, Zulagen etc.) hinzugefügt werden?
vielen Dank für Antworten
Markus

Moien,

mein armer Magen ;o) du willst doch nicht wirklich jeden Monat eine neue Tabelle erstellen???

Bemüh dich besser erstmal um ein vernünftiges Tabellendesign.

Gruß

Bernd

Hallo,

Hallo!

ich erstelle für eine Firma eine Personaldatenbank. Die
Stammdaten sind schon alle vorhanden in der Tabelle, nun
sollen aber noch Gehaltsdaten monatlich in einer Tabelle
gespeichert werden.

Ich denke es handelt sich um die Sicherung von alten Gehaltszahlungen, die ohne Zwischenspeicherung in einer Tabelle nicht mehr vorhanden wären. Ansonsten den Ratschlag von Schalker1967 zu Herzen nehmen.

Wie kann ich monatlich eine neue Tabelleerstellen lassen, in der Perosnalnummer, Name und Vorname des
Mitarbeiters aus der Personaltabelle verwendet werden und neue
Spalten (Gehalt, Zulagen etc.) hinzugefügt werden?

Die Lösung ist eine Tabellenerstellungsabfrage.
Dass man nicht jeden Monat in der Entwurfsansicht den Namen der Zieltabelle ändern muss, macht es sich besser die Abfrage per VBA zu erzeugen und hier den Namen der Gehaltstabelle im Code zu erzeugen.

Für den Fall, dass die Gehälter noch nirgends in der Datenbank erfasst wurden, müssen in der Abfrage die erforderlichen Leerfelder (z.B. Gehalt und Zulage) hinzugefügt und mit einem Leerwert belegt werden.

Das „Round(Null,2)“ im u.g. Code stellt z.B. sicher dass die Tabellenfelder mit einem Zahlenformat mit 2 Nachkommastellen belegt werden. Textfelder könnte man erzeugen, indem man den Feldwert mit einer leeren Zeichenfolge belegt ( „“ ).

Eine Lösung könnte so aussehen:

Sub MonatlicheGehaltsliste()
Dim TabName As String
Dim SQLStr As String
TabName = „Gehälter_“ & Month(Now()) & „_“ & Year(Now())
'nächster Befehl kann weggelassen werden, wenn keine manuelle Änderung erforderlich
TabName = InputBox(„Name der Gehaltsliste eingeben:“, „Gehaltsliste“, TabName)

SQLStr = "SELECT Personalnummer, Name, Vorname, Round(Null,2) AS Gehalt, "
SQLStr = SQLStr & „Round(Null,2) AS Zulage INTO " & TabName & " FROM Personaldaten“
On Error GoTo Fehler
DoCmd.RunSQL SQLStr
On Error GoTo 0
MsgBox „monatliche Gehaltsliste wurde erzeugt!“
Exit Sub

Fehler:
MsgBox „Fehler beim Erstellen der Gehaltsliste!“
End Sub

Kommt es ganz genau auf die Feldformatierung bzw. Feldtypen der neuen Felder an, so kann man alternativ zunächst mit dem SQL-Befehl „CREATETABLE“ (Strukur sh. Access-Hilfe oder googlen) eine Tabelle nach seinen Wünschen erzeugen und dann mit einer Aktualisierungsabfrage („INSERT INTO“) diese mit den schon vorhandenen Werten füllen.

Falls die Gehälter schon in einer Tabelle der Datenbank vorhanden sind, muss die Abfrage entsprechend angepasst werden. Wichtig ist aber immer der Ausdruck „SELECT … INTO…“, um aus den Abfragewerten eine neue Tabelle zu erzeugen.

Gruß, tester.

Moien,

Ich denke es handelt sich um die Sicherung von alten
Gehaltszahlungen, die ohne Zwischenspeicherung in einer
Tabelle nicht mehr vorhanden wären.

Aber selbst dann legt man nicht jedesmal eine neue Tabelle an - SCHLIMMER geht es ja gar net!

Entweder eine Tabelle als historie anlegen oder - eigentlich das sinnigere - in einer Tabelle z. B. ein Datumsfeld für den Zahlungszeitpunkt einfügen, oder, oder - aber NIEMALS immer neue Tabellen anlegen…

Bernd

hmm, finde es ja auch nicht komfortabel. Aber man sollte jeden Monat zurückverfolgen, wieviel bezahlt wurde. Was meinst du mit als historie anlegen? Wenn ich ein Datumsfeld für den Zahlungszeitpunkt habe, dann steht da ja nur wann gezahlt wurde, aber nicht wieviel im einzelnen. Was würdest du mir empfehlen?
Vielen Dak für deine Hilfe
Markus

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

Aber selbst dann legt man nicht jedesmal eine neue Tabelle an

  • SCHLIMMER geht es ja gar net!

Hallo Schalker1967,

letztendlich kann man ohne weitere Infos von Markus nicht erkennen, welche Lösung die beste wäre und ob sich die Erstellung von neuen Tabellen vermeiden lässt.

Ich kenne durchaus Datenbanken bei denen die Erstellung einer zusätzlichen Tabelle zur Zwischensicherung erforderlich ist.
Beispielsweise eine professionelle Datenbank aus der für ca. 8000 eingetragene Personen zu verschiedenen Stichtagen 5-seitige Schreiben gedruckt werden. Eine Kopie der Schreiben wäre Materialverschwendung; ein späterer Aufruf der Schreiben ist nicht möglich, da im Programm keine Sicherung der Druckdaten vorgesehen ist und die Daten ständigen Änderungen unterliegen.
Hier bleibt auch nur die Möglichkeit vor Druck die Druckdaten extern abzufragen und in neuen Tabellen zu sichern.
Und eine Historie oder eine Tabelle mit Datumsfeld wird sicherlich auch nicht viel weniger Speicherplatz brauchen.

Überlegenswert wäre aber durchaus die ausgelagerte Speicherung in einer externen Datenbank oder in einem Exportformat wie csv, txt. Und natürlich müssten in gewissen Zeitabständen (ur)alte Stände auch mal gelöscht werden.

tester!