Bonjour,
J'ai une table qui contient un attribut "Jour" pouvant être multivalué (plusieurs valeurs pour un seul enregistrement) et dans un formulaire j'ai une listebox contenant les jours de la semaine.
Le traitement que j'aimerai mettre au point serait, quand on clique sur un bouton, de mettre a jour les données de l'enregistrement séléctionné ainsi que les jours. Pour faciliter le traitement, quand on clique sur le bouton je pensais "éffacer" les données Jour du recordset lié a l'enregistrement puis le remplir avec les nouvelles données.
Cependant le traitement ne marche pas vraiment et je m'entête dessus
Voici mon code:
Ici j'éfface les anciennes données de Jour
Code : 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 Set oRstJour = oDb.OpenRecordset("SELECT * FROM Planning WHERE NumPlan =" & Me.NumPlan.ItemData(I) & "", DB_OPEN_DYNASET) With oRstJour If Not .EOF Then oRstJour.Edit 'Récupère le recordset du champ multi-valué Set oRst = .Fields("Jour").Value With oRst While Not oRst.EOF oRst.Delete oRst.MoveFirst Wend End With oRstJour.Update Else MsgBox "Aucun Planning valide", vbCritical, "Erreur" End If End With
Et ici je suis censé les re-remplir:
Le problème ce que ça ne marche vraiment pas bien (1 fois sur 10) et je ne parviens pas a trouver comment faire...
Code : 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 Set oRstJour2 = oDb.OpenRecordset("SELECT * FROM Planning WHERE NumPlan =" & Me.NumPlan.ItemData(I) & "", DB_OPEN_DYNASET) For J = 0 To Me.JourDiff.ListCount - 1 If (Me.JourDiff.Selected(J) = True) Then Str2 = Me.JourDiff.ItemData(I) With oRstJour2 oRstJour2.Edit 'Vérifie que le curseur n'est pas vide If Not .EOF Then 'Récupère le recordset du champ multi-valué Set oRst2 = .Fields("Jour").Value With oRst2 'If Not .EOF Then .AddNew .Fields(0) = Str2 'on rajoute le nouveau .Update 'End If End With Else MsgBox "Aucun Planning valide", vbCritical, "Erreur" End If oRstJour2.Update End With End If Next
J'ai testé la partie pour effacer en mettant la partie de remplissage en commentaires: ça ne vide pas toujours :/
Au début j'avais mis dans ma boucle for :
Si on a une ligne séléctionnée:
on l'insere
Sinon
Si elle apparait dans mon enregistrement
on la supprime
finsi
finsi
Mais ça ne marchait pas non plus.
Sinon au bout d'un certain nombre d'utilisation/d'erreur, VBA me dit qu'il y' a trop de Transactions ouvertes et ça m'oblige a fermer et réouvrir Access. Suis-je passé a côté de quelquechose ?
Merci a ceux qui liront jusque là.
Partager