cs_tchoukette
Messages postés32Date d'inscriptionmercredi 9 novembre 2005StatutMembreDernière intervention12 janvier 2006
-
24 nov. 2005 à 16:53
cs_tchoukette
Messages postés32Date d'inscriptionmercredi 9 novembre 2005StatutMembreDernière intervention12 janvier 2006
-
30 nov. 2005 à 10:33
VBA ou SQL ACCESS
J'ai 2 bases de données A et B avec la tables A1 et B1
De la base de données A provenant du siège, je dois rapatrier des données vers ma base de données B.
Dans la table A et B, il y a les champs Produits et Composants. Le Produit "X" se répète autant de fois qu'il y a de composants. Et donc il y a des doublons autant dans le champ Produits que le champ Componsant ( ou le composant se retrouve autant de fois qu'il est présent dans les différents produits.)
Par contre j'arrive à automatiser l'import via SQL, le problème, c'est que dans la table B, il y a deja des produits.
Et je voudra mettre une condition avant l'import pour dire que les composants du produits X de la table A ne doivent pas etre importés si les composants du produit X sont déjà présents dans B.
Produit : A, B, C, D
Composant: X,Y,Z,V
Composition des produits:
Table B
A;X
A;Y
A;V
B;Y
B;Z
B;V
C;X
C;Z
C;V
Table A
A;X
A;Z ==> différent de la table B
D;Z==>nouveau produit D non présent dans la table B
D;Y
Il faudrait donc importer juste le nouveau produit D, et le composant Z pour le produit"A".
J'avais pensé à passer par une table "tampon"
'Supprimer les doublons dans la BOM
DoCmd.RunSQL "SELECT DISTINCT * INTO [BOM Import] FROM BOM"
DoCmd.RunSQL "DELETE * FROM BOM"
DoCmd.RunSQL "INSERT INTO BOM SELECT * FROM [BOM Import]"
DoCmd.RunSQL "DELETE * FROM [BOM Import]"
Mais le résultat n'est pas concluant...
Vraiment je suis dans l'impasse... et g besoin d'aide!..
if RsAccess.EOF = False then ' Vérifie qu'il existe au moins un enregistrement
RsAccess.MoveFirst 'se place sur le premier enregistrement
Do 'ammorce une boucle "tant que..."
if RsAccess![BOM Import] = Recherche then
'Réalise une comparaison entre une variable et la valeur d'un recordset
GoTo SUITE 'comme il y a concordance, tu n'ajoute pas ton produit
else
'Il n'y a pas concordance, tu ajoute ton produit dans la table B
call Ajouter_Produit()
endif
SUITE:
RsAccess.MoveNext 'passer à l'enregistrement suivant
Loop While RsAccess.EOF = False
'la boucle se poursuie jusqu'au dernier enregistrement
'la fin d'un RecordSet est indiqué par EOF
'le début par BOF
cs_tchoukette
Messages postés32Date d'inscriptionmercredi 9 novembre 2005StatutMembreDernière intervention12 janvier 2006 25 nov. 2005 à 16:01
merci de sacrifier une partie de ton We pour moi!
Je suis au bord du suicide la ... fo que je finisse sa le plus tot possible... sinon il seré possible que je me fasse virer .... ( de mon stage... c un peu mieux que si je n'étais vraiment embauchée)
Juste encore une tite précision, les produits dans ma table ne se résume pas 4 ou 5 produits... mais plutot à des centaines....multipliés par le nombre de composants les constitutant...
M000004965
Messages postés147Date d'inscriptionmercredi 3 décembre 2003StatutMembreDernière intervention12 juin 2008 28 nov. 2005 à 11:55
D'autre part:
tu as diff approches possible pour ton problème.
1) toute base de données intelligemment construite doit avoir une clé primaire !
Soit un incrément auto soit un champ qui va contenir des données uniques telles que n° commande ou de facture.
Il te serai ainsi plus simple didentifier les nouveaux enregistrements.
2) Il te suffis dajouter une ligne de commande dans la procédure dajout dun nouvel enregistrement de la baseA qui renseignerait une table supplémentaire contenant les nouveaux enregistrements. Il ne te resterai plus quà vider cette table tous les jours en récupérant les enregistrement dans ta baseB.