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

requête : data type mismatch...

9 réponses
Avatar
oualaléreur
Bonjour,

Voici ma requ=EAte :

SELECT Tbl_HV_Price.PricePP
FROM Tbl_HV_Price, Tbl_AdHock
WHERE (((Tbl_HV_Price.Volume)=3D"1,000,000") AND
((Tbl_HV_Price.ArticleNumber)=3DTbl_AdHock.ArticlNumber));

Quand je la lance, j'obtient le message "data type mismatch in citeria
expression".
Pourtant Volume est un Number et "1,000,000" fait parti des valeurs
qu'il peut prendre, et ArticleNumber et ArticlNumber sont aussi des
Numbers.
Dans le doute j'ai aussi reli=E9 les deux tables par Articl(e)Number,
mais rien.

Benoit

9 réponses

Avatar
Gilbert
Bonjour

Tel que tu l'utilises Volume est une chaine de caractères
Essaye avec
SELECT Tbl_HV_Price.PricePP
FROM Tbl_HV_Price, Tbl_AdHock
WHERE (((Tbl_HV_Price.Volume)00000) AND
((Tbl_HV_Price.ArticleNumber)=Tbl_AdHock.ArticlNumber));

--
Gilbert


"oualaléreur" a écrit dans le message de news:

Bonjour,

Voici ma requête :

SELECT Tbl_HV_Price.PricePP
FROM Tbl_HV_Price, Tbl_AdHock
WHERE (((Tbl_HV_Price.Volume)="1,000,000") AND
((Tbl_HV_Price.ArticleNumber)=Tbl_AdHock.ArticlNumber));

Quand je la lance, j'obtient le message "data type mismatch in citeria
expression".
Pourtant Volume est un Number et "1,000,000" fait parti des valeurs
qu'il peut prendre, et ArticleNumber et ArticlNumber sont aussi des
Numbers.
Dans le doute j'ai aussi relié les deux tables par Articl(e)Number,
mais rien.

Benoit
Avatar
Eric
Bonjour,

Pas de guillemets autour de 1,000,000 et je ne mettrai pas non plus de ,
comme séparateur de milliers
donc à tester :
WHERE (((Tbl_HV_Price.Volume)00000) ...

Bonjour,

Voici ma requête :

SELECT Tbl_HV_Price.PricePP
FROM Tbl_HV_Price, Tbl_AdHock
WHERE (((Tbl_HV_Price.Volume)="1,000,000") AND
((Tbl_HV_Price.ArticleNumber)=Tbl_AdHock.ArticlNumber));

Quand je la lance, j'obtient le message "data type mismatch in citeria
expression".
Pourtant Volume est un Number et "1,000,000" fait parti des valeurs
qu'il peut prendre, et ArticleNumber et ArticlNumber sont aussi des
Numbers.
Dans le doute j'ai aussi relié les deux tables par Articl(e)Number,
mais rien.

Benoit



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
oualaléreur
Merci merci,

en effet sans virgule ni guillemets ca marche. J'avais pas fait
attention aux guillemets en fait, et j'avais peur que la requête ne
retourne rien sans les virgules car dans Volume, y'en a.
En tout cas ca marche, merci bien.

Benoit
Avatar
oualaléreur
à partir de là, j'appelle la requête en VBA et teste la valeur
retournée ( il y en a une maximum) comme cela :

Dim PPP1M As DAO.Recordset
Dim PP1M As Variant
Set PPP1M = db.OpenRecordset("PPP1000")
PP1M = PPP1M![PricePP]
If (PP1M) Then...

J'obtient un "type mismatch" au niveau du If. Le If ne teste-t-il pas
simplement si PP1M est NULL ou non ?
PP1M est alors égal à quelque chose du type "0,18".
Avatar
oualaléreur
J'obliais, PPP1000 est le nom de la requête bien sûr, mais le
problème vient du If. Comment peut-on tester si cette valeur (un
Variant, un Recordset ou un Currency comme PricePP ?) est NULL ou non ?


a+

Benoit
Avatar
Eric
re,

Puisqu'il y a au plus 1 valeur:
Dim PPP1M As DAO.Recordset
Dim PP1M As Currency
Set PPP1M = db.OpenRecordset("PPP1000")
if not PPP1M.Bof then 'si y a 1 enregistrement ai moins
PP1M = PPP1M![PricePP]
' suite du traitement
End if
set PPP1M = nothing

J'obliais, PPP1000 est le nom de la requête bien sûr, mais le
problème vient du If. Comment peut-on tester si cette valeur (un
Variant, un Recordset ou un Currency comme PricePP ?) est NULL ou non ?


a+

Benoit



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Jessy Sempere [MVP]
Bonjour

Essais :

If isnull(PP1M)=true then
...
end if

PS :
Pour un recordset, c'est différent, tu pourra faire :

If not ppp1m.BOF then
{si contient des données}
End IF

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"oualaléreur" a écrit dans le message de
news:
à partir de là, j'appelle la requête en VBA et teste la valeur
retournée ( il y en a une maximum) comme cela :

Dim PPP1M As DAO.Recordset
Dim PP1M As Variant
Set PPP1M = db.OpenRecordset("PPP1000")
PP1M = PPP1M![PricePP]
If (PP1M) Then...

J'obtient un "type mismatch" au niveau du If. Le If ne teste-t-il pas
simplement si PP1M est NULL ou non ?
PP1M est alors égal à quelque chose du type "0,18".
Avatar
oualaléreur
Merci bien,

J'avais pas mis toute l'expression en effet, je pensais que le = true
pouvait être suggéré.
Donc If isnull(PP1M)=true then fonctionne.
Merci pour le tuyau pour les Recordset, ca m'a l'air bien pratique.
J'en déduis que le If peut très bien tester l'existance d'un Currency
sans avoir à ajouter quoi que ce soit. Dites-moi si je me trompe, mais
les valeurs de mes variables ont l'air bonnes.

merci encore et à +

Benoit
Avatar
Nobodyisperfect
Hello Oualaléreur,

Tu peux connaître la nature de ton champ avec la fonction : TYPENAME
(TypeName(Tonchamp) )

@+
Olivier