当前位置:编程学习 > VB >>

求代码例子,生成上下班记录

目的=判断的时间不重复...上下员工之间上下时间不重复.每天上下时间不重复

条件1有一堆员工,一个时间段,可填写标准时间(用作标准来生成时间)

效果.1生成当月的每位员工上下班记录
2生成当天每位员工上下班记录


--------------------编程问答-------------------- 我怎么没看明白。。。 --------------------编程问答--------------------

 '当天
select * from table where name='' and date='2010-02-01'

'当月
select * from table where name='' and date >='2010-01-01' and date <='2010-01-31'
--------------------编程问答--------------------

 --当天
select * from table where name='' and date='2010-02-01'
--当月
select * from table where name='' and date >='2010-01-01' and date <='2010-01-31'
--------------------编程问答-------------------- 当月
select * from table where name='' and Month(date) =1 
--------------------编程问答-------------------- ......自己先写着试试吧 --------------------编程问答-------------------- 我已写过.不过有问题.程序太长贴不出来

我的难题在判断上下两个时间直接不重复

我采用的是重复+随机数*-1 的方法

判断可行已过...但是出来的效果总是有一点重复...(非常难跟)

如能帮忙看的话.我可以E-MAIL代码给大家... --------------------编程问答-------------------- 把你的数据和要求的结果详细说说。
再吧你的sql的代码写写下,别的不要。 --------------------编程问答-------------------- Dim m As Integer
   For i = 0 To rdEmp.RecordCount - 1
   m = 0
      sEmp = rdEmp![EmpID]
      sDate = IIf(isNull(rdEmp![dateHired]), sDt, rdEmp![dateHired])
      eDate = IIf(isNull(rdEmp![LCdate]), Date, rdEmp![LCdate])
      
      SQL = "delete from tmp_Trans where EmpID='" & sEmp & "' and Date>=#" & sDt & "# and Date<=#" & eDt & "#"
      gLTClockDB.Execute SQL
      
      If sDate > eDt Then   '入厂日期大于处理日期的最后一天时,不处理
         GoTo Next_Emp
      End If
      If eDate < sDt Then  '辞职日期小于处理日期的第一天时,不处理
         GoTo Next_Emp
      End If
      
      SQL = "select * from tmp_Trans"
      Set rdTmp = gLTClockDB.OpenRecordset(SQL)
      currDt = sDt
      Do While currDt <= eDt
         If currDt > eDate Then
            Exit Do
         End If
         If currDt < sDate Then   '入厂日期的问题 2002-06-05
            GoTo Next_Date
            'Exit Do
         End If
      
         rdTmp.AddNew
         rdTmp![EmpID] = sEmp
         rdTmp![Date] = currDt --------------------编程问答-------------------- '         Randomize  ''2005-09-29
'         X = Round(Rnd * 10, 0) - 5   '取随机数*10,然后四舍五入,-5是上下浮动5分钟.
          X = Round(Rnd * 100, 0)
         tsde1 = DateAdd("n", RndX(X) * -1, dtStart1)
         'Randomize  ''2005-09-29
         X = Round(Rnd * 100, 0)
         tsde2 = DateAdd("n", RndX(X) * -1, dtStart2)
'         Randomize  ''2005-09-29
         X = Round(Rnd * 100, 0)
         If dtStart3 <> "_:_" And IsDate(dtStart3) Then
          tsde3 = DateAdd("n", RndX(X) * -1, dtStart3)
         End If
'         Randomize  ''2005-09-29
         X = Round(Rnd * 100, 0)
          tede1 = DateAdd("n", RndX(X), dtEnd1)
