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

expression trop complexe

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

Mais cette fonction je la mets o=F9 exactement ? et comment l'ex=E9cuter ?
et comment faire le lien avec ma requ=EAte ?
Merci d'avance
Eric

6 réponses

Avatar
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 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
Avatar
3stone
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)
Avatar
zzzz
On 21 avr, 12:52, db wrote:
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
Avatar
zzzz
On 21 avr, 15:06, "3stone" wrote:

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...
Avatar
zzzz
On 21 avr, 12:52, db wrote:
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
Avatar
Gloops
zzzz a écrit, le 21/04/2011 15:17 :
On 21 avr, 15:06, "3stone" wrote:

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)