1 membre
Connectés : ( personne )
- La Charte du Forum - Forum - Problèmes Access des débutants
Sujet n° 680 |
Recherche de valeur maximum et comparaison dans une table |
le 30/05/2013 : 12:31 par maxmusix
visiteur |
Bonjour, je cherche trouver un moyen de détecter des doublons dans une table entre 2 champs: Champ1 |Champ2 A | 1 ---> A | 1A | 1 ---> A | 3A | 2 ---> A | 2B | 1 ---> B | 1 A l'heure actuelle j'arrive a detecter les doublons en fontion de mon premier champs, le problème vient de ma modification: je dois trouver la plus grande valeur de mon champs 2 en fonction de mon premier champ pour pouvoir la stocker dans une variable et l'incrémenter par la suite. Or j'ai essayer plusieurs fonction(DLOOKUP,DMAX) mais aucun résultat. voici ma procédure de recherche de doublons si ça peut aider: Set rst = CurrentDb.OpenRecordset( _ "SELECT * FROM [SOLODATA]", _ dbOpenDynaset, dbInconsistent) champsActuel = rst("TAG3") champsActuel2 = rst("TAG2") With rst Do While Not .NoMatch Do While Not .NoMatch 'comparaison des tuples avec le tuple selectionné .FindNext "[Tag3]= '" & champsActuel & "' and [Tag2]= '" & champsActuel2 & "'" 'Cherche le premiers doublon dans la table If .NoMatch = False Then 'Si il y a un resultat alors on entre dans la procedure de modification ''''''''''''''''''''''''''''''''''''''''''''''' ICI ma procedure de modification''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Je cherche la plus grandes valeur de TAG3 pour TAG2= champsActuel2'''''''''''''''''''''''''''' '.FindFirst "MAX([Tag3]) and [Tag2]= '" & champsActuel2 & "'" 'test = DMax("Tag3", "SOLODATA", [Tag2] = " & champsActuel2 & ") .Edit valeurModifie = test + 1 'Le doublon est remplacé par une valeur alternative .Update ' valeurModifie = valeurModifie + 1 'Modification de la valeur alternative pour eviter les doublons End If Loop .FindFirst "[Tag3]= '" & champsActuel & "' and [Tag2]= '" & champsActuel2 & "'" 'Retour à l'enregistrement de depart .FindNext "([Tag3]<> '" & champsActuel & "' and [Tag2]= '" & champsActuel2 & "') or ([Tag3]= '" & champsActuel & "' and [Tag2]<> '" & champsActuel2 & "')" 'Passage à l'enregistrement suivant .Edit champsActuel = ![Tag3] 'Affectation de l'enregistrement à controler à une variable champsActuel2 = |
|
|
Réponse n° 11 -------- le 01/06/2013 : 21:54 par 3Stone
Administrateur
|
Bonjour, Citation :Cependant j'ai noté un problème, les enregistrement de ce champs doivent suivre un format spécifique (exemple: 0000) or pendant la modification les zeros devant le nombre disparaissent. Je ne sais pas si c'est la bonne méthode ou la plus simple mais j'effectue un "switch" pour determiner selon le format le nombre de 0 à remettre devant après mon traitement. J'ai un petit soucis avec ma fonction len() pour calculer le nombre de caractère. elle ne renvoie pas une valeur exact.
Je m'arrete à cela, sans tenir compte du code plus bas...
Il y a un mauvais choix dans ta table ! La règle veut que :
- soit un champ est texte lorsque l'on ne fait aucun "calcul" sur sa valeur (nom, localité, description, code postal, etc.)
- soit le champ est numérique, parce qu'il contient des valeurs numérique qui seront manipulées.
Dire que le format numérique doit avoir des zéros devant est une hérésie, et ne justifie absolument pas le choix du champ texte pour palier à cela
Il ne faudrait pas confondre format du champ (numérique) et son affichage (complété par des 0 non significatifs). Pour l'affichage, il suffit d'aller configurer le format de la zone de texte, pour que les zéros s'affichent, mais sans venir perturber le fait que ce champ soit bel et bien numérique.
Note, si tu souhaites qu'un champ numérique ait une longueur de 6 caractères (complété par des zéros), malgré qu'il ne contienne que 3 chiffres significatifs, il suffit de mettre comme format 000000 (six zéros).
Cordialement, Pierre(3stone) |
|
|
Réponse n° 14 -------- le 04/06/2013 : 12:06 par maxmusix
visiteur |
Bonjour, je viens de valider mon projet il fonctionne je vous remercie encore pour l'aide que vous m'avez apporté.
Je n'ai pas vu votre dernier message avant la validation, mais avec la fonction Format() j'aurais également due effectué un select case, pour moduler la chaine "0000" selon les cas.
merci encore bonne continuation,
Ce problème est résolue. |
|
|
sujet actif
sujet clos
Important!
Nouveau message -
Rectifier message
Clôturer sujet
Remonter
|