Requête trop longue

koukos Messages postés 4 Date d'inscription mardi 28 avril 2009 Statut Membre Dernière intervention 2 septembre 2011 - 2 sept. 2011 à 21:59
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 - 6 sept. 2011 à 02:20
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 sept. 2011 à 07:26
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 sept. 2011 à 07:43
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 sept. 2011 à 08:00
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
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
6 sept. 2011 à 02:04
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
6 sept. 2011 à 02:20
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.
0
Rejoignez-nous