Dbf Datei mit vb6 auswerten ?

Hi Alex,

Das verstehe ich noch nicht. Vertagen wir das? Mir platzt
gleich der Kopf. :smile:

Ja das koennen wir machen. Hab aber erst morgen Abend wieder
Zeit :s

*gg* Ich auch, zwei Tage Urlaub. :smile: [Arzttermine]

Geht nicht die Zuweisung

Set Grid1.Datasource = DeinRecordset

JAA! :smile: Das geht! Danach habe ich schon lang gesucht! :smile:

Danke!

Gruß, Rainer

Hallo Rainer,

Ich hab grad ma im Netz nachgeschaut. Scheinbar geht das mit dem Flexgrid net so einfach :s
Aber anbei habsch folgendes gefunden :smile:

Public Function FlexFillFromRs(Rs As ADODB.Recordset, \_
 Flex As MSFlexGrid)
 Dim i As Long
 Dim j As Long
 Dim breit As Single

 With Flex
 .Redraw = False
 .AllowBigSelection = True
 .AllowUserResizing = flexResizeBoth
 .Appearance = flex3D
 .FocusRect = flexFocusNone
 .FixedRows = 1
 .FixedCols = 1
 .Cols = Rs.Fields.Count
 For i = 0 To Rs.Fields.Count - 1
 .TextMatrix(0, i) = Rs.Fields(i).Name
 Next
 .Rows = .FixedRows + Rs.RecordCount + 1
 Do While Not Rs.EOF
 i = Rs.AbsolutePosition
 For j = 0 To Rs.Fields.Count - 1
 If Not IsNull(Rs.Fields(j).Value) Then
 .TextMatrix(i, j) = Rs.Fields(j).Value
 End If
 Next
 Rs.MoveNext
 Loop
 For i = 0 To .Cols - 1
 breit = 0
 For j = 0 To .Rows - 1
 If Me.TextWidth(.TextMatrix(j, i)) \> breit Then
 breit = Me.TextWidth(.TextMatrix(j, i))
 End If
 Next
 .ColWidth(i) = breit + 120
 Next
 .Redraw = True
 End With
End Function

Du musst dann einfach nur die Function aufrufen und ihr die gewuenschten Parameter uebergeben :smile:
Somit bekommst du eine scheene Teilung rein und wenn du doch mal ein anderes Statement abfeuerst und bekommst neue Daten, so rufe einfach die Function erneut auf und volla die Daten stehen wieder drinnen, ohne alles neu schreiben zu muessen :smile:
Du muesstest nur noch implementieren das das Felxgrid gelöscht wird, wenn daten drinnen stehen :wink:

MfG Alex

MfG Alex

Hallo Rainer,

und wenn du nun bei den Eigenschaften des Grids die Datenfelder angibst, so stehen dann die Daten in dem Grid, nur mit dieser Zuweisung :smile:

Eine Source via

Set Grid1.Datasource = Nothing ' löst die Daten aus dem Grid
Set Grid1.Datasource = DeinRecordset ' Bindet das grid an die DB und zeigt die Daten an :smile:

Wie du siehst kannst du dir die ganze Schleife sparen :smile: Und der Source umfasst nur ein paar Zeilen Code und ist arg flexibel :smile:

MfG Alex

Leider geht es auch nicht… gleicher fehler.

Mir platzt gleich dir Birne … zu viel Input …oder auch Buffer overflow…

Ich habe ein ganz akzeptables ergeniss mit deinem Code der die 5 Command Buttons hatte und ein bischen code von mir.
Du müsstest mir nur nochmal kurz helfen die arbeitszeitzu errechnen
ich habe Data1.Recordset(1) & Data2.Recordset(1)
und würde am Liebsten einfach Data2.Recordset(1)- Data2.Recordset(1)
eingeben aber mit den dingern kann ich nicht rechnen. wie kann ich das noch fix einbauen.

Mit dem Sql code von dir werde ich mich den mal ab Mittwoch ausseinandersetzten habe da grosses interesse aber brauche ich dafür erstmal 2 tage um den kopf frei zu bekommen.

Hi Alex

Wie du siehst kannst du dir die ganze Schleife sparen :smile: Und
der Source umfasst nur ein paar Zeilen Code und ist arg
flexibel :smile:

ja, die Schleife ist weg, der Code wird immer kürzer und gefällt mir immer besser. :smile: Den SQL-String bekomme ich aus dem Kopf aber nicht mehr besser.

