expression trop complexe

Le
zzzz
Bonjour,
En utilisant IIf ou Switch dans ma requête, à partir d'un certain
moment ça ne marche plus "Expression trop complexe".
Je crois savoir que le select case n'a pas de limite comme IIf ou
Swith.
Mon problème c'est comment utiliser le select case dans ma requete.
Si je fais : Select champ1, Iff(champ1=320,
"DIV3",IIf(champ1=324,"FCIL", IIf(etc)))))))))) AS NewChamp FROM
MaTable; ça ne marche pas au bout de 15 IIf je crois.
Quelle est la syntaxe avec select case dans ma requête SQL ?
Je crois savoir que le select case ne marche pas dans une requete
SQL
Passer par VBA ? j'ai essayéJ'ai compris que ça ressemble à ça :
Function Fct (TypDip As String) As String
select Case TypDip
Case "320"
Fct = "DIV3"
Case "324"
Fct = "FCIL"
etc
End Function

Mais cette fonction je la mets où exactement ? et comment l'exécuter ?
et comment faire le lien avec ma requête ?
Merci d'avance
Eric
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
db
Le #23300021
Le 21/04/2011 12:29, zzzz a écrit :
Bonjour,
En utilisant IIf ou Switch dans ma requête, à partir d'un certain
moment ça ne marche plus "Expression trop complexe".
Je crois savoir que le select case n'a pas de limite comme IIf ou
Swith.
Mon problème c'est comment utiliser le select case dans ma requete.
Si je fais : Select champ1, Iff(champ120,
"DIV3",IIf(champ124,"FCIL", IIf(......etc)))))))))) AS NewChamp FROM
MaTable; ... ça ne marche pas au bout de 15 IIf je crois.
Quelle est la syntaxe avec select case dans ma requête SQL ?
Je crois savoir que le select case ne marche pas dans une requete
SQL...
Passer par VBA ? j'ai essayé...J'ai compris que ça ressemble à ça :
Function Fct (TypDip As String) As String
select Case TypDip
Case "320"
Fct = "DIV3"
Case "324"
Fct = "FCIL"
etc...
End Function




Bonjour,

A mon humble avis, ça vaudrait le coup de faire une table de
correspondance avec deux colonnes, et tous ces iif se résumeraient à une
simple jointure ...

db
3stone
Le #23300721
Salut,

zzzz wrote:
Bonjour,
En utilisant IIf ou Switch dans ma requête, à partir d'un certain
moment ça ne marche plus "Expression trop complexe".
Je crois savoir que le select case n'a pas de limite comme IIf ou
Swith.
Mon problème c'est comment utiliser le select case dans ma requete.
Si je fais : Select champ1, Iff(champ120,
"DIV3",IIf(champ124,"FCIL", IIf(......etc)))))))))) AS NewChamp FROM
MaTable; ... ça ne marche pas au bout de 15 IIf je crois.
Quelle est la syntaxe avec select case dans ma requête SQL ?
Je crois savoir que le select case ne marche pas dans une requete
SQL...
Passer par VBA ? j'ai essayé...J'ai compris que ça ressemble à ça :
Function Fct (TypDip As String) As String
select Case TypDip
Case "320"
Fct = "DIV3"
Case "324"
Fct = "FCIL"
etc...
End Function





Comme dit par db, il semble y avoir un problème avec la normalisation
de la base...


Mais cette fonction je la mets où exactement ? et comment l'exécuter ?
et comment faire le lien avec ma requête ?



Tu la place dans un module général pour qu'elle soit accessible de partout.
En reprenant ton exemple, dans la requête il suffit de créer un champ "calculé":

NewChamp: Fct(TypDip)


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
zzzz
Le #23300711
On 21 avr, 12:52, db
Le 21/04/2011 12:29, zzzz a écrit :



> Bonjour,
> En utilisant IIf ou Switch dans ma requête, à partir d'un certain
> moment ça ne marche plus "Expression trop complexe".
> Je crois savoir que le select case n'a pas de limite comme IIf ou
> Swith.
> Mon problème c'est comment utiliser le select case dans ma requete.
> Si je fais : Select champ1, Iff(champ120,
> "DIV3",IIf(champ124,"FCIL", IIf(......etc)))))))))) AS NewChamp FRO M
> MaTable; ... ça ne marche pas au bout de 15 IIf je crois.
> Quelle est la syntaxe avec select case dans ma requête SQL ?
> Je crois savoir que le select case ne marche pas dans une requete
> SQL...
> Passer par VBA ? j'ai essayé...J'ai compris que ça ressemble à ça :
> Function Fct (TypDip As String) As String
> select Case TypDip
> Case "320"
> Fct = "DIV3"
> Case "324"
> Fct = "FCIL"
> etc...
> End Function

Bonjour,

A mon humble avis, ça vaudrait le coup de faire une table de
correspondance avec deux colonnes, et tous ces iif se résumeraient à une
simple jointure ...

db



