|
大致是这样,你测试一下:
Dim rs2 As New ADODB.Recordset
Dim ssql2 As String
Dim 本页已用行数 As Long, 总页码 As Long, 页序 As Long, 转下页行数 As Long, 世代 As Long
Dim i As Long
CurrentProject.Connection.Execute "update 表 set 页=0,页序=0,转下页行=0"
ssql2 = "select * from 表 ORDER BY 世代,族人代码 "
rs2.Open ssql2, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
'Debug.Print rs2.RecordCount
总页码 = 0
本页已用行数 = 0
页序 = 0
For i = 1 To rs2.RecordCount
If rs2!世代 = 世代 Then
'
If 本页已用行数 < 26 - 2 Then
'至少可以在本页插入姓名
页序 = 页序 + 1
rs2!页 = 总页码
rs2!页序 = 页序
If 本页已用行数 + 2 + rs2!行数 <= 26 Then
本页已用行数 = 本页已用行数 + 2 + rs2!行数
转下页行数 = 0
Debug.Print "a", rs2!族人代码, 总页码, 页序, 本页已用行数, 转下页行数
Else
'综合跨页,不是姓名跨页
Debug.Print "b1", rs2!族人代码, 总页码, 页序, 本页已用行数, 转下页行数
转下页行数 = 本页已用行数 + 2 + rs2!行数 - 26
'Debug.Print 总页码, Int(转下页行数 / 26)
总页码 = 总页码 + Int((本页已用行数 + 2 + rs2!行数) / 26)
本页已用行数 = 转下页行数 Mod 26
页序 = 0
Debug.Print "b2", rs2!族人代码, 总页码, 页序, 本页已用行数, 转下页行数
End If
rs2!转下页行 = 转下页行数
' Debug.Print "a", rs2!族人代码, 总页码, 页序, 本页已用行数, 转下页行数
Else
'跨页
总页码 = 总页码 + 1
本页已用行数 = 0
页序 = 1
rs2!页 = 总页码
rs2!页序 = 页序
If 2 + rs2!行数 <= 26 Then
本页已用行数 = 2 + rs2!行数
转下页行数 = 0
Debug.Print "c", rs2!族人代码, 总页码, 页序, 本页已用行数, 转下页行数
Else
总页码 = 总页码 + Int((2 + rs2!行数) / 26)
转下页行数 = (2 + rs2!行数) Mod 26
Debug.Print "d", rs2!族人代码, 总页码, 页序, 本页已用行数, 转下页行数
End If
rs2!转下页行 = 转下页行数
End If
Else
'新的一代,从新的页开始
总页码 = 总页码 + 1
本页已用行数 = 0
页序 = 1
rs2!页 = 总页码
rs2!页序 = 页序
If 2 + rs2!行数 <= 26 Then
本页已用行数 = 2 + rs2!行数
转下页行数 = 0
Debug.Print "e", rs2!族人代码, 总页码, 页序, 本页已用行数, 转下页行数
Else
总页码 = 总页码 + Int(2 + rs2!行数)
转下页行数 = (2 + rs2!行数) Mod 26
Debug.Print "f", rs2!族人代码, 总页码, 页序, 本页已用行数, 转下页行数
End If
rs2!转下页行 = 转下页行数
End If
世代 = rs2!世代
rs2.Update
rs2.MoveNext
Next i
'Debug.Print "ok"
rs2.Close
Set rs2 = Nothing |
|