Erreur 94! Problème de Null non autorisé avec BDD Access

cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005 - 22 juil. 2004 à 19:42
cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005 - 27 juil. 2004 à 12:43
Bonjour à tous,

J'ai vraiment tout essayé mais là je ne vois vraiment plus quoi faire!

J'ai une table TRAITEMENT que j'ai créé avec Access:
TRAIT_NO (Clé primaire) NuméroAuto
TRAIT_MALAD_NO Numérique
TRAIT_NOM Texte
TRAIT_DESCRIPTION Mémo

La procédure suivante me permet de trouver (et d'afficher dans efDescription) la description correspondant au nom du traitement que l'on sélectionne dans une listbox:

Public Sub SelectionDescripPourTrait()
With frmMaladie
'Mise à blanc de efDescription
.efDescription.Text = ""
'Initialisation du recordset SelectionDescripPourTrait
Set rsSelectionDescripPourTrait = New ADODB.Recordset
'Ouverture du recordset SelectionDescripPourTrait rsSelectionDescripPourTrait.Open "select * from TRAITEMENT where TRAIT_NO " & .efTraitNo & " and TRAIT_MALAD_NO " & .efMaladNo, frmPrincipale.bdd
'Remplissage de efDescription s'il y a une description pour le traitement sélectionné
If Not IsNull(rsSelectionDescripPourTrait!TRAIT_DESCRIPTION) Then
.efDescription.Text = rsSelectionDescripPourTrait!TRAIT_DESCRIPTION
End If
'Remplissage avec une chaîne vide de efDescription s'il n'y a pas de description pour le traitement sélectionné
If IsNull(rsSelectionDescripPourTrait!TRAIT_DESCRIPTION) Then
.efDescription.Text = ""
End If
End With
End Sub

Voilà, je sais que l'intro est longue mais elle n'est pas compliquée à comprendre.

Il faut savoir qu'au départ, j'avais une erreur 94 (Null non autorisé) quand le champ "TRAIT_DESCRIPTION" était Null alors que pour ce champ j'ai mis "Null interdit : Non". J'ai essayé de supprimer ma table "TRAITEMENT" et de la refaire mais toujours le même problème.

Du coup, j'ai du mettre en place le code à la fin avec les "IsNull" pour que si le champ "TRAIT_DESCRIPTION" est Null, il devienne une chaîne vide (j'ai mis "Chaîne vide autorisée : Oui" pour ce champ) et pour contourner ainsi l'erreur 94.

Mais ça ne marche toujours pas. C'est-à-dire que maintenant, quand "rsSelectionDescripPourTrait!TRAIT_DESCRIPTION" est Null, il n'y a pas de problème, mais même quand il ne l'est pas, il le devient une fois passée cette ligne de code:
"If Not IsNull(rsSelectionDescripPourTrait!TRAIT_DESCRIPTION) Then"

Je ne comprends pas qu'est ce qui fait qu'il devient Null!

Merci pour votre aide.

10 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
22 juil. 2004 à 20:32
Salut,
D'abord, le "Null interdit : non" ds la table veut simplement dire qu'un nouvel enreg dans la table est accepté même si un champ n'est pas renseigné. Si tu mets oui, tu auras une erreur disant que tu dois indiquer une valeur.

Ta solution est bonne sauf qu'il vaudrait mieux coder :

If Not IsNull(rsSelectionDescripPourTrait!TRAIT_DESCRIPTION) Then
.efDescription.Text = rsSelectionDescripPourTrait!TRAIT_DESCRIPTION
else
.efDescription.Text = ""
endif

J'utilise ça souvent, si ça marche pas chez toi, je ne comprend pas.

Cordialement

CanisLupus
0
cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005
22 juil. 2004 à 21:46
Salut,

Tout d'abord merci de t'être intéressé à mon cas.

Bon, alors en changeant mon code c'est toujours pareil.
Il y a même du nouveau, alors que je n'ai rien changé à part mettre le "else" comme tu me conseillais, quand j'éxécute pas à pas mon code et que j'arrive à la ligne de code suivante:

If Not IsNull(rsSelectionDescripPourTrait!TRAIT_DESCRIPTION) Then

En prenant un enregistrement dans lequel TRAIT_DESCRIPTION n'est pas null:

- Si je pointe la souris sur "rsSelectionDescripPourTrait!TRAIT_DESCRIPTION", je vois qu'il y a une valeur, mais si j'enlève le pointeur de la souris et je le remet sur "rsSelectionDescripPourTrait!TRAIT_DESCRIPTION", le champ devient alors Null. Dans ces conditions, une fois passée cette ligne de code, le code passe par:
else
.efDescription.Text = ""

