Menu

Erreur de type dans l'ex du critère [Résolu]

Messages postés
45
Date d'inscription
vendredi 5 octobre 2018
Dernière intervention
31 octobre 2018
- - Dernière réponse : Mr_Evil_Duck
Messages postés
45
Date d'inscription
vendredi 5 octobre 2018
Dernière intervention
31 octobre 2018
- 9 oct. 2018 à 13:52
Bonjour à tous !

Je suis nouveau sur le forum, et je ne connais pas encore bien les règles concernant la rédaction sur le forum, aussi je tâcherai de fournir le plus d'explication possible.

Contexte :
Je suis stagiaire dans une entreprise, et je suis mandaté pour recréer des graphiques provenant de Excel dans Access pour améliorer les performances.

J'ai donc maintenant une application Access qui importe en local toutes les tables utiles du serveur, maintenant il faut que je puisse faire des requêtes sur ces tables pour obtenir les données nécessaires au graphiques.

Problème :

J'ai déjà pus obtenir une parties des données que je souhaitais grâce a une requête de base utilisant les tables locales:



Ensuite je fait une autre requête sur cette requête pour faire un calcul qui permet d'obtenir si le pourcentage d'erreur de livraison entre la quantité commandée et celle obtenu ne dépasse pas la marge du fournisseur (colonne [Marge])
Voici la formule :

