בלאט 1 פון 1

pseudo code

פארעפענטליכט: מיטוואך מרץ 13, 2013 9:52 am
דורך פאטאקי08
לאמיך טרייען מיין לאק דא אולי וועט עפעס ווערן

איך האב צוויי טעבלס

Table1
EmployeeID - Date - StartTime - StopTime

Table2
EmployeeID - Date - Time - In\Out

אין ביידע טעיבלס ווערן רעקארדירט די צייטן ווען די ארבעטער האט געפאנטש דאס קארטל
ביידע טעיבלס קען זיין אריין און ארויס מערערע מאל א טאג קען זיין מערערע מאל א טאג
Table1 שטייט עס אריין און ארויס אין די זעלבע רייע
Table2 שטייט עקסטער א רייע פאר אריין און עקסטער פאר ארויס

יעצט דארף איך טרעפן אויב צייטן "קלעשן" צווישן די ביידע טעיבלס
דאס מיינט אז א ארבעטער קען נישט ארבעטן אין די זעלבע צייט פאר ביידע

איך דארף יעדע ליין אין Table1 זאל ער ווארענען אויב עס קלעשט מיט Table2
אויב מעגליך עס צי טשעקן מיט Sql אדער T-SQL
אדער VBA קאוד

פארעפענטליכט: מיטוואך מרץ 13, 2013 11:02 am
דורך מייקראסאפט
איך פארשטיי נישט פינקטלעך.

האסט צוויי פלעצער ווי ער פאנטש אריין אין ער קען נישט אריין פאנטשען אויף ביידעע ציזאמען?
מאך א לאפ אויף די ערשטע טעבל פאר יעדע רעקארד קיק אין די צווייטער טעבעל דעי דעיט אויב....

פארעפענטליכט: מיטוואך מרץ 13, 2013 11:39 am
דורך פאטאקי08
א שטיקל VBA pseudo code
וועט דאס ארבעטן?

דא איז די טעיבל דעפינישענס

טעיבל1
קאוד:
tblTimeDetails: ID, EmployeeID, Date1, StartTime, StopTime


טעיבל2
קאוד:
tblTimeCard: Id, EmployeeID, Date1, Time1, ActivityType


דאס איז די CODE
קאוד:
    Dim rsTimeCardIn As Recordset
    Dim rsTimeDetails As Recordset
    rsTimeDetails = CurrentDb.OpenRecordset("tblTimeDetails")
    With rsTimeDetails
        Do Until .EOF

            If DCount("ID", "tblTimeCard", "EmployeeID = EmployeeID and Date1 = Date1 and " _
                                         & "Time1 between StartTime and StopTime and " _
                                         & "(Time1 <> StartTime And ActivityType = 'Out') and " _
                                         & "(Time1 <> StopTime And ActivityType = 'In')") Then
                failed
            Else
                rsTimeCardIn = CurrentDb.OpenRecordset("Select TOP 1 Time1 From tblTimeCard where EmployeeID = EmployeeID and " _
                                                     & "Date1 = Date1 and Time1 <= StartTime Order By Time1 Desc")
                If Not rsTimeCardIn.EOF Then
                    If rsTimeCardIn!ActivityType = "In" Then
                        failed
                    End If
                End If
            End If
            .MoveNext
        Loop
        .Close
    End With

פארעפענטליכט: מיטוואך מרץ 13, 2013 11:48 am
דורך פאטאקי08
מייקראסאפט האט געשריבן:איך פארשטיי נישט פינקטלעך.

האסט צוויי פלעצער ווי ער פאנטש אריין אין ער קען נישט אריין פאנטשען אויף ביידעע ציזאמען?
מאך א לאפ אויף די ערשטע טעבל פאר יעדע רעקארד קיק אין די צווייטער טעבעל דעי דעיט אויב....

איך וועל פרובירן צו פארענדיגן דייינע פיר פינטעלעך.. זאגטס מיר ביטע צי עס מאכט סענס
מאך א לאפ אויף די ערשטע טעבל פאר יעדע רעקארד קיק אין די צווייטער טעבעל דעי דעיט אויב סאיז דא עני צייט צווישן די צוויי זייגערס פון די ערשטע טעיבל
(עקסקלוד א StartTime וואס איז איקוועל א Time1 אויב איז עס OUT)
(עקסקלוד א StopTime וואס איז איקוועל א Time1 אויב איז עס IN)
אויב איז דא עפעס דאן קלעשט עס

אויב נישט דארף איף קוקן אויב די לעצטע Time1 פאר די StartTime איז א IN
אויב נישט דאן passed די רעקארד

און דאס איז די קאוד פון די פריערדיגע תגובה
די שאלה איז צי די קאוד איז גוט (דאס מיינט צי עס ארבעט)
און צווייטענס צי עס איז נישטא א שנעלערע וועג ווייל רעקארדסעטס מיט א לופ וואס עפענט צוויי רעקראדסעטס ביי יעדע לופ דויערט זייער לאנג..
אפגערעדט אז דא רעדט מען פון עקסעס וואס די טעבלס זענען אויפן סערווער (מיט א שוואכע קאנעקשאן\ספיד) און די קאלקולאציעס ווערן געטוהן לאקאלי...