'         Randomize  ''2005-09-29
         X = Round(Rnd * 100, 0)
         tede2 = DateAdd("n", RndX(X), dtEnd2)
 '        Randomize  ''2005-09-29
         X = Round(Rnd * 100, 0)
         If dtEnd3 <> "_:_" And IsDate(dtEnd3) Then
              tede3 = DateAdd("n", RndX(X), dtEnd3)
         End If --------------------编程问答-------------------- If m = 0 Then                '对比上一位员工
                For k = 0 To 1000
                    If tsde1 = tsde1c Then
                    k = k + 1
                         X = Round(Rnd * 100, 0)
                         tsde1 = DateAdd("n", RndX(X) * -1, dtStart1)
                    Else
                    Exit For
                    End If
                Next k
                       
                         'Randomize  ''2005-09-29
                For k = 0 To 1000
                       If tsde2 = tsde2c Then
                       k = k + 1
                         X = Round(Rnd * 100, 0)
                         tsde2 = DateAdd("n", RndX(X) * -1, dtStart2)
                          Else
                          Exit For
                          End If
                Next k
                '         Randomize  ''2005-09-29
                For k = 0 To 1000
                         If tsde3 = tsde3c Then
                         k = k + 1
                         X = Round(Rnd * 100, 0)
                         If dtStart3 <> "_:_" And IsDate(dtStart3) Then
                          tsde3 = DateAdd("n", RndX(X) * -1, dtStart3)
                         End If
                         Else
                         Exit For
                         End If
                Next k
                '         Randomize  ''2005-09-29
                For k = 0 To 1000
                        If tede1 = tede1c Then
                        k = k + 1
                         X = Round(Rnd * 100, 0)
                          tede1 = DateAdd("n", RndX(X), dtEnd1)
                       
                        Else
                        Exit For
                        End If
                Next k
                        
                For k = 0 To 1000
                         If tede2 = tede2c Then
                          k = k + 1
                '         Randomize  ''2005-09-29
                         X = Round(Rnd * 100, 0)
                         tede2 = DateAdd("n", RndX(X), dtEnd2)
                         Else
                         Exit For
                         End If
                Next k
                
                For k = 0 To 1000
                        If tede3 = tede3c Then
                        k = k + 1
                 '        Randomize  ''2005-09-29
                         X = Round(Rnd * 100, 0)
                         If dtEnd3 <> "_:_" And IsDate(dtEnd3) Then
                        tede3 = DateAdd("n", RndX(X), dtEnd3)
                         End If
                        Else
                         Exit For
                         End If
                Next k

Else                '对比上次时间
                    For k = 0 To 1000
                             If tsd1 = tsde1 Then
                             k = k + 1
                             X = Round(Rnd * 100, 0)
                             tsde1 = DateAdd("n", RndX(X) * -1, dtStart1)
                             Else
                             Exit For
                            End If
                    Next k
                             'Randomize  ''2005-09-29
                    For k = 0 To 1000
                           If tsd2 = tsde2 Then
                           k = k + 1
                             X = Round(Rnd * 100, 0)
                             tsde2 = DateAdd("n", RndX(X) * -1, dtStart2)
                            Else
                             Exit For
                            End If
                    Next k
                    '         Randomize  ''2005-09-29
                    For k = 0 To 1000
                             If tsd3 = tsde3 Then
                             k = k + 1
                             X = Round(Rnd * 100, 0)
                             If dtStart3 <> "_:_" And IsDate(dtStart3) Then
                             tsde3 = DateAdd("n", RndX(X) * -1, dtStart3)
                             End If
                             Else
                             Exit For
                             End If
                    Next k
                    '         Randomize  ''2005-09-29
                    For k = 0 To 1000
                            If ted1 = tede1 Then
                            k = k + 1
                             X = Round(Rnd * 100, 0)
                              tede1 = DateAdd("n", RndX(X), dtEnd1)
                            Else
                            Exit For
                            End If
                    Next k
                    For k = 0 To 1000
                             If ted2 = tede2 Then
                             k = k + 1
                    '         Randomize  ''2005-09-29
                             X = Round(Rnd * 100, 0)
                             tede2 = DateAdd("n", RndX(X), dtEnd2)
                             Else
                             Exit For
                             End If
                    Next k
                    For k = 0 To 1000
                            If ted3 = tede3 Then
                            k = k + 1
                     '        Randomize  ''2005-09-29
                             X = Round(Rnd * 100, 0)
                             If dtEnd3 <> "_:_" And IsDate(dtEnd3) Then
                             tede3 = DateAdd("n", RndX(X), dtEnd3)
                             End If
                             Else
                             Exit For
                             End If
                    Next k