(je met des commentaires // pour rendre la compréhension plus facile, mais bien évidemment c'est en une seul ligne)

//enlève les espaces et le caractère '%' et convertit se nombre pour le tester avec
Check: VraiFaux(Val(Remplacer(Remplacer([Marge];"%";"");" ";""))>=

//la valeure obtenue en testant si le pourcentage entre la quantité commandée et celle obtenue
//-> outpout 1 ou 0

Val(VraiFaux([QTé commandée ST_Misc]>0;Val(Abs([rBasePO].[QTE_RECD]-[rBasePO].[QTé commandée
ST_Misc])/[QTé commandée ST_Misc]*100);0));1;0)



Voici le résultat de la requête :



Je me suis permis de masquer certaines données que je suppose être confidentielle ( et qui ne rentre pas dans le calcul )

Jusqu'à présent aucun problème n'est présent, c'est uniquement lorsque je souhaite appliquer un filtre en ne sélectionnant que les tuples ayant la colonne "[check]" à 1 que l'erreur
"type de donnée incompatible dans l'expression du critère" apparaît.

Cette erreur est censée indiquer que le type du filtre ne correspond pas au type de la colonne, hors j'ai déjà tenter de convertir les deux valeurs en string, en boolean, et en entier mais rien n'y fait, le problème ne viens visiblement pas de là.

De plus quand je lance la requête sans filtre et que j'utilise le filtre de colonne sur Access l'erreur réapparaît.




Voici le code SQL de la requête :

SELECT rBasePO.PO_NUMBER, rBasePO.SUPPLIER_NAME, rBasePO.PO_DATE, rBasePO.[QTé commandée ST_Misc], rBasePO.QTE_RECD, Abs([rBasePO].[QTE_RECD]-[rBasePO].[QTé commandée ST_Misc]) AS Difference, rBasePO.STATUS, Val(Replace(Replace([Marge],"%","")," ","")) AS Marge_Erreur, Val(IIf([QTé commandée ST_Misc]>0,Val([Difference]/[QTé commandée ST_Misc]*100),0)) AS Pourcent_Erreur, IIf(Val(Replace(Replace([Marge],"%","")," ",""))>=Val(IIf([QTé commandée ST_Misc]>0,Val(Abs([rBasePO].[QTE_RECD]-[rBasePO].[QTé commandée ST_Misc])/[QTé commandée ST_Misc]*100),0)),1,0) AS [Check]
FROM rQuantityOrRec AS rBasePO
WHERE (((IIf(Val(Replace(Replace([Marge],"%","")," ",""))>=Val(IIf([QTé commandée ST_Misc]>0,Val(Abs([rBasePO].[QTE_RECD]-[rBasePO].[QTé commandée ST_Misc])/[QTé commandée ST_Misc]*100),0)),1,0))=1));

Voila, j'espère que vous pourrai m'aider et merci d'avances pour votre aide !
Afficher la suite 

Votre réponse

1 réponse

Messages postés
7066
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 décembre 2018
0
Merci
bonjour, es-tu certain d'avoir montré le résultat de la requête que tu partages?
SELECT rBasePO.PO_NUMBER, rBasePO.SUPPLIER_NAME, rBasePO.PO_DATE, rBasePO.[QTé commandée ST_Misc], rBasePO.QTE_RECD, Abs([rBasePO].[QTE_RECD]-[rBasePO].[QTé commandée ST_Misc]) AS Difference, rBasePO.STATUS, Val(Replace(Replace([Marge],"%","")," ","")) AS Marge_Erreur, Val(IIf([QTé commandée ST_Misc]>0,Val([Difference]/[QTé commandée ST_Misc]*100),0)) AS Pourcent_Erreur, IIf(Val(Replace(Replace([Marge],"%","")," ",""))>=Val(IIf([QTé commandée ST_Misc]>0,Val(Abs([rBasePO].[QTE_RECD]-[rBasePO].[QTé commandée ST_Misc])/[QTé commandée ST_Misc]*100),0)),1,0) AS [Check] 
FROM rQuantityOrRec AS rBasePO 
WHERE (((IIf(Val(Replace(Replace([Marge],"%","")," ",""))>=Val(IIf([QTé commandée ST_Misc]>0,Val(Abs([rBasePO].[QTE_RECD]-[rBasePO].[QTé commandée ST_Misc])/[QTé commandée ST_Misc]*100),0)),1,0))=1));

peux-tu faire:
select distinct 
IIf(Val(Replace(Replace([Marge],"%","")," ",""))>=Val(IIf([QTé commandée ST_Misc]>0,Val(Abs([rBasePO].[QTE_RECD]-[rBasePO].[QTé commandée ST_Misc])/[QTé commandée ST_Misc]*100),0)),1,0) AS [Check] 
FROM rQuantityOrRec 
, et partager le résultat?
yg_be
Messages postés
7066
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 décembre 2018
> Mr_Evil_Duck
Messages postés
45
Date d'inscription
vendredi 5 octobre 2018
Dernière intervention
31 octobre 2018
-
anomalies dans les données: un enregistrement dont la valeur perturbe la requête.
j'ai déjà eu des cas où une requête semblait donner un résultat correct, jusqu'au moment de faire un filtre ou un tri. à ce moment-là, Access était obligé de calculer or recalculer l'ensemble du résultat, et cela donnait une erreur.
yg_be
Messages postés
7066
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 décembre 2018
> Mr_Evil_Duck
Messages postés
45
Date d'inscription
vendredi 5 octobre 2018
Dernière intervention
31 octobre 2018
-
il me semble que beaucoup de tes champs numériques sont en réalité des textes (exemples: [QTE_RECD] et [QTé commandée ST_Misc]).
tu compenses partiellement cela en mettant quelques val, mais il n'y en a, me semble-t'il, pas assez.
je suggère de corriger la situation le plus en amont possible.
si possible, vérifier que les champs des tables soient numériques, et corriger, au besoin, la définition des tables. si les tables ne peuvent pas être modifiées, utiliser val le plus en amont possible dans les requêtes.
vérifier aussi que les requêtes préservent les types des champs numériques.
Mr_Evil_Duck
Messages postés
45
Date d'inscription
vendredi 5 octobre 2018
Dernière intervention
31 octobre 2018
> yg_be
Messages postés
7066
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 décembre 2018
-
Merci, effectivement je sais que beaucoup de champs sont des champs texte alors qu'ils contiennent des valeurs numériques. Ce n'est pas une erreur, les données sont stockée de cette manières car la base de données de l'ERP a été (malheureusement) conçu comme ca . . .

Donc si je convertit toutes les valeurs texte en numérique dès ma première requête, cela corrigera (peut-être) le problème ? je vais essayer cette solution dès demain, je te teindrais au courant.

Merci infiniment pour ton aide !
yg_be
Messages postés
7066
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 décembre 2018
> Mr_Evil_Duck
Messages postés
45
Date d'inscription
vendredi 5 octobre 2018
Dernière intervention
31 octobre 2018
-
c'est en effet, dans le contexte de ce problème que je suggère de convertir en numériques.
tu pourras probablement vérifier que tout va bien quand tous les nombres seront alignés à droite.
Mr_Evil_Duck
Messages postés
45
Date d'inscription
vendredi 5 octobre 2018
Dernière intervention
31 octobre 2018
-
En fouillant dans les 65k enregistrement je suis tombé sur une valeur #Erreur dans mes données suite à un calcul sur des champs vide.
Ton intuitions sur les données erronées était bonne, en passant plus de 3h a essayer de vérifier le type des données en ajoutant des va, isnumeric etc, j'ai enfin pus faire mon tri sur ma colonne [CHECK].
Au passage, j'ai remarqué qu'un nombre sous la forme 3.4E-2 générait des erreurs lorsque je tentais de faire des calculs dessus.

Dans tous les cas, merci infiniment pour ton aide efficace !
Commenter la réponse de yg_be