C'est bien ce que je pensais.
Est-ce que tu as fait la modif du "If not IsNull(fsSrce) then..." ?
Sinon c'est normal qu'il y ait l'erreur.
Les champs Access n'acceptent généralement pas une longueur de chaîne nulle par défaut. Dans Access, on peut forcer la propriété "AllowZeroLength" des champs texte, ce qui résoud le problème mais n'est pas satisfaisant pour l'esprit.
La bonne solution est de sauter la mise à jour du champ destination si le champ source est nul. Comme par défaut le champ est nul (vide) à sa création, il le reste.
Si malgré le If... le problème persiste, c'est que la requête ne renvoie pas un champ null (comme le ferait une base Access) mais un texte de longueur 0 (comme un serveur SQL). Tu ne précises pas le type de serveur origine.
Dans ce cas, on peut tenter :
Ce coup-ci, on ne peut pas avoir l'erreur 3315 puisqu'on ne tente pas de mettre à jour les champs vides. Par contre, si le champ est Null, VB peut faire un caca sur l'expression fdSrce = "", car je ne sais plus s'il sait comparer un objet Null à une chaine vide. Dans le pire des cas, une solution plus longue mais plus sûre serait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 For Each fdSrce In rsSrce.Fields If Not IsNull(fdSrce) and not fdSrce = "" then rsDest.Fields(fdSrce.Name) = fdSrce End If Next
VBA, on t'aura ! Non mais alors !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 For Each fdSrce In rsSrce.Fields If IsNull(fdSrce) then 'On ne fait pas de mise à jour si le source est Null ElseIf fdSrce = "" then 'On ne fait pas de mise à jour si le source est une chaine vide Else rsDest.Fields(fdSrce.Name) = fdSrce End If Next
Partager