פארעפענטליכט: מיטוואך מרץ 13, 2013 2:29 pm
דורך בלעקבערי פען
איך פארשטיי נישט וואס די צאמשטעל פון די צוויי טעבעלס זענען בכלל ??

עס האלט דאך נישט די זעלבע דעטא

בעסער געזאקט טעבען 1 פארשטיי איך
אבער טעבעל 2 כאפ איך נישט וויאזוי די דעטא דארטען קיקט אויס און וויאזוי עס קען קלאשען

Table1
EmployeeID - Date - StartTime - StopTime

Table2
EmployeeID - Date - Time - In\Out

פארעפענטליכט: מיטוואך מרץ 13, 2013 3:43 pm
דורך פאטאקי08
see file

פארעפענטליכט: דאנערשטאג מרץ 21, 2013 3:30 pm
דורך פאטאקי08
די פאלגענדע קאוד טוט די זעלבע זאך דורך סיקוועל
שכח בלעקבערי פען פארן ארויסהעלפן

קאוד:
create table #table1(ID int ,Emp_ID int,Date1 date,StartTime time,StopTime time)
create table #table2(ID int, Emp_ID int,Date1 date, Time1 time,ActivityType varchar(10))

insert into #table1 values
(1,1,'2013-01-01','6:00:00 AM','12:00:00 PM'),
(2,1,'2013-01-01','1:00:00 PM','2:00:00 PM'),
(3,1,'2013-01-01','3:00:00 PM','5:30:00 PM'),
(4,1,'2013-01-02','1:00:00 PM','2:00:00 PM'),
(5,1,'2013-01-02','3:00:00 PM','4:30:00 PM'),
(6,1,'2013-01-03','11:00:00 AM','5:00:00 PM'),
(7,1,'2013-01-04','7:00:00 AM','10:30:00 AM'),
(8,1,'2013-01-05','10:30:00 AM','1:30:00 PM'),
(9,1,'2013-01-05','2:30:00 PM','6:30:00 PM'),
(10,1,'2013-01-06','11:30:00 AM','3:30:00 PM'),
(11,1,'2013-01-07','1:15:00 PM','4:15:00 PM')


insert into #table2 values
(1,1,'2013-01-01','10:00:00 AM','In'),
(2,1,'2013-01-01','12:00:00 PM','Out'),
(3,1,'2013-01-01','2:00:00 PM','In'),
(4,1,'2013-01-01','3:00:00 PM','Out'),
(5,1,'2013-01-01','5:00:00 PM','In'),
(6,1,'2013-01-01','6:00:00 PM','Out'),
(7,1,'2013-01-02','2:00:00 PM','In'),
(8,1,'2013-01-02','6:00:00 PM','Out'),
(9,1,'2013-01-03','9:00:00 AM','In'),
(10,1,'2013-01-03','2:00:00 PM','Out'),
(11,1,'2013-01-03','3:00:00 PM','In'),
(12,1,'2013-01-03','6:00:00 PM','Out'),
(13,1,'2013-01-05','7:00:00 AM','In'),
(14,1,'2013-01-05','9:00:00 AM','Out'),
(15,1,'2013-01-05','4:00:00 PM','In'),
(16,1,'2013-01-05','5:00:00 PM','Out'),
(17,1,'2013-01-07','11:00:00 AM','In'),
(18,1,'2013-01-07','4:00:00 PM','Out')
select *
,[ERROR] = case when exists (select b.Time1 from #table2 b where b.Date1 = a.Date1 and b.Emp_ID = a.Emp_ID
 and b.Time1 between a.StartTime and a.StopTime
 and not (b.Time1 = a.StartTime and b.ActivityType='Out')
 and not (b.Time1 = a.StopTime and b.ActivityType='In')) or (select top 1 c.ActivityType from #table2 c where
 a.Date1=c.Date1 and a.Emp_ID=c.Emp_ID and c.Time1 <= a.StartTime order by c.Time1 desc) = 'In'
 
  then 'error' else 'good' end
from #table1 a


קאוד פאר מייקראסאפט עקסעס קווערי

קאוד:
SELECT * INTO 123
FROM table1 AS a
WHERE a.date1 between #1/1/13# and #3/1/13# and  IIf((select b.Time1 from [table2] b where b.Date1 = a.Date1 and b.FileNumber = a.FileNumber
and b.Time1 between a.StartTime and a.StopTime
and not (b.Time1 = a.StartTime and b.ActivityType='Out')
and not (b.Time1 = a.StopTime and b.ActivityType='In')) Or (select top 1 c.ActivityType from [table2] c where
a.Date1=c.Date1 and a.FileNumber=c.FileNumber and c.Time1 <= a.StartTime order by c.Time1 desc)='In',0,1) = 0;