End If

  rdTmp![TS1] = tsde1
  rdTmp![TS2] = tsde2
  rdTmp![TS3] = tsde3
  rdTmp![TE1] = tede1
  rdTmp![TE2] = tede2
  rdTmp![TE3] = tede3

                        rdTmp![LateTimes] = IIf(txtLate = "", 0, txtLate)
                        rdTmp![OTHour] = IIf(txtOT = "", 0, txtOT)
                                If Weekday(currDt) = 1 Or Weekday(currDt) = 7 Then  '当为星期六和星期日时
                                       If rdTmp.Fields("TS1") <> "" And rdTmp.Fields("TE1") <> "" Then  '写入工时
                                          rdTmp.Fields("SunHour") = 4  '08-07-03 yu |rdTmp.Fields("SunHour") = 3.5
                                       End If
                                       If rdTmp.Fields("TS2") <> "" And rdTmp.Fields("TE2") <> "" Then  '写入工时
                                          rdTmp.Fields("SunHour") = rdTmp.Fields("SunHour") + 4 '08-07-03 yu | rdTmp.Fields("SunHour") = rdTmp.Fields("SunHour") + 4.5
                                       End If
                                       If rdTmp.Fields("OThour") <> "" Then
                                          rdTmp.Fields("SunHour") = rdTmp.Fields("SunHour") + rdTmp.Fields("OThour")
                                       End If
                                    Else
                                       If rdTmp.Fields("TS1") <> "" And rdTmp.Fields("TE1") <> "" Then  '写入工时
                                          rdTmp.Fields("apHour") = 4  '08-07-03 yu | rdTmp.Fields("apHour") = 3.5
                                       End If
                                       If rdTmp.Fields("TS2") <> "" And rdTmp.Fields("TE2") <> "" Then  '写入工时
                                          rdTmp.Fields("apHour") = rdTmp.Fields("apHour") + 4 '08-07-03 yu |  rdTmp.Fields("apHour") = rdTmp.Fields("apHour") + 4.5
                                       End If
                                       If rdTmp.Fields("OThour") <> "" Then
                                          rdTmp.Fields("EveHour") = rdTmp.Fields("OThour")
                                       End If
                                End If


         rdTmp.Update
          
               tsd1 = tsde1 '取第1个,时间
               tsd2 = tsde2
               tsd3 = tsde3
               ted1 = tede1
               ted2 = tede2
               ted3 = tede3
If m = 0 Then
               tsde1c = tsde1 '取第2个,员工
               tsde2c = tsde2
               tsde3c = tsde3
               tede1c = tede1
               tede2c = tede2
               tede3c = tede3
End If
 m = m + 1 --------------------编程问答-------------------- 这么多代码?
我问你的要求,比如说哦,你的数据是怎么样的,你要得到的结果又是怎么样。
看你用了好多列的名字,数据库的结构也是要滴。 --------------------编程问答-------------------- 结构就只是利用一个临时表(空)
这个临时表包含了全部的字段了
生成后的数据插入出报表~
已上是我那里的代码

这个是循环全部员工的所有天数的6个时间的生成上下班记录(上午.下午.夜晚)
夜晚是有些不用填的

要求1:就是同一个人的第1天和第2天的上/下班时间不同
2:连续两位员工之间不能同一时间上下班(员工ID不连续) --------------------编程问答-------------------- 先看数据结构,如时间字段是什么类型:短日期、带分秒的长日期或字符串
lz判断的精度是否到分秒。 给个抓图好分析 --------------------编程问答-------------------- 假定你的原始数据为进出门的刷卡记录。
生成上下班记录只要将进出门记录进行配对即可。
循环所有员工,以员工、整个统计时间段为条件,按时间排序进行查询。

这样每个员工按照时间序循环分析进出门记录:
  需要变量:上班标记,上班时间,下班时间
1)对进门记录
  IF 上班标记 = 下班 THEN
    上班时间 = 打卡时间
    上班标记 = 上班
  'ELSE
    '忽略重复打卡
  END IF

2)对出门记录
  IF 上班标记 = 上班 THEN
    下班时间 = 打卡时间
    用 上班时间、下班时间 生成一条上下班记录
    上班标记 = 下班
  'ELSE
    '忽略重复打卡
  END IF
--------------------编程问答-------------------- 我上面也是差不多那样写的
但是那客户刁难没办法

我的那些代码我跟过的.可以运行.判断也有走过.

但是结果只是有一点改进.但还是有重复

