1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| Private Sub Commande0_Click()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
Set dbs = CurrentDb
'Req qui calcule dernière date CUID_Secondaire
strSQL = "SELECT Last(ID_CUID_2re) AS DernierID, CUID_Principal, Max(Date_Secondaire) AS DateMax" _
& " FROM T_CUID_2re" _
& " GROUP BY T_CUID_2re.CUID_Principal;"
Set rst = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
DoCmd.SetWarnings False
'On vérifie la présence dun jeu denregistrement dans le strSQL d'au-dessus
If rst.RecordCount <> 0 Then
'Alors on crée la tbl ci-dessous
CurrentDb.Execute "CREATE TABLE T_Personne_tmp (" _
& " ID_Personne_tmp AutoIncrement, " _
& " CUID_Personne_tmp Text(8) CONSTRAINT idxCUID Primary Key, " _
& " Nom_Personne_tmp Text(50), " _
& " Prénom_Personne_tmp Text(30), " _
& " CUID_Secondaire_tmp Text(8), " _
& " Date_Secondaire_tmp Date, " _
& " CUID_Valid_tmp Text(8))", dbFailOnError
'On insert le jeu denregistrement de tbl_Personne dans tbl_tmp
CurrentDb.Execute "INSERT INTO T_Personne_tmp (ID_Personne_tmp, CUID_Personne_tmp, Nom_Personne_tmp, Prénom_Personne_tmp)" _
& " SELECT T_Personne.ID_Personne, T_Personne.CUID_Personne, T_Personne.Nom_Personne, T_Personne.Prénom_Personne" _
& " FROM T_Personne", dbFailOnError
'On crée la tbl ci-dessous
CurrentDb.Execute "CREATE TABLE T_CUID_2re_tmp (" _
& " id_tmp1 AutoIncrement CONSTRAINT idxid Primary Key, " _
& " CUID_Principal_tmp1 Text(8), " _
& " Date_Secondaire_tmp1 Date)", dbFailOnError
'On y insert le résultat de strSQL
CurrentDb.Execute "INSERT INTO T_CUID_2re_tmp (id_tmp1, CUID_Principal_tmp1, Date_Secondaire_tmp1)" _
& " SELECT Last(ID_CUID_2re) AS DernierID, CUID_Principal, Max(Date_Secondaire) AS DateMax" _
& " FROM T_CUID_2re " _
& " GROUP BY CUID_Principal", dbFailOnError
'On met à jour la Date_Secondaite dans T_Personne_tmp
CurrentDb.Execute "UPDATE T_Personne_tmp INNER JOIN T_CUID_2re_tmp ON T_Personne_tmp.CUID_Personne_tmp = T_CUID_2re_tmp.CUID_Principal_tmp1" _
& " SET T_Personne_tmp.Date_Secondaire_tmp = [Date_Secondaire_tmp1]", dbFailOnError
'On met à jour le CUID_Secondaire dans T_Personne_tmp
CurrentDb.Execute "UPDATE T_Personne_tmp INNER JOIN T_CUID_2re ON (T_Personne_tmp.Date_Secondaire_tmp = T_CUID_2re.Date_Secondaire) AND (T_Personne_tmp.CUID_Personne_tmp = T_CUID_2re.CUID_Principal)" _
& " SET T_Personne_tmp.CUID_Secondaire_tmp = [CUID_Secondaire]", dbFailOnError
'On calcule le CUID Actif (CUID_Principal ou dernier Secondaire)
CurrentDb.Execute "UPDATE T_Personne_tmp SET T_Personne_tmp.CUID_Valid_tmp = IIf([CUID_Secondaire_tmp] Is Not Null,[CUID_Secondaire_tmp],[CUID_Personne_tmp])", dbFailOnError
End If
'DoCmd.DeleteObject acTable, "T_CUID_2re_tmp"
'DoCmd.DeleteObject acTable, "T_Personne_tmp"
DoCmd.SetWarnings True
RefreshDatabaseWindow
End Sub |
Partager