Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2011, 12h40   #1
Invité de passage
 
Inscription : mars 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 26
Points : 3
Points : 3
Par défaut Type de données incompatible dans l'expression du critère.

Bonjour, voici ma requete générant le message d'erreur du titre (je l'execute sous Access 2007) :

Code :
1
2
3
4
5
6
SELECT Mandat.Code, 
 IIf(Mandat.TypeClAv="employe", 
  (SELECT (Employe.Nom + ' ' + Employe.Prenom) AS d FROM Employe, Contrat WHERE Employe.Code = Contrat.CodeEmp AND Contrat.Code = int(Mandat.ClAv))
, Mandat.ClAv) AS ClientAv
FROM Mandat;
// si ClAv correspond au numéro code d'un employé j'affiche son nom, sinon j'affiche directement ClAv
Le champs Code de la table Contrat est un numeroAuto, le champ ClAv de la table Mandat est un texte, c'est pourquoi je le cast en int.

Si je remplace int(Mandat.ClAv) par un chiffre, la requete fonctionne.
Si je remplace toute ma sous requete par Mandat.ClAv, ca fonctionne aussi (je n'ai pas d'erreur).

C'est comme si étant donné que je fais une sous requete, il fait déjà la sous requete avant de faire le test if TypeClAv="employe" et du coup forcément il essaye de transformer en int du vrai texte donc ca passe pas.

Comment faire pour afficher ce que je veux ?
marinaetsonchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 16h30   #2
Invité de passage
 
Inscription : mars 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 26
Points : 3
Points : 3
en remplacant int(Mandat.ClAv) par : val( iif(Isnull(Mandat.ClAv) , 0 ,Mandat.ClAv) )
ça marche, mais je trouve ça un peu compliqué !

si quelqu'un a mieux je prends !! (parce que a priori la "compilation" de la requête se fait bien dans l'ordre : je calcule la condition négative, je calcule la condition positive, puis j'applique le if, cf méthode polonaise inversée, donc ça coince sur le calcul de la condition positive ...)

ce que renvoie chaque fonction si j'ai bien compris:
contenu champ:-----val()------- int()------la fonction idéale
numerique--------le nombre---le nombre------le nombre
texte------------------0------#erreur-----vide (ou 0 au pire)
vide/null-----------#erreur----vide/null-----vide (ou 0 au pire)

ce qui me bloque c'est quand ça renvoie #erreur
marinaetsonchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h36.


 
 
 
 
Partenaires

Hébergement Web