Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Update Abfrage Datum in Zeiterfassung

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von illyknilly, 25 April 2017.

  1. illyknilly

    illyknilly Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Absolut korrekt. Und für den neuen Datensatz INSERT.
     
  3. illyknilly

    illyknilly Neuer Benutzer

    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
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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.)
     
  5. illyknilly

    illyknilly Neuer Benutzer

    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ß
     
  6. akretschmer

    akretschmer Datenbank-Guru

    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=*#
    
     
  7. ukulele

    ukulele Datenbank-Guru

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden