Bonjour,
Dans le cadre d'un projet je développe une procédure de recherche, mais j'ai des difficultés à la créer.
Je m'explique, je travail sur des codes qui permettent d'identifier un fournisseur. Il arrive que le code change et par conséquent on a une nouvelle codification. Il aurait était simple si j'avais pu remplacer l'ancien code par le nouveau dans les documents liés mais ce n'est pas le cas. Ainsi j'ai une table avec la structure suivante:
clé | Ancien COFOR | Nouveau COFOR | Date |
1 01007U 03 25973F W3 10/06/2006
2 38894C 34 94977K W8 21/04/2006
3 94977K W8 84648U 01 11/10/2006
4 84648U 01 16345R 01 05/02/2007
Ainsi le but de la procédure est:
Quand je tape le tape le COFOR 84648U 01, en résultat on obtiendrait l'historique suivant:
2 38894C 34 94977K W8 21/04/2006
3 94977K W8 84648U 01 11/10/2006
4 84648U 01 16345R 01 05/02/2007
Sous access, avec des requêtes, je n'ais pas réussi à obtenir ce résultat. Je pense que je dois passer par VBA. Mais je suis assez novice dans ce langage.
Car à mon avis je dois réaliser une boucle pour avoir ce résultat.
Je cependant réfléchie aux différentes requêtes, que je pense avoir besoin:
Requête1: SELECT * FROM T_TRANSCO WHERE ANCIEN_COFOR=[CODE ENTREZ AU CLAVIER] OR NOUVEAU_COFOR=[CODE ENTREZ AU CLAVIER];
--> affiche les transco en rapport avec le code donné.
Requête2: SELECT * FROM T_TRANSCO T1 WHERE NOT EXIXTS
(SELECT * FROM Requête1 R1 WHERE R1.Clé=T1.Clé);
--> donne les transco de la table sans ceux de la requête précédente.
Et ensuite j'aurai une boucle qui du style do while ... loop
Avec pour condition: est-ce qu'il y a encore dans la table des transco qui soit en rapport avec les transco sélectionnées précédemment par la requête1. La requête de vérification un peu comme ça:
Requête3: SELECT * FROM Requête2 R2 WHERE
(R2.ANCIEN_COFOR IN
(SELECT NOUVEAU_COFOR FROM Requête1)
OR
R2.NOUVEAU_COFOR IN
(SELECT ANCIEN_COFOR FROM Requête1)
);
Et enfin dans la boucle une requête qui me donne au fur et à mesure des tours de boucle l'historique d'un COFOR.
Requête4: SELECT * FROM T_TRANSCO T1 WHERE
(T1.ANCIEN_COFOR IN
(SELECT NOUVEAU_COFOR FROM Requête1)
OR
T1.NOUVEAU_COFOR IN
(SELECT ANCIEN_COFOR FROM Requête1)
);
Le déroulement de l'algorithme suivrait celui-ci:
R1;
R2;
DO WHILE (R3 IS NOT NULL){
R4;
R1=R4;
R2;
}
LOOP
Affiche le résultat de R1;
Voilà, j'ai enfin fini!! Tout ce que j'ai dis sont des suppositions. Le gros problème est le fait qu'il me manque la syntaxe en VBA et la manière de travailler sur les jeux d'enregistrements.
Merci par avance de votre intérêt à ce problème!
Partager