Update Abfrage Datum in Zeiterfassung

illyknilly

Neuer Benutzer
Beiträge
3
Hallo Spezies,

ich bin neu im Forum und habe direkt mal eine Frage (ich versuche mich kurz zu halten):

Ich soll ein kleines Zeiterfassungsprogramm in Access "basteln". Meine Frage ist:

Mitarbeiter gibt folgendes ein: 23.03.2017 (Datum) 8:00 Uhr (Startzeit) bis 16:00 Uhr (Ende der Arbeitszeit). Fertig.
Im nachhinein fällt Ihm zwei Wochen später ein, dass er an diesem besagten Datum (23.03.2017) falsche Angaben gemacht hat. Jetzt soll er über einen Button "BEARBEITEN" die Möglichkeit bekommen, das Datum einzugeben und dann die geänderte Arbeitszeiten einfügen. Z.B. 8:00 bis 13:00 Uhr und als neuen Datensatz von 14:00 bis 16:00 Uhr. Dies soll mit einer SQL-Syntax im Hitergrund gemacht werden. Ich dachte da an eine UPDATE-Anweisung. Bitte verbessert mich und über einen Supervorschlag wäre ich echt froh - richtig froh

Grüße
 
Werbung:
Hallo akretschmer,

hey, das ging ja schnell. Da bin ich ja schonmal auf der richtigen Spur. Könntest Du oder Ihr mir mal ein Bespiel zeigen, an dem ich die Syntax sehen kann? Vielen Dank.

Gruß

Chris
 
Na gut, aber nur, weil Du es bist.

Code:
test=# create table zeiterfassung (name text, von_bis tsrange);
CREATE TABLE
test=*# insert into zeiterfassung values ('illyknilly', '[2017-03-23 08:00:00,2017-03-23 16:00:00)');
INSERT 0 1
test=*# update zeiterfassung set von_bis = '[2017-03-23 08:00:00,2017-03-23 13:00:00)' where name='illyknilly' and von_bis='[2017-03-23 08:00:00,2017-03-23 16:00:00)';
UPDATE 1
test=*# insert into zeiterfassung values ('illyknilly', '[2017-03-23 14:00:00,2017-03-23 16:00:00)');
INSERT 0 1
test=*# select * from zeiterfassung ;
  name  |  von_bis   
------------+-----------------------------------------------
 illyknilly | ["2017-03-23 08:00:00","2017-03-23 13:00:00")
 illyknilly | ["2017-03-23 14:00:00","2017-03-23 16:00:00")
(2 Zeilen)

test=*#

Hint: ich verwende PostgreSQL und dessen Datentypen, hier TSRANGE. Im realen Leben sollte die Tabelle aber besser aufgebaut sein, mit einem PK, einem FK auf die Personendaten und vielleicht noch passenden Constraints (z.B. das eine Person keine sich überlappenden Zeiträume angeben darf, daß der Anwesend-Zeitraum einen Mindest- und einen Maximalwert hat etc.)
 
Super! Danke! Davon lebt so ein Forum. Menschen, die ernsthaft daran interessiert sind Anderen zu helfen.

Letzte Frage:

Mit welcher Abfrage kann ich ein fehlendes Datum einfügen? Wenn der Mitarbeiter z.B. am 23.03.2017 und am 25.03.2017 Arbeitszeiten einträgt aber den 24.03.2017 vergessen hat. Das Datum soll auch definitiv zwischen die beiden Tage rutschen. Geht das auch mit Update-Syntax? Und danke nochmal

Gruß
 
Du lebst in der falschen Annahme, das die Datensätze einer Tabelle einer natürlichen Ordnung unterliegen. Dem ist nicht so.

Code:
test=*# create table order_demo(id int, name text);
CREATE TABLE
test=*# insert into order_demo values (1, 'name1');
INSERT 0 1
test=*# insert into order_demo values (2, 'falsch');
INSERT 0 1
test=*# insert into order_demo values (3, 'name3');
INSERT 0 1
test=*# select * from order_demo ;
 id |  name  
----+--------
  1 | name1
  2 | falsch
  3 | name3
(3 Zeilen)

test=*# update order_demo set name = 'name2' where id = 2;
UPDATE 1
test=*# select * from order_demo ;
 id | name  
----+-------
  1 | name1
  3 | name3
  2 | name2
(3 Zeilen)

test=*#

Wenn Du möchtest, daß die Ergebnisse in einer definierten Ordnung - hier z.B. nach der ID - aus der Tabelle purzeln, so ist dies der DB mitzuteilen:

Code:
test=*# select * from order_demo order by id;
 id | name  
----+-------
  1 | name1
  2 | name2
  3 | name3
(3 Zeilen)

test=*#
 
Werbung:
Um den fehlenden Eintrag zu ergänzen müsstest du einen INSERT mit dem passenden Datum machen. Deine Datenbank weiß aber natürlich zunächst mal nicht, das der 24.03.2017 ein Arbeitstag hätte sein sollen und kann daher nicht so einfach einen Eintrag ergänzen.

Zumal ein Eintrag nur Sinn macht, wenn er Informationen enthält. Willst du nur in einer Auswertung sehen das dort an einem Werktag bisher keine Zeit erfasst wurde, bietet es sich eher an das in dem Select für die Auswertung zu machen. Das ginge in MSSQL rechte elegant, in Access brauchst du dafür glaube ich eine Hilfstabelle mit allen Arbeitstagen.
 
Zurück
Oben