Auswertung vom dbf Chaos die 2te ( Arbeitszeit)

zu früh gefreut… irgendwie funzt das noch nicht. es tauchen trotzdem ACCESS einträge auf in denen das wort hintereingang nicht vorkommt

SqlStr = „SELECT DISTINCT NAME, DATE, TIME, ACCESS FROM
Perslog WHERE NAME ‚‘ and WHERE ACCESS = LIKE
‚hintereigang%‘ ORDER BY NAME, DATE, TIME;“

SEHR GUT !!
GERMANY 12 Goal’s

Aber wenn ich mir die Daten so anschaue graut es mich wieder …

einmal kommen 2mal gehen … und so …

mache mir noch paar gedanken und melde mich wieder !!

danke, mfg joe

zu früh gefreut… irgendwie funzt das noch nicht. es tauchen
trotzdem ACCESS einträge auf in denen das wort hintereingang
nicht vorkommt

??? Bei mir nicht.

Aber wenn ich mir die Daten so anschaue graut es mich wieder

einmal kommen 2mal gehen … und so …

Die fehlenden Daten sind eventuell da, aber die Namen stimmen nicht.

Wenn der Name falsch geschrieben ist, wird er anders einsortiert, steht nicht an der Stelle, an die er gehört. Die Fehler müssen 'raus, so geht das nicht. Und ja, Du kannst nur dann eine Aussagekräftige Auswertung liefern, wenn die Daten wirklich vollständig sind, sonst nützt das ganze Programm gar nichts.

Das Problem mit den namen sollte ab April nicht mehr auftauchen.
Da gab es lange ein hin und her…

Es ist doch kein problem in data2 Datensätze einzufügen.
Ich würder gern noch 2 Sachen hinzufügen.

  1. Wenn ein Lesegerät innerhalb 30 Sekunden von der gleichen PErson ein 2tes mal benutzt wird muss dieser Datensatz gelöscht werden.

  2. Wir brauchen noch ein Feld in der MDB namens Fehler oder Error.
    Wenn auf einen Hintereingang aussen wieder ein Hintereingang aussen folgt statt ein Hintereingang innen müsste eine ZEile eingefügt werden mit einem vermerk im error feld … es reicht ja eine 1 für fehler

mfg jonny

Hi,

Das Problem mit den namen sollte ab April nicht mehr
auftauchen.
Da gab es lange ein hin und her…

Ja, sieht so aus. Dann lass uns doch mal die Abfrage nur für einen Monat erstellen. Felder Jahr, Monat und am Besten gleich noch ‚Zeitstempel‘ dazu, die kann man dann beim Kopieren schon mit füllen. Das sind zwar redundante Daten, vereinfachen aber die Abfrage. :smile:

Es ist doch kein problem in data2 Datensätze einzufügen.
Ich würder gern noch 2 Sachen hinzufügen.

  1. Wenn ein Lesegerät innerhalb 30 Sekunden von der gleichen
    PErson ein 2tes mal benutzt wird muss dieser Datensatz
    gelöscht werden.

Das geht nach meiner Meinung nur über eine Schleife.
Alle Datensätze durchrattern, wenn zwei datensätze mit dem selben Inhalt in ACCESS aufeinander folgen die Differenz in Sekunden berechnen und wenn das weniger als … 120? sind, den ersten Datensatz löschen. Das passiert ja nur in der MDB, die Originaldaten bleiben unbehelligt.

  1. Wir brauchen noch ein Feld in der MDB namens Fehler oder
    Error.
    Wenn auf einen Hintereingang aussen wieder ein Hintereingang
    aussen folgt statt ein Hintereingang innen müsste eine ZEile
    eingefügt werden mit einem vermerk im error feld … es reicht
    ja eine 1 für fehler

OK. Die Konsequenz ist, daß Du keine Endsumme berechnen kannst, wenn ein Error vorkommt. :frowning:

Gruß Rainer

OK. Die Konsequenz ist, daß Du keine Endsumme berechnen
kannst, wenn ein Error vorkommt. :frowning:

Richtig. wir können in der Auswertung später eine Zeile einfügen mit dem Vermerk das an diesem Tag keine Richtige Auswertung durchgeführt werden konnte das vergessen wurde den Ausgangsleser zu benutzen.

Gruß Rainer

Richtig. wir können in der Auswertung später eine Zeile
einfügen mit dem Vermerk das an diesem Tag keine Richtige
Auswertung durchgeführt werden konnte das vergessen wurde den
Ausgangsleser zu benutzen.

OK, ich geh dann jetzt mal 'ne Runde schlafen, morgen Abend ist ja WE … :smile: Dann baun wir das mal aus, bis nur noch ein Monat eines Mitarbeiters im Flexgrid steht, dann berechnen wir die Zeiten …

Bis morgen,

Rainer

Klingt alles sehr gut !!

Gute n8

mfg jonny

Hey Joe,

