Bonjour,
J'ai un petit souci dans mon application.
En effet lors de la modification d'un utilisateur je mets à jour sa liste de droits.
Ainsi, pour chaque droit modifié je lance un update sur la table droit et pour chaque droit supprimé je lance une requête delete sur la table.
Lorsque je suis dans la même transaction, la suppression plante car il y a un verrou sur la table.
Merci par avance de votre aide.
Mécanique de modif/suppr
Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
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 Dim maConnection As Connection maConnection = ApplicationContext.GetInstance.CurrentConnection maConnection.BeginTrans() Try FactoryUtilisateur.UpdateUtilisateur(maConnection, monUtilisateur) If Not monUtilisateur.Droits Is Nothing Then Dim mesDroitsEnBase As Droits mesDroitsEnBase = GetDroitsForUtilisateur(monUtilisateur) For Each monDroit As Droit In monUtilisateur.Droits If mesDroitsEnBase Is Nothing OrElse Not mesDroitsEnBase.Exist(monDroit) Then Else UpdateDroit(maConnection, monDroit, monUtilisateur) End If Next For Each monDroit As Droit In mesDroitsEnBase If monUtilisateur.Droits Is Nothing OrElse Not monUtilisateur.Droits.Exist(monDroit) Then SupprimeDroit(maConnection, monDroit, monUtilisateur) End If Next maConnection.CommitTrans() End If monUtilisateur.MajInfoFromUtilisateur(GetUtilisateur(monUtilisateur.ID), True) Catch ex As Exception maConnection.RollbackTrans() Throw ex End Try
Ensuite chaque requete est géré par un abstractDAO dont voici les lignes.
Update
Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 maReq = "SELECT * FROM " & maTable & " WHERE " & préfixeChamp & "_ID = " & monId monRecordSet.Open(maReq, maConnection, CursorTypeEnum.adOpenDynamic, LockTypeEnum.adLockOptimistic) For Each champ As Champ In mesChamps monRecordSet.Fields(préfixeChamp & "_" & champ.Nom).Value = champ.Valeur Next monRecordSet.Fields(préfixeChamp & "_Version").Value = CType(monRecordSet.Fields(préfixeChamp & "_Version").Value, Long) + 1 monRecordSet.Fields(préfixeChamp & "_DateModification").Value = Now monRecordSet.Update() monRecordSet.Close() monRecordSet = Nothing
Delete
Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Dim maReq As String = "Delete FROM " & maTable & " WHERE " & préfixeChamp & "_ID = " & monId monRecordSet.Open(maReq, maConnection, CursorTypeEnum.adOpenKeyset, LockTypeEnum.adLockPessimistic)
Partager