je n'ai pas compris... qui dit jointure dit 2 tables ?
s'il faut faire une jointure entre 2 fois la même table, je ne vois
pas du tout après ce qu'il faut faire...
merci
zzzz
Le #23300701
On 21 avr, 15:06, "3stone"
Comme dit par db, il semble y avoir un problème avec la normalisation
de la base...

> Mais cette fonction je la mets où exactement ? et comment l'exécute r ?
> et comment faire le lien avec ma requête ?

Tu la place dans un module général pour qu'elle soit accessible de pa rtout.
En reprenant ton exemple, dans la requête il suffit de créer un champ "calculé":

NewChamp: Fct(TypDip)




je sais utiliser + ou - vba avec les formulaires, mais avec les
requetes, je ne sais pas...
ok, je mets la fonction dans Option Compare Database de (Général)
après avoir créé un module (sinon je ne voyais pas où mettre ma
fonction).
Et après, NewChamp: Fct(TypDip) , je le mets où ? dans le code sql de
ma requête ? je ne sais pas commet faire pour créer un champ "calculé "
dans une requête...
zzzz
Le #23300901
On 21 avr, 12:52, db
Le 21/04/2011 12:29, zzzz a écrit :



> Bonjour,
> En utilisant IIf ou Switch dans ma requête, à partir d'un certain
> moment ça ne marche plus "Expression trop complexe".
> Je crois savoir que le select case n'a pas de limite comme IIf ou
> Swith.
> Mon problème c'est comment utiliser le select case dans ma requete.
> Si je fais : Select champ1, Iff(champ120,
> "DIV3",IIf(champ124,"FCIL", IIf(......etc)))))))))) AS NewChamp FRO M
> MaTable; ... ça ne marche pas au bout de 15 IIf je crois.
> Quelle est la syntaxe avec select case dans ma requête SQL ?
> Je crois savoir que le select case ne marche pas dans une requete
> SQL...
> Passer par VBA ? j'ai essayé...J'ai compris que ça ressemble à ça :
> Function Fct (TypDip As String) As String
> select Case TypDip
> Case "320"
> Fct = "DIV3"
> Case "324"
> Fct = "FCIL"
> etc...
> End Function

Bonjour,

A mon humble avis, ça vaudrait le coup de faire une table de
correspondance avec deux colonnes, et tous ces iif se résumeraient à une
simple jointure ...

db



ok, j'ai compris, j'ai créé une table avec 2 champs, dans le 1er
enreg, il y a 320 et DIV3, etc...
Merci
Gloops
Le #23324641
zzzz a écrit, le 21/04/2011 15:17 :
On 21 avr, 15:06, "3stone"
Comme dit par db, il semble y avoir un problème avec la normalisatio n
de la base...

Mais cette fonction je la mets où exactement ? et comment l'exécu ter ?
et comment faire le lien avec ma requête ?



Tu la place dans un module général pour qu'elle soit accessible de partout.
En reprenant ton exemple, dans la requête il suffit de créer un ch amp "calculé":

NewChamp: Fct(TypDip)




je sais utiliser + ou - vba avec les formulaires, mais avec les
requetes, je ne sais pas...
ok, je mets la fonction dans Option Compare Database de (Général)
après avoir créé un module (sinon je ne voyais pas où mettre ma
fonction).
Et après, NewChamp: Fct(TypDip) , je le mets où ? dans le code sql de
ma requête ? je ne sais pas commet faire pour créer un champ "calcu lé"
dans une requête...



Bonjour,

Apparemment, ton problème est que tu es en train de chercher le nom de
la fonction dans les noms de champs des tables, en haut de l'éditeur de
requêtes.

Ah ben non, c'est facile, mais pas à ce point-là.

Mettons que ta fonction s'appelle ConvertCode, et qu'elle reçoive la
valeur du champ tblCode dans la table tblTable.

Pour afficher la valeur d'origine du code et sa conversion :
SELECT tblCode, ConvertCode(tblCode) FROM tblTable

Je n'ai pas Access sous la main pour tester, mais il me semble que ça
doit fonctionner.

La fonction doit être déclarée Public, bien sûr.

Ah oui alors pour taper le code SQL, SELECT ..., le plus simple est
d'afficher, dans l'éditeur de requêtes, la requête en mode SQL. En
général c'est dans le coin en haut à gauche qu'on trouve, sur une b arre
d'outils, une liste déroulante en forme de bouton, qui propose les
différents modes d'affichage. En mode SQL on tape le code SQL. Si le
bouton n'est pas à la bonne place et que par voie de conséquence tu n e
vois pas ce que je veux dire, tu peux aussi passer par le menu Affichage.

Autrement en mode modification, avec une colonne par champ, on peut
aussi, dans les deux premières colonnes sélectionner le champ voulu
(dans mon exemple, tblCode), et dans la deuxième écrire, devant, le n om
de la fonction, suivi d'une parenthèse et précédé d'un signe =, en
n'oubliant pas de fermer la parenthèse à la fin.
=Convert(tblCode)

Peut-être qu'on te réclamera le nom de la table :
=Convert(tblTable.tblCode)
Publicité
Poster une réponse
Anonyme