|
各位大师
我在ASLXT大师原码基础上,给表增加了行计字段,增加了计算代码。在使用中存在二个问题:一是第一条记录的转下页行不增加到第二条记录的行计中,其他记录增加,并是正确的。二是有时出现转下页行超过26行,需要添加一页,同时还会出现转下页行的问题,这如何处理,我添加的代码不理想,如何改写才正确,请帮助.
附代码
Dim rs2 As New ADODB.Recordset
Dim ssql2 As String
Dim 本页已用行数 As Long, 总页码 As Long, 页序 As Long, 转下页行数 As Long, 世代 As Long, 行计 As Long
Dim i, mm As Long
ssql2 = "select 族人代码,综合,世代,行数,页,页序,本页行,转下页行,行计,新谱号,字长,加页 from 报表数据源表 WHERE 姓名<>'' ORDER BY 世代,族人代码 "
rs2.Open ssql2, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
总页码 = 0
本页已用行数 = 0
页序 = 0
Ha=26
For i = 1 To CLng(rs2.RecordCount)
行计 = 0
If rs2!世代 = 世代 Then
If 本页已用行数 <= ha - 2 Then '至少可以在本页插入姓名
页序 = 页序 + 1 '族人的页序逐个增加
rs2!页 = 总页码 '族人信息的开始页码不变
rs2!页序 = 页序
If 本页已用行数 + 2 + rs2!行数 <= ha Then '没有转页的情况
本页已用行数 = 本页已用行数 + 2 + rs2!行数 '追加本页已用的行数
转下页行数 = 0
行计 = 本页已用行数 '付添-
Else
'综合跨页,不是姓名跨页,也不是世代跨页,即行数跨页
转下页行数 = 本页已用行数 + 2 + rs2!行数 - ha
行计 = 本页已用行数 + 2 + rs2!行数
总页码 = 总页码 + Int((转下页行数) / ha) + 1 '记录族人信息的结束页码,也是下一个族人信息的开始页码 加1付添,这样可分页
本页已用行数 = 转下页行数 Mod ha '记录最后一页已经使用的行数
页序 = 0 '重置页序,使得下一个族人的页序变为第一个
End If
If 转下页行数 > ha Then
rs2!加页 = 1
mm = Val(转下页行数) - 26
CurrentDb.Execute "INSERT INTO 报表数据源表 ( 族人代码,综合,世代, 页, 本页行, 转下页行, 页序, 行计,加页) values('" & rs2!族人代码 & "','" & Mid(rs2!综合, rs2!字长 + 208, 26 * 8) & "','" & rs2!世代 & "','" & rs2!页 + 1 & "', 0,'" & mm & "', 0,'" & ha & "',2)" '付添-
End If
rs2!转下页行 = 转下页行数
Else
行计 = 行计 + 2 + rs2!行数
'跨页,开始新的族人信息
总页码 = 总页码 + 1
本页已用行数 = 0
页序 = 1
rs2!页 = 总页码
rs2!页序 = 页序
If 2 + rs2!行数 <= ha Then
本页已用行数 = 2 + rs2!行数
转下页行数 = 0
Else
总页码 = 总页码 + Int((2 + rs2!行数) / ha)
转下页行数 = (2 + rs2!行数) Mod ha
End If
rs2!转下页行 = 转下页行数
End If
Else
'新的一个世代的族人,从新的页开始
总页码 = 1 ' 总页码 + 1
本页已用行数 = 0
页序 = 1
rs2!页 = 总页码
rs2!页序 = 页序
If 2 + rs2!行数 <= ha Then
本页已用行数 = 2 + rs2!行数
转下页行数 = 0
Else
总页码 = 总页码 + Int((2 + rs2!行数) / ha)
转下页行数 = (2 + rs2!行数) Mod ha
End If
rs2!转下页行 = 转下页行数
行计 = 行计 + 2 + rs2!行数 '付添
End If
世代 = rs2!世代 '记录世代信息,便于下一代从新页开始
rs2!本页行 = rs2!行数 - 转下页行数
rs2!新谱号 = i
rs2!行计 = 行计 '付添
rs2.Update
rs2.MoveNext
Next i
rs2.Close
Set rs2 = Nothing |
|