Bonjour à tous,
Je vous expose mon problème. J'ai 2 BDD (une sous Access et l'autre sous MySQL). Dans ces tables je gère des mouvements de stocks et je souhaite créer une interface entre ces deux BDD. Pour cela j'utilise un programme en C, cependant je suis confronté à un petit problème. Voici mes deux BDD :
Access :
- Mouvement(N°, Etat, Rapprochement, Ref_Produit, Quantite, Type_Mouvement)
Rapprochement vaut 'N' si le tuple n'a pas encore été enregistré dans l'autre base de données, il vaut 'R' sinon.
- Interface(id_mvt)
id_mvt est l'id du dernier mouvement rapproché qui a été enregistré sur la BDD MySQL.
MySQL :
- Mouvement(id_mvt, Type_mvt, Ref_Produit)
L'id_mvt est auto incrémenté.
J'avais prévu que le script fonctionne de cette façon :
1/ On récupère les mouvements côté MySQL dont l'id est supérieur au plus grand id_mvt de la table Interface.
2/ On récupère les mouvements côté Access (Etat = 'Livré' et Rapprochement = 'N') qu'on enregistre dans la table Mouvement côté MySQL.
3/ On récupère l'id_mvt maximum de la table Mouvement côté MySQL pour l'enregistrer dans la table Interface.
C'est entre l'étape 1 et 2 que mon problème se pose. En effet, si un mouvement de stock est ajouté entre ma requête de récupération (1) et ma requête d'insertion (2), alors le tuple de ce mouvement ne sera jamais traité. La probabilité est assez faible mais existante, et comme le script sera exécuté très régulièrement, cela multiplie les risques que certains mouvements ne soient pas pris en compte.
De plus j'ai une contrainte : je ne peux pas modifier ou ajouter de table du côté MySQL. Sinon il m'aurait suffit de rajouter un champ Rapprochement du côté MySQL pour savoir si le tuple avait déjà été traité ou non.
Connaissez-vous une solution ou un moyen de contourner problème ?
Merci par avance !![]()
Partager