|
写了一下
按照你的这个表结构,如果该同志从来都不交,肯定是漏网之鱼的
以下速度还是慢
建议按照年度 或者部门进行分别汇总
Rs.Open "select * from 宏达 where 所属日期 like "2003%" order by 养老编号,所属日期 ", Conn, adOpenDynamic, adLockOptimistic
速度好狠多
代码:
Dim Conn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim RsErr As ADODB.Recordset
'存储变量
Dim SDATE As String, SNO As String
Set Conn = CurrentProject.Connection
Set Rs = New ADODB.Recordset
Set RsErr = New ADODB.Recordset
Rs.Open "select * from 宏达 order by 养老编号,所属日期 ", Conn, adOpenDynamic, adLockOptimistic
RsErr.Open "select * from 出错", Conn, adOpenDynamic, adLockOptimistic
If Not Rs.EOF Then
While Not Rs.EOF
If SNO = "" Then
SNO = Rs!养老编号
SDATE = Rs!所属日期
Else
If Rs!养老编号 = SNO Then
If Rs!所属日期 = SDATE + 1 Then
SDATE = Rs!所属日期
Else
RsErr.AddNew
RsErr!养老编号 = SNO
RsErr!所属日期1 = SDATE
RsErr!所属日期2 = Rs!所属日期
'这儿如果定义为前一月,则rserr!所属日期2=rs!所属日期-1'
'但需要判断是不是1号,否则会出错这儿加1好像有日期函数,兔兔忘了
RsErr.Update
End If
Else
'换人啦
'判断前面的是否全交到现在的月份
If SDATE = Year(Date) & Month(Date) Then
'这位老大全交啦,放人,放人
Else
'不要逃
RsErr.AddNew
RsErr!养老编号 = SNO
RsErr!所属日期1 = SDATE
'同样这儿也需要如果要多加一个月
'RsErr!所属日期1 = SDATE+1,判断是不是月底哦,这儿加1好像有日期函数,兔兔忘了
RsErr!所属日期2 = Year(Date) & Month(Date)
RsErr.Update
End If
'好了,开始下一位
SNO = Rs!养老编号
SDATE = Rs!所属日期
End If
End If
Rs.MoveNext
'最后一名也不能放过
'判断前面的是否全交到现在的月份
If Rs.EOF Then
If SDATE = Year(Date) & Month(Date) Then
'这位老大全交啦,放人,放人
Else
'不要逃
RsErr.AddNew
RsErr!养老编号 = SNO
RsErr!所属日期1 = SDATE
RsErr!所属日期2 = Year(Date) & Month(Date)
RsErr.Update
End If
End If
Wend
End If
MsgBox "累死俺啦,终于自动汇总完啦~!!"
Rs.Close
RsErr.Close
Set Rs = Nothing
Set RsErr = Nothing
Set Conn = Nothing |
|