Fonction MOD(X,Y) dans une requête SQL

Résolu
cs_Titux91 Messages postés 7 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 4 août 2006 - 12 avril 2006 à 22:07
cs_Titux91 Messages postés 7 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 4 août 2006 - 13 avril 2006 à 09:39
Bonjour,

Je cherche la syntaxe à utiliser (ou une solution viable) pour réaliser l'opération suivante:
J'ai une table PRODUIT avec les attributs NumProduit et numTypeProduit
NumProduit est de la forme XXXXYZ ou XXXX est égal au chiffre de numtypeproduit, Y le numéro de ce produit et Z la période où est utilisé ce produit (pour un déploiement par période).
Je veux selectionner tous les produits de la période 2 pour les supprimer par la suite.

J'imaginais effectuer une action du genre:
reqsql = "SELECT * FROM PRODUIT WHERE (NumProduit-(100*TypeProduit)-(MOD(NumProduit-(100*TypeProduit),10)
*10 = " & ListboxPeriode.value
monrec.open reqsql, currentproject.connection
monrec.delete
monrec.close
mais access me mais cette erreur:
Erreur de syntaxe (opérateur absent) dans l'expression "MOD(50,10)"

Je ne vois vraiment pas comment faire!

Merci!
Titux

4 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
12 avril 2006 à 22:13
Salut,



pas de Mod(x,y) en VB6, c'est x Mod y

Manu
3
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
12 avril 2006 à 22:15
En plus, ta requête SQL doit être de la forme :



SELECT * FROM maTable Where monChamp=uneValeur



Et là, monChamp est remplacé par tout un bazar de code VB6, impossible à interprété par Access.


Manu
3
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
13 avril 2006 à 08:15
Un conseil créé un nouveau champs que tu appelera par exemple Modulo.
Et sur chaque enregistrement que tu créé tu enregistres la valeur :

(NumProduit-(100*TypeProduit)-(MOD(NumProduit-(100*TypeProduit),10)
*10

Il ne te reste plus qu'à faire

SELECT * FROM PRODUIT WHERE Modulo = " & ListboxPeriode.value

Bonne prog ++
3
cs_Titux91 Messages postés 7 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 4 août 2006
13 avril 2006 à 09:39
Merci à tous les deux!



En fait, il suffisait que je rajoute une clé étrangère vers la
table période. J'y avais pensé mais comme je ne suis pas le seul à
travailler sur cette base, je cherchais d'autres solutions pour
récupérer la période sans créer un nouvel attribut pour autant.



Finalement j'ai mitonné un ptit script SQL qui marche (c'est déjà ca!):



"SELECT PRODUIT.*

FROM PRODUIT

WHERE (((PRODUIT.NumProduit)=[PRODUIT].[NumTypeProduit]*100+([PRODUIT].[NumProduit]-

([PRODUIT].[NumTypeProduit]*100))-([PRODUIT].[NumProduit]-[PRODUIT].[NumTypeProduit]*100) Mod 10+ " &

listboxperiode.value & "));"



Si ca peut servir à qqn :)



++



Titux
3
Rejoignez-nous