L’ajout d’une nouvelle valeur dans un champ en acceptant plusieurs valeurs pour un enregistrement donné doit d’abord être vu comme la mise à jour de ce premier enregistrement. Il s’agit donc dans un premier temps d’éditer celui-ci dans le recordset principal, puis ensuite d’ajouter l’élément dans le sous recordset.
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
| '---------------------------------------------------------------
' Procedure : ExempleAjoutChampMutliple
' Author : Christophe WARIN - Tofalu - www.developpez.com
' Date : 11/04/2010
' Purpose : Exemple d'ajout dans un champ à valeurs multiples.
'---------------------------------------------------------------
'
Sub ExempleAjoutChampMutliple()
Dim oDb As DAO.Database
Dim oRst As DAO.Recordset
Dim oRst2 As DAO.Recordset2
Set oDb = CurrentDb
Set oRst = oDb.TableDefs("tblClient").OpenRecordset(dbOpenDynaset)
With oRst
.FindFirst ("idclient=2")
If Not .NoMatch Then
.Edit
Set oRst2 = .Fields("StatutClient").Value
With oRst2
.AddNew
.Fields("Value").Value = 4
.Update
End With
oRst2.Close: Set oRst2 = Nothing
.Update
End If
End With
oRst.Close: Set oRst = Nothing
End Sub |
En cas d’oubli de l’appel à la méthode
Edit du Recordset principal, l’erreur levée par VBA est assez explicite :
3852 Impossible de mettre à jour un champ à plusieurs valeurs si le jeu d'enregistrements parent n'est pas accessible en mode Modification. Pour ce faire, utilisez la méthode AddNew ou Edit.
Une même valeur ne pouvant être renseignée deux fois dans un même champ, une erreur 3820 sera générée pour toute tentative de doublonnage :
Vous ne pouvez pas entrer cette valeur, car elle duplique une valeur existante dans le champ Liste de choix à plusieurs valeurs ou dans le champ Pièce jointe. Le champ Liste de choix à plusieurs valeurs ou le champ Pièce jointe ne peuvent pas contenir de valeurs dupliquées.
Si jusque-là, Visual Basic semble garantir l’intégrité des données, ce n’est toutefois plus le cas dès qu’il s’agit d’intégrer des valeurs absentes de la source de données. En d’autres termes, bien qu’il existe une propriété Limiter à Liste pour un champ multivalués, DAO n’en tient pas compte et autorise l’insertion de données farfelues. Ainsi, bien que notre table tblStatut possède des idStatut de 1 à 4, le code suivant ne lève aucune erreur.
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
| '---------------------------------------------------------------
' Procedure : ExempleAjoutChampMutliple
' Author : Christophe WARIN - Tofalu - www.developpez.com
' Date : 11/04/2010
' Purpose : Exemple d'ajout dans un champ à valeurs multiples.
'---------------------------------------------------------------
'
Sub ExempleAjoutChampMutliple()
Dim oDb As DAO.Database
Dim oRst As DAO.Recordset
Dim oRst2 As DAO.Recordset2
Set oDb = CurrentDb
Set oRst = oDb.TableDefs("tblClient").OpenRecordset(dbOpenDynaset)
With oRst
.FindFirst ("idclient=2")
If Not .NoMatch Then
.Edit
Set oRst2 = .Fields("StatutClient").Value
With oRst2
.AddNew
'Insertion d'une donnée inexistante
.Fields("Value").Value = 499
.Update
End With
oRst2.Close: Set oRst2 = Nothing
.Update
End If
End With
oRst.Close: Set oRst = Nothing
End Sub |
Partager