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
| Private Sub SupprimerTropEtudiant(prmAnnee As Long, prmNbMaxEtudiant As Long)
Dim db As DAO.Database: Set db = CurrentDb
Dim q As DAO.QueryDef: Set q = db.QueryDefs("reqFormationTropEtudiant")
Dim r As DAO.Recordset
q.Parameters("prmAnnee") = prmAnnee
q.Parameters("prmNbMaxEtudiant") = prmNbMaxEtudiant
'=== Supprime les multi-inscrits
Set r = q.OpenRecordset(dbOpenDynaset)
Do While Not r.EOF
'Est-ce que cette personne a une participation < NumChoix
If Not IsNull(DFirst("PersonneId", "tblParticipation", "[Annee]=" & r![Annee] & " and [NumChoix]<" & r![numChoix])) Then
'oui, elle a une participation pour une autre formation qu'elle préfère
' on peut la supprimer de celle-ci
r.Delete
End If
If DCount("PersonneId", "tblParticipation", "[FormationId]=" & r![FormationId]) <= prmNbMaxEtudiant Then
'Ok on est en dessous de la limite plus besoin de faire du ménage.
Exit For
End If
r.MoveNext
Loop
r.Close: Set r = Nothing
'--- Supprime les multi-choix
'=== Supprime les participations précedentes
Set r = q.OpenRecordset(dbOpenDynaset)
Do While Not r.EOF
'Est-ce que cette personne a une participation en Annee-1 et Annee-2
'J'utilise between qui pemet de définir un interval, il est alors facile de changer les frontières si on décide d'ajoutre des années.
If Not IsNull(DFirst("PersonneId", "tblParticipation", "[Annee] between " & r![Annee] - 2 & " and " & r![Annee] - 1 & " and [EstPresent]=True")) Then
'oui, elle a participé à la même formation dans les années précédentes
' on peut la supprimer de celle-ci
r.Delete
End If
If DCount("PersonneId", "tblParticipation", "[FormationId]=" & r![FormationId]) <= prmNbMaxEtudiant Then
'Ok on est en dessous de la limite plus besoin de faire du ménage.
Exit For
End If
r.MoveNext
Loop
r.Close: Set r = Nothing
'--- Supprime les participations précedentes
Set q = Nothing
db.Close: Set db = Nothing
End Sub |