ich habe mal etwas daran herumgebastelt, Comboboxen zum Auswählen des Jahres/Monats hinzugefügt, noch Felder in die MDB eingefügt, damit der SQL-String ‚bequem‘ wird, ein paar weitere Abfragen um an die Listen der Jahre, Monate, Namen der Mitarbeiter zu kommen, eine zweite Form eingefügt, in der schon die Tage stehen und im Kopf die Namen der Miratbeiter, eine Schleife, in der Abfragen erzeugt werden, die dann nur noch jeweils einen Monat eines Mitarbeiters enthalten … zu Umfangreich um das genau zu beschreiben, damit Du es nachtippen kannst.

Lade es einfach und sieh’s Dir an, die endgültige Auswertung habe ich für Dich übrig gelassen, aber mit

Differenz = DateDiff(„n“, Zeitstempel1, Zeitstempel2)

Geht das ja leicht, nur die Fehlerkontrolle Eingang - Ausgang - wirklich rechnen? … Bringt Knoten ins Gehirn, das packe ich jetzt nicht mehr. :smile:

http://www.winhome.de/Joe.zip

Geht’s? Alles klar? Erzähl, ob Du hängst, oder ob es fertig ist.

Gruß Rainer

Die Form2 war im ZIP File nicht dabei :confused:

ich nüchter kurz etwas aus und melde mich wieder

Danke. Mfg Jonny

Die Form2 war im ZIP File nicht dabei :confused:

mist! … ist korrigiert, bitte noch einmal laden.

Moin Rainer,
bin nun wieder klar im kopf … und habe fix mal die Form2 nachgestellt.

Bis jetzt ist es allein vom Zeitvergleich ein lacher … mein/unser altes tool hatte teilweise je nach rechenleistung 10-15 Minuten gebraucht…

Das Tool zeigt mir aber nur Daten von Viktoria … an, sonst von keinem anderen Mitarbeiter ? Mache ich was falsch ?

Differenz = DateDiff(„n“, Zeitstempel1, Zeitstempel2)

Geht das ja leicht, nur die Fehlerkontrolle Eingang - Ausgang

  • wirklich rechnen? … Bringt Knoten ins Gehirn, das packe
    ich jetzt nicht mehr. :smile:

Wie der name schon sagt kann DateDiff mit Datum und Zeit rechnen ?
und de fehlergeschichte bekomme ich mit IF schon irgendwie hin ging ja schonmal …

oh der kleine man ist wach bis gleich …
mfg jonny

Moin Joe,

bin nun wieder klar im kopf … und habe fix mal die Form2
nachgestellt.

und ich bin schön ausgeschlafen.

Bis jetzt ist es allein vom Zeitvergleich ein lacher …
mein/unser altes tool hatte teilweise je nach rechenleistung
10-15 Minuten gebraucht…

Das Tool zeigt mir aber nur Daten von Viktoria … an, sonst
von keinem anderen Mitarbeiter ? Mache ich was falsch ?

Du siehst Dir nur das Ende der Schleife an, die anderen waren schon da,

Ändere doch mal das Ende der Schleife …

 'For i = 1 To Form2.MSFlexGrid1.Cols - 1
 For i = 1 To 1
 MA = Form2.MSFlexGrid1.TextMatrix(0, i)
 SqlStr = "SELECT DISTINCT NAME, DATE, TIME, ACCESS, TIMESTAMP FROM Perslog WHERE NAME = '" + MA + " ' AND ACCESS LIKE 'Hinter\*' AND YEAR = '" + Year + "' AND MONTH = '" + Month + "' ORDER BY NAME, DATE, TIME;"
 Set rs = db.OpenRecordset(SqlStr)
 Set Data2.Recordset = rs
 Data2.Refresh
 '\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 '\* \*
 '\* Jetzt steht in 'rs' (und in Form1.Msflexgrid1) eine Abfrage, \*
 '\* die nur noch die Daten eines Mitarbeiters des ausgewählten Monats \*
 '\* nach Datum/Zeit sortiert. Hier kommt die Fehlerbehandlung \*
 '\* für fehlende Daten und die Berechnung der Minuten. \*
 '\* In 'i' Steht die Spalte für das Flexgrid, der Tag ist die Zeile \*
 '\* \*
 '\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 Next

Differenz = DateDiff(„n“, Zeitstempel1, Zeitstempel2)

Geht das ja leicht, nur die Fehlerkontrolle Eingang - Ausgang

  • wirklich rechnen? … Bringt Knoten ins Gehirn, das packe
    ich jetzt nicht mehr. :smile:

Wie der name schon sagt kann DateDiff mit Datum und Zeit
rechnen ?

Ja. Möchtest Du die Differenz in Jahren dann schreibst Du „Y“, Minuten „n“, Sekunden „s“, Stunden „h“, Wochen, Tage, Monate … Steht ja in der Hilfe.

und de fehlergeschichte bekomme ich mit IF schon irgendwie hin
ging ja schonmal …

