Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

#Erreur sur requête jointure

1 réponse
Avatar
Jérôme
Bonjour,
Je bloque depuis plusieurs jours sur un cas particulier voir un "bug"
d'access :
Sur une requ=EAte assez complexe (il faut le dire) : union, jointure,
regroupement, etc que nous apelerons "A"
j'ai =E0 l'affichage du r=E9sultat des colonnes marqu=E9s comme "#Erreur" !!=

Apr=E8s une recherche rapide, je remarque que ces colonnes sont le
r=E9sultat d'une jointure "LEFT" entre plusieurs requ=EAtes et qu'elles
devraient =EAtre affich=E9e comme "NULL" (ou m=EAme comme "0" puisque j'y ai=

mis la fonction :
"Nz(Monchamps,0)".
Or ce n'est pas le cas : le Nz ne fonctionne pas !
J'ai donc recherch=E9 plus loin et je me suis aper=E7u que dans la requete
apel=E9e que nous apelerons "B", mon champs est format=E9 avec la fonction
"FormatNumber" et Converti avec la fonction "Cdbl" soit :
"Cdbl(FonctionNumber(MonChampsApel=E9,2))" =3D=3D> ce qui me donne le
r=E9sultat attendu dans cette requ=EAte B.
Le fait d'oter ces deux fonctions (ou l'une ou l'autre : j'ai tout
test=E9) fait que les colonnes de ma requ=EAte principale A sont bien
affich=E9es avec la valeur 0 de mon Nz.
Evidemment j'ai besoin de convertir le champs de ma requ=EAte B sur 2
chiffres apr=E8s la virgule sinon je me retrouve avec des valeurs
ing=E9rables (0,000000000025..., E24,55 ..etc) alors que faire ?!

Quelqu'un a t'il d=E9j=E0 eu ce probleme ?
Merci de vos r=E9ponses
JDE

1 réponse

Avatar
3stone
Salut,

"Jérôme"
Sur une requête assez complexe (il faut le dire) : union, jointure,
regroupement, etc que nous apelerons "A"
j'ai à l'affichage du résultat des colonnes marqués comme "#Erreur" !!
Après une recherche rapide, je remarque que ces colonnes sont le
résultat d'une jointure "LEFT" entre plusieurs requêtes et qu'elles
devraient être affichée comme "NULL" (ou même comme "0" puisque j'y ai
mis la fonction :
"Nz(Monchamps,0)".
Or ce n'est pas le cas : le Nz ne fonctionne pas !
J'ai donc recherché plus loin et je me suis aperçu que dans la requete
apelée que nous apelerons "B", mon champs est formaté avec la fonction
"FormatNumber" et Converti avec la fonction "Cdbl" soit :
"Cdbl(FonctionNumber(MonChampsApelé,2))" ==> ce qui me donne le
résultat attendu dans cette requête B.
Le fait d'oter ces deux fonctions (ou l'une ou l'autre : j'ai tout
testé) fait que les colonnes de ma requête principale A sont bien
affichées avec la valeur 0 de mon Nz.
Evidemment j'ai besoin de convertir le champs de ma requête B sur 2
chiffres après la virgule sinon je me retrouve avec des valeurs
ingérables (0,000000000025..., E24,55 ..etc) alors que faire ?!
-----------

On ne sait ce que font FormatNumber() // FonctionNumber()
ni le reste, d'ailleurs...

Quelques rappels:
Il y a intérêt de fixer les valeurs dès le départ, éventuellement en
utilisant Nz() et de n'utiliser le FORMATage qu'en dernier lieu.
Format() rend une chaîne de caracères, pas un nombre.
Les nombres ayant besoin de garder leur précision sont mieux gérés
au format monétaire.
Une sous-requête apporte parfois la solution.
Le Nz() ne converti que les NULL, pas les chaînes vides...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)