Nur für’s Protokoll:

Option Explicit

 Dim sPath As String
 Dim cnn As ADODB.Connection
 Dim rs As New ADODB.Recordset

Private Sub Form\_Load()
 Dim i As Long, n As Long
 sPath = "c:\"
 Set cnn = New ADODB.Connection
 cnn.Open "Provider=MSDASQL;Driver={Microsoft dBASE Driver (\*.dbf)};DriverID=277;Dbq=" & sPath

 If cnn.State = 1 Then
 Set rs = New ADODB.Recordset
 With rs
 .CursorType = adOpenDynamic
 .CursorLocation = adUseClient
 .LockType = adLockOptimistic
 .Source = "SELECT \* FROM perslog WHERE Access LIKE 'Hinter%' ORDER BY NAME, DATE, TIME"
 .ActiveConnection = cnn
 .Open
 End With
 End If

 Set MSHFlexGrid1.DataSource = rs
End Sub

Gruß, Rainer

Hi Joe,

Leider geht es auch nicht… gleicher fehler.

Mist. :frowning:

Mir platzt gleich dir Birne … zu viel Input …oder auch
Buffer overflow…

Willkommen im Club! :smile:

ich habe Data1.Recordset(1) & Data2.Recordset(1)
und würde am Liebsten einfach Data2.Recordset(1)-
Data2.Recordset(1)
eingeben aber mit den dingern kann ich nicht rechnen. wie kann
ich das noch fix einbauen.

Minuten = Datediff("n",Timevalue(Data1.Recordset(1)),Timevalue(Data2.Recordset(1)))

Datediffberechnet die Zeitdifferenz. „n“ sagt, daß das Ergebnis in Minuten angegeben werden soll.

Gruß, Rainer

Hallo Rainer,

nur mal nebenbei. Was haelst du denn von der Idee ?

Option Explicit

 Dim sPath As String
 Dim cnn As ADODB.Connection
 Dim rs As New ADODB.Recordset

Private Sub Form\_Load()
 Dim i As Long, n As Long
 sPath = "c:\"
 Set cnn = New ADODB.Connection
 cnn.Open "Provider=MSDASQL;Driver={Microsoft dBASE Driver
