Access et les champs vides
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 :
Code:
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 |
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:
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 |
VBA, on t'aura ! Non mais alors !