要求1:就是同一个人的第1天和第2天的上/下班时间不同 
2:连续两位员工之间不能同一时间上下班(员工ID不连续) --------------------编程问答-------------------- 你的两个问题根本不存在。
1.是按照一次进门和一次出门来判断的,根本与哪个班次无关
2.原始数据用 员工、时间 排序两个员工没有关系;生成记录肯定有 员工ID 做区分,也没有关系。 --------------------编程问答-------------------- tigerandufo
你这个代码似乎比较糟糕哦,
我现在也在在这个考勤的问题,但是我这没你那复杂,我只要考虑一个班次就可以,不知道你是怎么考虑跨天考勤这个问题的。比如上班时间20:00,下班时间第二天02:00。 --------------------编程问答-------------------- 不好意思大家
这个没有班次的

是自定义一个时间做标准来生成上下班时间

比如填入8点上班.那我就会计算出他生成800+随机数来生成那个上班时间

现在的问题是.得出来的那个数会是A和B员工双同
(我加了判断但上面的判断有走.但是还是有相同)
--------------------编程问答-------------------- 上班 2010-2-1 20:00
下班 2010-2-2 02:00
能够正确排序,一次上班对一次下班,没有任何问题。 --------------------编程问答-------------------- 学习中,帮顶! --------------------编程问答-------------------- 跟了很久也跟不出原因.真悲剧啊我

不知道是不是写的方法有误区还是思想有误区

真不明白 --------------------编程问答-------------------- 我也写过类似的考勤记录生成,根据实际薪资,设定多样话上下班及加班时间,然后生成对应的考勤上下班时间,完事后直接把考勤记录导入到考勤软件中生成员工考勤汇总记录。当然条件可以多样化设置,让其看不出是生成的。应付人员验厂用的。 --------------------编程问答--------------------
引用 10 楼 tigerandufo 的回复:
If m = 0 Then                '对比上一位员工
                For k = 0 To 1000
                    If tsde1 = tsde1c Then
                    k = k + 1
                        X = Round(Rnd * 100, 0)
                        tsde1 = DateAdd("n", RndX(X) * -1, dtStart1)
                    Else
                    Exit For
                    End If
                Next k
                     
                        'Randomize  ''2005-09-29
                For k = 0 To 1000
                      If tsde2 = tsde2c Then
                      k = k + 1
                        X = Round(Rnd * 100, 0)
                        tsde2 = DateAdd("n", RndX(X) * -1, dtStart2)
                          Else
                          Exit For
                          End If
                Next k
                '        Randomize  ''2005-09-29
                For k = 0 To 1000
                        If tsde3 = tsde3c Then
                        k = k + 1
                        X = Round(Rnd * 100, 0)
                        If dtStart3 <> "_:_" And IsDate(dtStart3) Then
                          tsde3 = DateAdd("n", RndX(X) * -1, dtStart3)
                        End If
                        Else
                        Exit For
                        End If
                Next k
                '        Randomize  ''2005-09-29
                For k = 0 To 1000
                        If tede1 = tede1c Then
                        k = k + 1
                        X = Round(Rnd * 100, 0)
                          tede1 = DateAdd("n", RndX(X), dtEnd1)
                     
                        Else
                        Exit For
                        End If
                Next k
                       
                For k = 0 To 1000
                        If tede2 = tede2c Then
                          k = k + 1
                '        Randomize  ''2005-09-29
                        X = Round(Rnd * 100, 0)
                        tede2 = DateAdd("n", RndX(X), dtEnd2)
                        Else
                        Exit For
                        End If
                Next k
               
                For k = 0 To 1000
                        If tede3 = tede3c Then
                        k = k + 1
                '        Randomize  ''2005-09-29
                        X = Round(Rnd * 100, 0)
                        If dtEnd3 <> "_:_" And IsDate(dtEnd3) Then
                        tede3 = DateAdd("n", RndX(X), dtEnd3)
                        End If
                        Else
                        Exit For
                        End If
                Next k

