Synchroniser des données de plusieurs tables access entres-elles

cs_globule Messages postés 327 Date d'inscription mardi 8 octobre 2002 Statut Membre Dernière intervention 6 octobre 2010 - 17 oct. 2005 à 15:19
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 - 18 oct. 2005 à 12:55
Bonjour,

Je cherche a synchroniser des données de plusieurs tables access entres-elles
Les tables sont identiques : La table source se trouve dans un repertoire et la table destination dans un autre
Je cherche une routine qui lit tous les champs d'un table et qui les copies automatiquement dans l'autre. Je voudrais que cela soit automatique et que je n'ai pas besoin d'indiqué le nom des champs (car sinon, quand la table va evoluer je vais devoir revoir ces routines d'export). L'autre petit probleme c'est que cette routine ne doit pas exporter tous les enregistrements, mais seulement ceux repondant à un critere (par exemple Code=5)

3 réponses

acecel Messages postés 140 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 octobre 2006
18 oct. 2005 à 10:41
Dim xField as Field
Dim xRecordsetSource as recordset
Dim xRecordsetCible as recordset
Set xRecordset MaBaseSource.OpenRecordset("Select * from MaTable Where Code 5",dbOpenDynaset)
Set xRecordsetCible = MaBaseCible.OpenRecordset("Select * from MaTable",dbOpenDynaset)

While Not xRecordsetSource.EOF
xRecordsetCible.AddNew
For Each xField In MaBaseSource.Fields
xRecordsetCible(xField.Name) = xField.Value
Next xField
xRecordsetCible.Update
xRecordsetSource.MoveNext
Wend
0
acecel Messages postés 140 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 octobre 2006
18 oct. 2005 à 10:43
Remplace ca :
For Each xField In MaBaseSource.Fields
xRecordsetCible(xField.Name) = xField.Value
Next xField

Par :

For Each xField In xRecorsetSource .Fields
xRecordsetCible(xField.Name) = xField.Value
Next xField
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
18 oct. 2005 à 12:55
Salut, 2 ex, l'un en DAO, l'autre en ADO.
Je n'aime pas trop les on error resume next, il faudrait un traitement d'erreur un peu plus développé. Là j'ai supposé que la table cible n'existait pas et ça peut suffire mais il peut y en avoir d'autres, je te laisse le soin de gérer ça.

Private Sub CommandDAO_Click()
Dim dbSource As Database
Dim dbCible As Database


' Destruction de la TableCible si elle existe
Set dbCible = opendatabase("c:\temp\bdCible.mdb")
On Error Resume Next
dbCible.Execute "DROP TABLE TableCible"
On Error GoTo 0
dbCible.Close
Set dbCible = Nothing

' Création de la TableCible
Set dbSource = opendatabase("c:\temp\bdSource.mdb")
dbSource.Execute "SELECT * INTO TableCible IN 'c:\temp\bdCible.mdb' FROM TableSource WHERE Code = 5"
dbSource.Close
Set dbSource = Nothing

End Sub


Private Sub Command_ADO_Click()
Dim dbSource As New ADODB.Connection
Dim dbCible As New ADODB.Connection


' Destruction de la TableCible si elle existe
dbCible.Open "Provider=" & "Microsoft.Jet.OLEDB.4.0;Data Source=" & "c:\temp\bdCible.mdb;"
On Error Resume Next
dbCible.Execute "DROP TABLE TableCible"
On Error GoTo 0
dbCible.Close
Set dbCible = Nothing

' Création de la TableCible
dbSource.Open "Provider=" & "Microsoft.Jet.OLEDB.4.0;Data Source=" & "c:\temp\bdSource.mdb;"
dbSource.Execute "SELECT * INTO TableCible IN 'c:\temp\bdCible.mdb' FROM TableSource WHERE Code = 5"
dbSource.Close
Set dbSource = Nothing


End Sub

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
Rejoignez-nous