- Si je ne pointe pas la souris sur "rsSelectionDescripPourTrait!TRAIT_DESCRIPTION". Dans ces conditions, une fois passée cette ligne de code, le code passe par:
.efDescription.Text = rsSelectionDescripPourTrait!TRAIT_DESCRIPTION
Mais au niveau de cette ligne, le champ prend une valeur Null et j'ai une erreur 94

C'est totalement incompréhensible!

Si tu as une idée?
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
22 juil. 2004 à 22:05
Je ne comprend pas non plus,
En relisant ton exemple, j'en viens à me demander si ça vient pas du fait que ton champ TRAIT_DESCRIPTION est en Mémo mais je n'affirme rien car je ne me sers que très rarement de ce type de champ.

Cordialement

CanisLupus
0
cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005
22 juil. 2004 à 23:15
Je ne sais pas, je ne sais plus, je suis perdu...
En tout cas, je te remercie pour ton aide.
Je vais voir si ça fonctionne avec un champ texte bien que j'ai besoin d'un champ mémo.
En effet, le champ texte accepte une taille max de 256 caractères.
Bref, si je trouve la solution, je te tiendrai au courant.

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005
22 juil. 2004 à 23:35
Eh bien, tu avais raison, c'est bien dû au fait que mon champ soit en Mémo.
J'ai essayé avec un champ texte et ça fonctionne.
Il faudra donc m'expliquer l'utilité du Mémo???
Le problème c'est qu'il me faut un champ qui puisse contenir un nombre important de caractère (Mémo sert, à la base, à ça).
Donc je n'ai pas d'autre choix que de diviser ma description de traitement en plusieurs champs texte, mais ça risque de ne pas être terrible!
As-tu une idée?

Merci d'avance

A+
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
23 juil. 2004 à 11:34
Dernière idée, que je viens de tester. Puisque le memo c du texte non structuré :

If len(rsSelectionDescripPourTrait!TRAIT_DESCRIPTION)>0 Then
.efDescription.Text = rsSelectionDescripPourTrait!TRAIT_DESCRIPTION
else
.efDescription.Text = ""
endif

Chez moi ça marche

Cordialement

CanisLupus
0
cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005
23 juil. 2004 à 12:47
J'ai testé ton idée mais j'ai toujours la même erreur.

Est-ce que tu crois que de mettre un contrôle RichTextBox à la place d'un textBox peut changer qqchose (je ne sais pas vraiment ce qu'est un RichTextBox mais je vois qu'on en parle pas mal sur le forum) ?

A+
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
23 juil. 2004 à 14:04
Essaie toujours, de toutes façons, je ne suis pas sûr qu'un textbox puisse contenir autant qu'un champ mémo.

Un textbox, c un controle qui ne peut contenir que du texte brut sans mise en forme.
Un richtextbox peut recevoir du texte au format RTF si tu vois ce que c'est.
Donc, si ton champ mémo contient du rtf ......

Dans les tests que g fait, je n'avais pas + de 255 cars et mon mémo ne contenait que du texte brut.

Ds le forum, g vu d'autres qui avaient le même prob que toi mais g pas vu de solution vraiment cool.

Il faudra que je m'y mette un jour.

Cordialement

CanisLupus
0
cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005
23 juil. 2004 à 14:37
J'espère pouvoir trouver une solution rapidement, mais quand les erreurs sont incohérentes comme celle-là, ça fout les boules!!!

En tout cas, je te remercie vraiment beaucoup pour ton aide.

A+
0
cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005
27 juil. 2004 à 12:43
Finalement j'ai réussi à contourner le problème.

En effet, lors de l'ajout d'un nom de traitement (TRAIT_NOM) dans la bdd, je donne directement comme valeur "chaîne vide" (ou "" si vous préférez) à la description qui lui correspond (TRAIT_DESCRIPTION). Pour cela, il ne faut pas oublier de mettre "Chaîne vide autorisée : Oui" dans Access pour le champ "TRAIT_DESCRIPTION".

Ainsi, la partie avec les IsNull est désormais inutile et la seule ligne de code qui reste est celle-ci:
.efDescription.Text = rsSelectionDescripPourTrait!TRAIT_DESCRIPTION

En effet, "TRAIT_DESCRIPTION" ne peut pas avoir de valeur Null, et si la valeur est une chaîne vide, .efDescription.Text = ""
0
Rejoignez-nous