|
新建窗体,新建按钮(Command0),代码如下:
Private Sub Command0_Click()
开始重编号
End Sub
Function Conn() As ADODB.Connection '仅为了其他地方书写方便
Set Conn = CurrentProject.Connection
End Function
Function 开始重编号()
Dim Rec As New ADODB.Recordset, i, sql, str, maxID
sql = "update 族人信息 set 重编号=0,新承上码=0" '清空字段
Conn.Execute sql
sql = "select * from 族人信息 where nz(承上码,0)=0 order by 世代,族人代码" '选择没有承上码或=0的,表示他为始祖
Rec.Open sql, Conn, adOpenStatic, adLockReadOnly
For i = 1 To Rec.RecordCount
maxID = DMax("重编号", "族人信息") '获得已有的新编码的最大值
sql = "update 族人信息 set 重编号=" & maxID + 1 & " where 族人代码=" & Rec!族人代码 '根节点无须更新[新承上码]
Conn.Execute sql
递归重编号 Rec!族人代码 '调用递归函数
Rec.MoveNext
Next i
End Function
Function 递归重编号(CSM)
Dim Rec As New ADODB.Recordset, i, sql, str, maxID, newCSM
sql = "select * from 族人信息 where 承上码=" & CSM & " order by 族人代码" '只是打开承上码等于参数CSM的记录
Rec.Open sql, Conn, adOpenStatic, adLockReadOnly
For i = 1 To Rec.RecordCount
maxID = DMax("重编号", "族人信息") '获得已有的新编码的最大值
newCSM = DLookup("重编号", "族人信息", "族人代码=" & CSM) '获得CSM参数代表的成员的新编码
sql = "update 族人信息 set 重编号=" & maxID + 1 & ",新承上码=" & newCSM & " where 族人代码=" & Rec!族人代码
Conn.Execute sql
递归重编号 Rec!族人代码 '调用自己,这就是递归
Rec.MoveNext
Next i
End Function
|
|