Eben, Du weißt ja, wo das bei Dir steht, kannst ja bei Dir selbst abschreiben.

oh der kleine man ist wach bis gleich …

*gg* das kenn ich. :smile: Meine sind jetzt etwas älter (27 und 14).

Bis später

Gruß Rainer

Nachtrag
neue Version. :smile:

Ich habe den Code noch mal etwas erweitert, unter der Voraussetzung, daß die Daten in Ordnung sind, würde das so richtig rechnen.

Ich muss dich kurz nochmal 2 sachen fragen.
Wie bekomme ich die Minutenausgabe in eine Stundenausgabe mit 2 Kommerstellen. H für hour ist klar.

Form2.MSFlexGrid1.TextMatrix(Day, i) =
Val(Form2.MSFlexGrid1.TextMatrix(Day, i)) + DateDiff(„N“, MSFlexGrid2.TextMatrix(r, 4), MSFlexGrid2.TextMatrix(r + 1, 4))

Was macht das tool im moment wenn jemand 2mal kommt und einmal geht ?
oder wird da schon was beachtet ?
Welchen wert nehmen wir im moment ?
mfg jonnyy

Hi Joe,

Ich muss dich kurz nochmal 2 sachen fragen.
Wie bekomme ich die Minutenausgabe in eine Stundenausgabe mit
2 Kommerstellen. H für hour ist klar.

Minuten in Stunden umrechnen?

Private Sub Command1\_Click()
 mn = 460
 Me.Caption = CStr(mn \ 60) + ":" + CStr(mn - ((mn \ 60) \* 60))
End Sub

Form2.MSFlexGrid1.TextMatrix(Day, i) =
Val(Form2.MSFlexGrid1.TextMatrix(Day, i)) + DateDiff(„N“,
MSFlexGrid2.TextMatrix(r, 4), MSFlexGrid2.TextMatrix(r + 1,
4))

Was macht das tool im moment wenn jemand 2mal kommt und einmal
geht?
oder wird da schon was beachtet ?
Welchen wert nehmen wir im moment ?

berechnet wird im Moment nur, wenn Eingang und Ausgang am selben Tag sind, wenn der erste Datensatz Eingang und der folgende Ausgang ist.

Der Fall, daß der Mitarbeiter bis nach Mittrenacht arbeitet ist da nicht mit abgedeckt. Wird beim Eingang die Uhr zwei mal aktiviert und danach Ausgang, wird die zweite Zeit Eingang gerechnet, der Datensatz steht ja unmittelbar vor dem Datensatz mit dem Ausgang. Willst Du da den ersten Datensatz berechnen, musst Du das ändern, z.B. indem Du den zweiten Datensatz vorher entfernst.

Ist ein Datensatz Eingang vorhanden und die Ujr wird beim Gehen zwei mal aktiviert, wird im Moment der erste Datensatz Ausgang für die Berechnung genommen. Willst Du den Zweiten, musst Du auch eingreifen.

Das Programm ist so ja noch nicht fertig, ich habe nur die Zeitberechnung erst mal grundsätzlich eingebaut, damit Du die richtige Syntax siehst. Was im Moment auch nicht berechnet würde, wäre der Fall, daß ein Mitarbeiter am Ersten die Schicht schon vor Null-Uhr beginnt, Nachtschicht. Keine Ahnung, ob so etwas vorkommen kann. Das selbe Problem, wenn die letzte Schicht im Monat nach Null-Uhr endet.

Für diese Sonderfälle musst Du noch etwas einbauen, das Programm verdeutlicht im Moment nur das Prinzip, ist nach meiner Meinung noch nicht fertig.

Gruß Rainer

Was sagst du dazu?

Dim Time1 As Date
 Dim Time2 As Date
 Dim diff As Integer

 Time2 = "00:00:00"
 SqlStr = "SELECT DISTINCT Name FROM Perslog WHERE and ACCESS LIKE 'Hinter\*';"
 Set rs = db.OpenRecordset(SqlStr)
 rs.MoveFirst
 While Not rs.EOF
 Time1 = Data2.Recordset("Time")
 diff = DateDiff(n, Time1, Time2)

 If diff 

diff = DateDiff(n, Time1, Time2)

da fehlen Anführungszeichen

diff = DateDiff(„n“, Time1, Time2)

sonst ist das der richtige Code um die doppelten Zeitstempel zu entfernen.

Ätzend, ich dachte schon ich hatte da nen fehler im Format !!

„N“ das war ja wieder …
Ich habe nun noch das Problem das wenn ich Data2.Recordset.Delete
kurz vorm ende der Kopieren Sub durchführen möchte sagt VB das Data2 Schreibgeschützt ist. Aber wer hat da noch Zugriff auf die Data2 ?

Du hast doch bestimmt noch nen guten Tip oder ?

Ich werde mal was bauen um die fehlenden ein / ausgänge zu finden und die 0 Uhr geschichte zu errechen. Obwohl das wird kombiniert.
bis gleich mfg jonny