Requête trop longue

Signaler
Messages postés
4
Date d'inscription
mardi 28 avril 2009
Statut
Membre
Dernière intervention
2 septembre 2011
-
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
-
Salut à tous,
Je suis un débutant et je viens de créer une application de paie sous Access. Tout allait bien mais en insérant VraiFaux dans une requête, l'erreur 3360 s'affiche en me disant que la requête est trop longue. Voici ma formule :
C détermine le nombre de charges de l'employé
I représente le montant de l'impôt à payer sans charge
Je précise que j'ai pu détermine l'impôt sans charge aisément.
IUTS avec charges : IIf([c]=0,[i],IIf([c]=1,([i]*0.92),IIf([c]=2,([i]*0.9),IIf([c]=3,([i]*0.88),IIf([c]=4,([i]*0.86),IIf([c]=5,([i]*0.84),IIf([c]=6,([i]*0.82),IIf([c]>=7,([i]*0.8)))))))))
Supposons que l'impôt sans charge est de 7 500 franc et que l'employé a deux (2) enfants qui lui permettent de réduire l'impôt à payer, comment dois-je faire ?
Cordialement votre

5 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour,

En dehors du fait qu'il manque un argument "sinon" dans le dernier IIF de ton expression,
voilà comment je proàcèderais sous VB6 :
toto = Array(1, 0.92, 0.9, 0.88, 0.86, 0.84, 0.82, 0.8)


puis j'utiliserais ===>>>
IIf([C] > 8, [I] * 0.8, [I] * toto(7))

m'étonnerait que ceci ne soit pas transposable très facilement en VB.Net.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Mal réveillé, j'ai ecrit n'importe quoi !
1) pour toto :
toto = Array(1, 0.92, 0.9, 0.88, 0.86, 0.84, 0.82, 0.8, 0.8, 0.8, 0.8)

en précisant que tu devras ajouter autant d'items 0.8 à la fin de cet array qu'il y a de possibilités maximums pour [c] (pas grave si tu vas au delà)
et ensuite, lexpression est (bien sûr) :
titi = IIf([c] > 7, [i] * 0.8, [i] * toto([c]))



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Tu pourrais également utiliser d'à peu près la même manière la fonction CHOOSE (encore qu'elle est selon moi moins rapide que l'utilisation d'un array, ... et que si tu as un grand nombre d'articles dans ta base, la différence se fera sentir)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Salut;
j' ai testé ton expression et ça fonctionne partfaitement.
Et pour répondre à ta 2 ième question, j' ai procèdé ainsi:
1° J' ai crée une table EMPLOYERS que j' ai lié à la table IMPOTS.
la Clé IdEmp permet cette relation.

2° J' ai calculé le Montant de l' impot (champ généré MT )

3° J' ai déterminé le Montant à payer en se basant sur
-MT
et
-nEnf de la table EMPLOYERS

(champ généré MT_A_PAYER )

Remarque:
J' ai prix 250 comme Mt de la réduction comme exemple.

Et voici l' expression de la requete:

SELECT IMPOTS.IdEmp, IMPOTS.C, IMPOTS.I, IIf([c]=0,[i],IIf([c]=1,([i]*0.92),IIf([c]=2,([i]*0.9),IIf([c]=3,([i]*0.88),IIf([c]=4,([i]*0.86),IIf([c]=5,([i]*0.84),IIf([c]=6,([i]*0.82),IIf([c]>=7,([i]*0.8))))))))) AS MT, IIf([MT]=7500 And EMPLOYERS!nEnf=2,[MT]-250,[MT]) AS MT_A_PAYER
FROM IMPOTS INNER JOIN EMPLOYERS ON IMPOTS.IdEmp = EMPLOYERS.IdEmp;

Essaies ça et on en reparlera...

PS: désolé pour la mise en form
[] Ce qui va sans dire. va mieux en le disant.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Ah , j' ai oublié de te signaler que l' erreur dont tu parles,
ne concerne peut être pas juste ce que tu nous a envoyé,
mais sûrement ta requête en sa totalité...

[] Ce qui va sans dire. va mieux en le disant.