Torna al Thread
Public Sub AggNum()
Dim maxNum As Long
Dim Dbx As DAO.Database
Dim Rs1 As DAO.Recordset
Dim Rs2 As DAO.Recordset
Set Dbx = DBEngine(0)(0)
' apriamo 1° recordset dove non c'è Num
Set Rs1 = Dbx.OpenRecordset("SELECT DISTINCT CLng(Data) AS IntDat FROM T1 WHERE (Num Is Null);", dbOpenDynaset)
If Rs1.RecordCount = 0 Then Exit Sub
Rs1.MoveFirst
Do Until Rs1.EOF
' ci fissiamo la Data del 1° in una variabile (io preferisco numerica) ......
maxNum = Nz((DMax("Num", "T1", "CLng(Data)=" & Rs1.Fields("IntDat").Value & "")), 0)
' ..... e apriamo il 2° recorset filtrando sulla data del 1°
Set Rs2 = Dbx.OpenRecordset("SELECT Num FROM T1 WHERE ((Num Is Null) AND (CLng(Data)=" & Rs1.Fields("IntDat").Value & ")) ORDER BY Id;", dbOpenDynaset)
Rs2.MoveFirst ' questo non servirebbe perche abbiamo l'ordinamento, ma!!! siamo prudenti :))
Do Until Rs2.EOF
' Mettiamo il numero solo dove manca sulla base del maxNum che avevamo trovato
Rs2.Edit
Rs2.Fields("Num").Value = maxNum + 1
Rs2.Update
' incrementiamo maxNum di 1 per prepararlo al prossimo UPDATE
maxNum = maxNum + 1
Rs2.MoveNext
Loop
Rs1.MoveNext
Loop
Rs1.Close
Rs2.Close
Dbx.Close
Set Rs1 = Nothing
Set Rs2 = Nothing
Set Dbx = Nothing
End Sub