Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Equivalent de requête de MAJ d'une table en VBA

2 réponses
Avatar
Antoine Labusquière
Bonjour,

Je souhaite mettre à jour tous les enregistrements d'une table à partir
d'une autre table (en fait, la même mais dupliquée).

J'ai écris ça, mais ça ne marche pas: Erreur sur le type de déclaration sur
monchamp.

Dim source As Recordset, destination As Recordset
Dim monchamp As Field


'Requêtes de mise à jour
Set source = CurrentDb.OpenRecordset("SELECT W_CONTACTS.* FROM
W_CONTACTS INNER JOIN W_CONTACTS ON T_CONTACTS.Contact_ID =
W_CONTACTS.Contact_ID;")
Do While Not source.EOF
Set destination = CurrentDb.OpenRecordset("SELECT T_CONTACTS.* FROM
T_CONTACTS WHERE CONTACT_ID = " & source!Contact_ID & "")
If Not destination.EOF Then
destination.Edit
For Each monchamp In source.Fields
destination!(monchamp.Value) = source!(monchamp.Value)
Next monchamp
destination.Update
Set destination = Nothing
destination.Close
End If
source.MoveNext
Loop
Set source = Nothing
source.Close


Z'auriez une idée ?
Je ne peux pas passer par une requête SQL, vu que les noms et le nombre de
champs peut varier d'une semaine à l'autre...

Merci d'avance

2 réponses

Avatar
Antoine Labusquière
Cherchez plus, j'ai trouvé...

Dim source As Recordset, destination As Recordset
Dim monchamp As Field


'Requêtes de mise à jour
Set source = CurrentDb.OpenRecordset("SELECT W_CONTACTS.* FROM
T_CONTACTS INNER JOIN W_CONTACTS ON T_CONTACTS.Contact_ID =
W_CONTACTS.Contact_ID WHERE T_CONTACTS.Verrouillé=True;")
Do While Not source.EOF
Set destination = CurrentDb.OpenRecordset("SELECT T_CONTACTS.* FROM
T_CONTACTS WHERE CONTACT_ID = " & source!Contact_ID & "")
If Not destination.EOF Then
destination.Edit
For Each monchamp In source.Fields
If monchamp.Name <> "CONTACT_ID" Then
destination.Fields(monchamp.Name).Value = source.Fields(monchamp.Name).Value
Next monchamp
destination.Update
destination.Close
Set destination = Nothing
End If
source.MoveNext
Loop
source.Close
Set source = Nothing


"Antoine Labusquière" a écrit dans le
message de news: 45e58891$0$6064$
Bonjour,

Je souhaite mettre à jour tous les enregistrements d'une table à partir
d'une autre table (en fait, la même mais dupliquée).

J'ai écris ça, mais ça ne marche pas: Erreur sur le type de déclaration
sur monchamp.

Dim source As Recordset, destination As Recordset
Dim monchamp As Field


'Requêtes de mise à jour
Set source = CurrentDb.OpenRecordset("SELECT W_CONTACTS.* FROM
W_CONTACTS INNER JOIN W_CONTACTS ON T_CONTACTS.Contact_ID =
W_CONTACTS.Contact_ID;")
Do While Not source.EOF
Set destination = CurrentDb.OpenRecordset("SELECT T_CONTACTS.* FROM
T_CONTACTS WHERE CONTACT_ID = " & source!Contact_ID & "")
If Not destination.EOF Then
destination.Edit
For Each monchamp In source.Fields
destination!(monchamp.Value) = source!(monchamp.Value)
Next monchamp
destination.Update
Set destination = Nothing
destination.Close
End If
source.MoveNext
Loop
Set source = Nothing
source.Close


Z'auriez une idée ?
Je ne peux pas passer par une requête SQL, vu que les noms et le nombre de
champs peut varier d'une semaine à l'autre...

Merci d'avance




Avatar
Jessy Sempere
Bonjour

Je n'ai pas tout suivi... mais déjà tu peux remplacer ta ligne :
destination!(monchamp.Value) = source!(monchamp.Value)
par :
destination.fields(monchamp.name) = source.fields.(monchamp.name)

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



Bonjour,

Je souhaite mettre à jour tous les enregistrements d'une table à partir
d'une autre table (en fait, la même mais dupliquée).

J'ai écris ça, mais ça ne marche pas: Erreur sur le type de déclaration sur
monchamp.

Dim source As Recordset, destination As Recordset
Dim monchamp As Field


'Requêtes de mise à jour
Set source = CurrentDb.OpenRecordset("SELECT W_CONTACTS.* FROM
W_CONTACTS INNER JOIN W_CONTACTS ON T_CONTACTS.Contact_ID =
W_CONTACTS.Contact_ID;")
Do While Not source.EOF
Set destination = CurrentDb.OpenRecordset("SELECT T_CONTACTS.* FROM
T_CONTACTS WHERE CONTACT_ID = " & source!Contact_ID & "")
If Not destination.EOF Then
destination.Edit
For Each monchamp In source.Fields
destination!(monchamp.Value) = source!(monchamp.Value)
Next monchamp
destination.Update
Set destination = Nothing
destination.Close
End If
source.MoveNext
Loop
Set source = Nothing
source.Close


Z'auriez une idée ?
Je ne peux pas passer par une requête SQL, vu que les noms et le nombre de
champs peut varier d'une semaine à l'autre...

Merci d'avance