Else                '对比上次时间
                    For k = 0 To 1000
                            If tsd1 = tsde1 Then
                            k = k + 1
                            X = Round(Rnd * 100, 0)
                            tsde1 = DateAdd("n", RndX(X) * -1, dtStart1)
                            Else
                            Exit For
                            End If
                    Next k
                            'Randomize  ''2005-09-29
                    For k = 0 To 1000
                          If tsd2 = tsde2 Then
                          k = k + 1
                            X = Round(Rnd * 100, 0)
                            tsde2 = DateAdd("n", RndX(X) * -1, dtStart2)
                            Else
                            Exit For
                            End If
                    Next k
                    '        Randomize  ''2005-09-29
                    For k = 0 To 1000
                            If tsd3 = tsde3 Then
                            k = k + 1
                            X = Round(Rnd * 100, 0)
                            If dtStart3 <> "_:_" And IsDate(dtStart3) Then
                            tsde3 = DateAdd("n", RndX(X) * -1, dtStart3)
                            End If
                            Else
                            Exit For
                            End If
                    Next k
                    '        Randomize  ''2005-09-29
                    For k = 0 To 1000
                            If ted1 = tede1 Then
                            k = k + 1
                            X = Round(Rnd * 100, 0)
                              tede1 = DateAdd("n", RndX(X), dtEnd1)
                            Else
                            Exit For
                            End If
                    Next k
                    For k = 0 To 1000
                            If ted2 = tede2 Then
                            k = k + 1
                    '        Randomize  ''2005-09-29
                            X = Round(Rnd * 100, 0)
                            tede2 = DateAdd("n", RndX(X), dtEnd2)
                            Else
                            Exit For
                            End If
                    Next k
                    For k = 0 To 1000
                            If ted3 = tede3 Then
                            k = k + 1
                    '        Randomize  ''2005-09-29
                            X = Round(Rnd * 100, 0)
                            If dtEnd3 <> "_:_" And IsDate(dtEnd3) Then
                            tede3 = DateAdd("n", RndX(X), dtEnd3)
                            End If
                            Else
                            Exit For
                            End If
                    Next k
End If

  rdTmp![TS1] = tsde1
  rdTmp![TS2] = tsde2
  rdTmp![TS3] = tsde3
  rdTmp![TE1] = tede1
  rdTmp![TE2] = tede2
  rdTmp![TE3] = tede3

                        rdTmp![LateTimes] = IIf(txtLate = "", 0, txtLate)
                        rdTmp![OTHour] = IIf(txtOT = "", 0, txtOT)
                                If Weekday(currDt) = 1 Or Weekday(currDt) = 7 Then  '当为星期六和星期日时
                                      If rdTmp.Fields("TS1") <> "" And rdTmp.Fields("TE1") <> "" Then  '写入工时
                                          rdTmp.Fields("SunHour") = 4  '08-07-03 yu |rdTmp.Fields("SunHour") = 3.5
                                      End If
                                      If rdTmp.Fields("TS2") <> "" And rdTmp.Fields("TE2") <> "" Then  '写入工时
                                          rdTmp.Fields("SunHour") = rdTmp.Fields("SunHour") + 4 '08-07-03 yu | rdTmp.Fields("SunHour") = rdTmp.Fields("SunHour") + 4.5
                                      End If
                                      If rdTmp.Fields("OThour") <> "" Then
                                          rdTmp.Fields("SunHour") = rdTmp.Fields("SunHour") + rdTmp.Fields("OThour")
                                      End If
                                    Else
                                      If rdTmp.Fields("TS1") <> "" And rdTmp.Fields("TE1") <> "" Then  '写入工时
                                          rdTmp.Fields("apHour") = 4  '08-07-03 yu | rdTmp.Fields("apHour") = 3.5
                                      End If
                                      If rdTmp.Fields("TS2") <> "" And rdTmp.Fields("TE2") <> "" Then  '写入工时
                                          rdTmp.Fields("apHour") = rdTmp.Fields("apHour") + 4 '08-07-03 yu |  rdTmp.Fields("apHour") = rdTmp.Fields("apHour") + 4.5
                                      End If
                                      If rdTmp.Fields("OThour") <> "" Then
                                          rdTmp.Fields("EveHour") = rdTmp.Fields("OThour")
                                      End If
                                End If


        rdTmp.Update
         
              tsd1 = tsde1 '取第1个,时间
              tsd2 = tsde2
              tsd3 = tsde3
              ted1 = tede1
              ted2 = tede2
              ted3 = tede3
If m = 0 Then
              tsde1c = tsde1 '取第2个,员工
              tsde2c = tsde2
              tsde3c = tsde3
              tede1c = tede1
              tede2c = tede2
              tede3c = tede3
End If
m = m + 1


这个是对的!试验一下吧! --------------------编程问答-------------------- 生成一个考勤时间表,在程序中控制输入的有效性。数据库中设置一个字段为生成报表项的数据,然后控制这个报表项,可能要简化一些。 --------------------编程问答--------------------
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,