(\*.dbf)};DriverID=277;Dbq=" & sPath
Call Connect("SELECT \* FROM perslog WHERE Access LIKE
'Hinter%' ORDER BY NAME, DATE, TIME")
End Sub

Private Function Connect(strSql as String)
 If cnn.State = 1 Then
 Set rs = New ADODB.Recordset
 With rs
 .CursorType = adOpenDynamic
 .CursorLocation = adUseClient
 .LockType = adLockOptimistic
 .Source = strSql
 .ActiveConnection = cnn
 .Open
 Set MSHFlexGrid1.Datasource=Nothing
 Set MSHFlexGrid1.DataSource = rs
 .Close 
 End With
 Set Rs=Nothing
 End If
End Function

MfG Alex

Hi Alex,

nur mal nebenbei. Was haelst du denn von der Idee ?

hmmm. Das ändert IMO nichts. Es wird ohnehin nur der Inhalt des Recordsets in das Flexgrid geschrieben.
Man kann den Inhalt des Flexgrids ohne Probleme bearbeiten, so daß im Flexgrid etwas anderes steht, als in der Datenbank. Erst bei DB.Refresh wird der Inhalt des Flexgrid wieder mit dem Inhalt der Datenbank überschrieben. Anders ist das beim Datagrid. Ändere ich im datagrid den Inhalt, ändern sich auch die Daten in der Datenbank. Beim Flexgrid ist das nicht so.

Gruß, Rainer

Hallo Rainer,

hmmm. Das ändert IMO nichts. Es wird ohnehin nur der Inhalt
des Recordsets in das Flexgrid geschrieben.
Man kann den Inhalt des Flexgrids ohne Probleme bearbeiten, so
daß im Flexgrid etwas anderes steht, als in der Datenbank.
Erst bei DB.Refresh wird der Inhalt des Flexgrid wieder mit
dem Inhalt der Datenbank überschrieben. Anders ist das beim
Datagrid. Ändere ich im datagrid den Inhalt, ändern sich auch
die Daten in der Datenbank. Beim Flexgrid ist das nicht so.

Ok, da muss ich passen. So genau weiss ich das auch nicht mehr :confused:
Aber Sinn der Sache ist.
A: Die Resourcen werden gleich wieder frei gegeben nach dem einlesen!
B: Willst du die Daten anders filtern, so rufe die Connect Function erneut auf und übergib ihr das entsprechende Statement. Das Grid passt sich dann dem an

Du weisst, wenn ich etwas mache, dann muss es immer flexibel sein :wink:

Was die Sache mit dem bearbeiten angeht! Ist es denn erwuenscht?
Sollen dann die geaenderten Daten wieder gespeichert werden?
Auch ist in dem Source noch keine Fehlerbehandlung drinnen! Aber das sei erstmal nach hinten gestellt. Das prügeln wir dann zum Schluss rein, wenn alles klappt :smile: Viel kann es ja nicht mehr sein oder?

Aber was mir gerade einfaellt. Wegen dem SQL Statement. Er soll erstmal die OrderBy Klausel weglassen. Sie dient eh nur zum ordnen der Daten :smile: Ansonsten einfach mal im SQL Brett nachfragen. Also die Tabellen Strucktir posten und die was gewuenscht wird. Dazu noch die Angabe das es sich um ADO unter VB6 handelt und um eine DBase File :smile:
Dann sollten wir rel. schnell die Lösung bekommen! Ansonsten muss ich mich mal die Tage hinsetzen und mal tüffteln oder in den Unterlagen nachschauen :smile:Denn so wie das Statement bis jetzt lautet bekommt er ja alle Mitarbeiter die sich irgendwo am Hinter* eingeloggt haben. Er wollte aber haben, Mitarbeiter die sich ein und am anderen wieder ausgeloggt haben und das am selben tag. Also wird das Statement ein wenig verschachtelt ausschauen. Adhock faellt mir da Where in Verbindung mit IN ein und 2 Select’s

MfG Alex

Hi Rainer, hi Anno wenn du noch hier bist :stuck_out_tongue:
vielen Dank bis hier, das war wiedermal TOP support !!

kennst du evtl noch einen Trick mit vb6 den Programmpfad von der Excel.exe zu ermitteln ? würde gern das ergebnis in eine TXT kloppen und an excel senden ?
Ich mache das bei mir so
Shell "C:\Programme\Microsoft Office\OFFICE11\Excel.exe " & Chr(34) & File2 & Chr(34), vbNormalFocus

Aber ich kann ja nicht immer davon ausgehen das Excel dort zu finden ist.

Besten Dank,

Hi Alex,

Aber Sinn der Sache ist.
A: Die Resourcen werden gleich wieder frei gegeben nach dem
einlesen!

Ja, das ist schon klar.

B: Willst du die Daten anders filtern, so rufe die Connect
Function erneut auf und übergib ihr das entsprechende
Statement. Das Grid passt sich dann dem an

Ja, klar.

Du weisst, wenn ich etwas mache, dann muss es immer flexibel
sein :wink:

*gg* Wenn der Code so schön kurz und elegant wird, behagt mir das auch. :smile: Mein Spaghetticode von oben hat mich ja auch geärgert.

Was die Sache mit dem bearbeiten angeht! Ist es denn
erwuenscht?

Ich denke schon. Es soll ja wo möglich die Arbeitszeit errechnet werden und die soll irgendwie in die neue Tabelle, die geschrieben werden soll.

Sollen dann die geaenderten Daten wieder gespeichert werden?

Ja, in ein Textfile oder .xls.

Auch ist in dem Source noch keine Fehlerbehandlung drinnen!
Aber das sei erstmal nach hinten gestellt. Das prügeln wir
dann zum Schluss rein, wenn alles klappt :smile: Viel kann es ja
nicht mehr sein oder?

Wenn die Datensätze richtig gefiltert sind, wobei ‚richtig‘ für mich noch nicht fertig definiert ist, müssen nur noch die Minuten berechnet werden und die Daten wieder weg geschrieben.

Aber was mir gerade einfaellt. Wegen dem SQL Statement. Er
soll erstmal die OrderBy Klausel weglassen. Sie dient eh nur
zum ordnen der Daten :smile:

Wenn die nicht richtig sortiert sind, wie findet man dann heraus, zwischen welchen Zeiten die Differenz berechnet werden soll und wo das Ergebnis hin gehört? Ich kann das ohne Sortierung nicht denken. :frowning:

Ansonsten einfach mal im SQL Brett
nachfragen. Also die Tabellen Strucktur posten und die was
gewuenscht wird. Dazu noch die Angabe das es sich um ADO unter
VB6 handelt und um eine DBase File :smile:

Und daß es um W2k geht, denn unter XP läuft der Code, nur unter W2k nicht.

Dann sollten wir rel. schnell die Lösung bekommen! Ansonsten
muss ich mich mal die Tage hinsetzen und mal tüffteln oder in
den Unterlagen nachschauen :smile:Denn so wie das Statement bis
jetzt lautet bekommt er ja alle Mitarbeiter die sich irgendwo
am Hinter* eingeloggt haben. Er wollte aber haben, Mitarbeiter
die sich ein und am anderen wieder ausgeloggt haben und das am
selben tag. Also wird das Statement ein wenig verschachtelt
ausschauen. Adhock faellt mir da Where in Verbindung mit IN
ein und 2 Select’s

Bei mir stehen die Daten jetzt nach Namen, Datum und Zeit sortiert in der Tabelle. Wenn also Name und Zeit in einem Datensatz mit denen im nächsten übereinstimmen, der erste Datensatz von Lesegerät ‚_außen‘ stammt, der zweite von ‚_innen‘, dann soll zwischen den beiden Datensätzen die Zeit berechnet werden … wenn es an dem Tag nur die beiden Datensätze gibt.

Bei den Daten kann der Mitarbeiter aber am Vormittag drei mal kommen, Mittag gehen, nach der pause drei mal wieder kommen und an dem Tag nie wieder gehen. Vermutlich kann man pro Mitarbeiter und Tag den ersten Datensatz ‚Eingang‘ und den letzten Datensatz ‚Ausgang‘ herausfiltern, aber wie das mit dem SQL-String geht, weiß ich nicht. Wie Aussagefähig die Daten dann sind aber erst Recht nicht. :smile:

Gruß, Rainer

Hi Joe,

Shell "C:\Programme\Microsoft Office\OFFICE11\Excel.exe " &
Chr(34) & File2 & Chr(34), vbNormalFocus

Aber ich kann ja nicht immer davon ausgehen das Excel dort zu
finden ist.

lass doch einfach mal den Pfad weg. :smile: Excel wird Windows auch so finden. Wenn Dein Filename keine Leerzeichen enthält, brauchst Du die Anführungszeichen auch nicht.

Shell "Excel.exe " & File2, vbNormalFocus

Gruß, Rainer

Hi Joe,

Hi Rainer.

lass doch einfach mal den Pfad weg. :smile: Excel wird Windows
auch so finden. Wenn Dein Filename keine Leerzeichen enthält,
brauchst Du die Anführungszeichen auch nicht.

Shell "Excel.exe " & File2, vbNormalFocus

Ich habe gerade mal unter Ausführen CMD Set geschaut … bzw mal getestet Excel.exe von irgendwo zu starten , kp. wer dieses IMage gebastelt hat , Aber ich werde es morgen mal auf der Office PArtiton testen ( also im büro) …

gn8, & besten dank

Hi Joe,

falls Du an einen Rechner kommst, wo VB problemlos läuft, sieh Dir mal das Ergebnis dieses Codes an. Irelevante Einträge nicht mit anzeigen, doppelte Einträge nicht mit anzeigen und im Sinne der Aufgabe sinnvoll sortieren erledigt hier der SQL-String.

Da wollte ich hin. Ob und wenn ja wie man mit SQL noch weiter kommt habe ich keine Ahnung.

Gruß, Rainer

Option Explicit

 Dim sPath As String
 Dim cnn As ADODB.Connection
 Dim rs As New ADODB.Recordset

Private Sub Form\_Load()
 Dim i As Long, n As Long
 sPath = "c:\"
 Set cnn = New ADODB.Connection
 cnn.Open "Provider=MSDASQL;Driver={Microsoft dBASE Driver (\*.dbf)};DriverID=277;Dbq=" & sPath

 If cnn.State = 1 Then
 Set rs = New ADODB.Recordset
 With rs
 .CursorType = adOpenDynamic
 .CursorLocation = adUseClient
 .LockType = adLockOptimistic
 .Source = "SELECT DISTINCT \* FROM perslog WHERE Access LIKE 'Hinter%' ORDER BY NAME, DATE, TIME"
 .ActiveConnection = cnn
 .Open
 End With
 End If

 Set MSHFlexGrid1.DataSource = rs
End Sub

Hi Rainer,
Werde ich machen. Danke dir. Ich melde mich.
weitermachen :stuck_out_tongue: mfg joe

Hi Joe,

dann steck mal den Code hier rein und erzähle mal, wie Dir das Ergebnis gefällt. Ist wieder nicht mehr elegant, aber … :smile:

Option Explicit

 Dim sPath As String
 Dim cnn As ADODB.Connection
 Dim rs As New ADODB.Recordset

Private Sub Form\_Load()
 Dim i As Long, n As Long
 Dim r1 As Long, r2 As Long
 sPath = "c:\"
 Set cnn = New ADODB.Connection
 cnn.Open "Provider=MSDASQL;Driver={Microsoft dBASE Driver (\*.dbf)};DriverID=277;Dbq=" & sPath

 If cnn.State = 1 Then
 Set rs = New ADODB.Recordset
 With rs
 .CursorType = adOpenDynamic
 .CursorLocation = adUseClient
 .LockType = adLockOptimistic
 .Source = "SELECT DISTINCT \* FROM perslog WHERE Access LIKE 'Hinter%' ORDER BY NAME, DATE, TIME"
 .ActiveConnection = cnn
 .Open
 End With
 End If

 Set MSHFlexGrid1.DataSource = rs
 Set MSHFlexGrid1.DataSource = Nothing

 MSHFlexGrid1.ColWidth(2) = 1800
 MSHFlexGrid1.ColWidth(4) = 1800

 For r1 = 1 To MSHFlexGrid1.Rows - 2
 For r2 = r1 + 1 To MSHFlexGrid1.Rows - 1
 If MSHFlexGrid1.TextMatrix(r1, 2) = MSHFlexGrid1.TextMatrix(r2, 2) Then 'Name
 If MSHFlexGrid1.TextMatrix(r1, 0) = MSHFlexGrid1.TextMatrix(r2, 0) Then 'Datum
 If MSHFlexGrid1.TextMatrix(r1, 4) Like "Hintereingang au\*" Then
 If MSHFlexGrid1.TextMatrix(r2, 4) Like "Hintereingang au\*" Then
 MSHFlexGrid1.TextMatrix(r2, 5) = 1
 End If
 End If
 Else
 Exit For
 End If
 Else
 Exit For
 End If
 Next
 Next

 For r1 = MSHFlexGrid1.Rows - 1 To 2 Step -1
 For r2 = r1 - 1 To 1 Step -1
 If MSHFlexGrid1.TextMatrix(r1, 2) = MSHFlexGrid1.TextMatrix(r2, 2) Then 'Name
 If MSHFlexGrid1.TextMatrix(r1, 0) = MSHFlexGrid1.TextMatrix(r2, 0) Then 'Datum
 If MSHFlexGrid1.TextMatrix(r1, 4) Like "Hintereingang in\*" Then
 If MSHFlexGrid1.TextMatrix(r2, 4) Like "Hintereingang in\*" Then
 MSHFlexGrid1.TextMatrix(r2, 5) = 2
 End If
 End If
 Else
 Exit For
 End If
 Else
 Exit For
 End If
 Next
 Next

 For r1 = MSHFlexGrid1.Rows - 1 To 1 Step -1
 If MSHFlexGrid1.TextMatrix(r1, 5) 0 Then
 MSHFlexGrid1.RemoveItem r1
 End If
 Next

 For r1 = 1 To MSHFlexGrid1.Rows - 2
 If MSHFlexGrid1.TextMatrix(r1, 4) Like "Hintereingang au\*" And \_
 MSHFlexGrid1.TextMatrix(r1 + 1, 4) Like "Hintereingang in\*" And \_
 MSHFlexGrid1.TextMatrix(r1, 0) = MSHFlexGrid1.TextMatrix(r1 + 1, 0) \_
 And MSHFlexGrid1.TextMatrix(r1, 2) = MSHFlexGrid1.TextMatrix(r1 + 1, 2) Then
 MSHFlexGrid1.TextMatrix(r1 + 1, 6) = \_
 DateDiff("n", TimeValue(MSHFlexGrid1.TextMatrix(r1, 1)), \_
 TimeValue(MSHFlexGrid1.TextMatrix(r1 + 1, 1)))
 MSHFlexGrid1.TextMatrix(r1, 6) = " "
 If MSHFlexGrid1.TextMatrix(r1 + 1, 6) 0 Then
 MSHFlexGrid1.RemoveItem r1
 End If
 Next
End Sub

Gruß, Rainer

Nun hatte ich meinen Code soweit das Ich Für jeden Monat eine Liste sortiert nach tagen…

besser wäre aber wenn ich für jeden Monat eine txt datei bekomme die nochmal nach Mitarbeiter sortiert wird um pro monat eine Summe pro mitarbeiter erstellt.

Also Januar 2008.txt
20080101 Peter von bis 8,3 Std
20080104 Peter von bis 4Std

Summer : …

20080101 Günter von bis 10Std
20080102 Günter von bis 5 Std
… Summer 15Std

Februar 2008.txt

Wenn du mir sagst das dein code das kann, werde ich in 0,nix auf meinem Desktop PC (win XP Sp2) vb6 pro installieren

wie man es auch immer macht … man macht es falsch:stuck_out_tongue:

mfg joe

Hi Joe,

Nun hatte ich meinen Code soweit das Ich Für jeden Monat eine
Liste sortiert nach tagen…

besser wäre aber wenn ich für jeden Monat eine txt datei
bekomme die nochmal nach Mitarbeiter sortiert wird um pro
monat eine Summe pro mitarbeiter erstellt.

Also Januar 2008.txt
20080101 Peter von bis 8,3 Std
20080104 Peter von bis 4Std

Summer : …

20080101 Günter von bis 10Std
20080102 Günter von bis 5 Std
… Summer 15Std

Februar 2008.txt

Wenn du mir sagst das dein code das kann, werde ich in 0,nix
auf meinem Desktop PC (win XP Sp2) vb6 pro installieren

Nein, das sage ich nicht, wusste ich ja nicht. :smile:

Ich habe eine Liste nach Namen sortiert, alle Tage bei denen es mindestens einen Eingang und einen Ausgang gibt stehen mit dem esten Eingang und dem letzen Ausgang in der Liste und die Zeit ist berechnet, alles andere ist gelöscht.

Das nun noch nach Monaten umsortieren und Zwischensummen bilden wird kein Problem, das in ein File schreiben erst Recht nicht. (Aber nicht mehr heute. :smile:)

Dir ist aber klar, daß die Summe über den Monat für alle Mitarbeiter falsch berechnet wird, weil das System einfach zu unzuverlässig ist?

Berechnen kann man das zwar, aber wenn sich ein Mitarbeiter an einem Tag entweder nicht am Morgen einloggt oder zum Feierabend ausloggt, ist die Summe für den Monat nicht mehr zu gebrauchen. Nicht, daß am Ende Jemand die zahl ernst nimmt, das hat sie nicht verdient. :smile:

Gruß, Rainer
PS. Neuer Code morgen, einen Tag Urlaub habe ich noch. :smile:

Also werde ich noch fix den Desktop pc mit vb6 versorgen.
Die Mitarbeiter werden nochmal drauf hingewiesen die „Leser“ in beide richtungen zu benutzen !!

Ich habe eine Liste nach Namen sortiert, alle Tage bei
denen es ::mindestens einen Eingang und einen Ausgang gibt
stehen mit dem esten Eingang und dem letzen Ausgang in der
Liste und die Zeit ist berechnet, alles andere ist gelöscht.

Was wäre aber wenn jemand mittags kurz das gebäude verlässt (mit leser nutzung ) und 2 std wieder betritt (mit leser…) und abends wieder geht :confused:

melde mich morgen von der arbeit / ganz in ruhe… Danke , mfg joe

Hi Joe,

Was wäre aber wenn jemand mittags kurz das gebäude verlässt
(mit leser nutzung ) und 2 std wieder betritt (mit leser…)
und abends wieder geht :confused:

Wenn das berücksichtigt werden soll, ist auch das kein Problem … (aktuell aber nicht im Programm) Wenn die Daten in Ordnung sind.

Da sind aber z.B. Fälle, wo ein Mitarbeiter an einem Tag sechs mal kommt, aber nur zwei mal geht. Da kann man schon mit bloßem Auge noch nicht mal gut schätzen, was wirklich war, zuverlässig auswerten schon gar nicht. Was geht, ist am Morgen den ersten Zugang als kommen zu verstehen, ist der Mitarbeiter vorher aber schon mal gegangen, weiß man schon, daß die Zahl falsch ist, kann es aber nicht ändern. Was soll dann geschehen? Die Zeit für den Monat kann dann ja schon nicht mehr richtig berechnet werden. Falsch weiter rechnen oder den Monat für den Mitarbeiter komplett löschen, weil eine richtige Aussage ja nicht möglich ist?

Gruß, Rainer