OVH Cloud OVH Cloud

Copier un enregistrement ???

2 réponses
Avatar
gilles
Bonjour,

Voila mon probleme:
j'extrait un enregistrement d'une table au moyen d'une=20
requete.
Cette requette d'apres le filtre appliqu=E9 n'a plus qu'un=20
seul enregistrement.
Je voudrais ajouter un nouvel enregistrement dans la=20
table ayant les meme valeurs que l'enregistrement de la=20
requette.

Pourquoi? j'explique sinon vous allez dire que je suis=20
fou :)
l'enregistrement de la table a beaucoup de champs (et ca=20
risque d'=E9voluer par la suite)
Un champ de l'enregistrement doit etre modifier et un=20
deuxieme (une case a cocher)qui indique si=20
l'enregistrement est archiv=E9 ou pas.

d'ou mon id=E9e de copier l'enregistrement de la requette=20
dans la table, puis de modifier mes deux champs.

il est bien possible de faire une boucle avec tous les=20
noms de champs. je ferais ca au pire.

Mais je prefererais faire une boucle automatique.
Voici le code que j'essaye mais ca marche pas :(

Function reindexation(ClientAReindexer As String)
Dim rstHisto As Recordset, intI As Integer 'donn=E9es de=20
la tables THistoriqueEven
Dim fld As Field
Dim ChampsTHisto As CurrentData
Set qdfIndexation =3D CurrentDb.QueryDefs
("RAfficheHistoClientActuel")
qdfIndexation.Parameters("NomClient") =3D=20
ClientAReindexer 'intI est le RefSoci=E9t=E9 de=20
TSoci=E9t=E9 il donne la soci=E9t=E9 en fait
Set rstIndexation =3D qdfIndexation.OpenRecordset 'j'ai=20
isol=E9 tous les clients de la soci=E9t=E9 (sauf les supprim=E9s)
Set rstHisto =3D CurrentDb.OpenRecordset("THistoriqueEven")
With rstIndexation
rstHisto.AddNew

For Each fld In rstIndexation.Fields
Field!rstHisto!fld =3D fld
Next
rstHisto.Update
End With
Set rstIndexation =3D Nothing
Set qdfIndexation =3D Nothing
End Function

a priori c'est ca qui passe pas:
Field!rstHisto!fld =3D fld

il me dis "objet requis" avec Field!rstHisto!fld
je n'arrive pas a caler les champs de rstHisto et de=20
rstIndexation (la requete) en face.

merci de toute aide.

2 réponses

Avatar
Xavier HUE
Bonjour Gilles,

Je n'ai pas éplucher ton code, mais:

Field!rstHisto!fld = fld



Devrait plutôt être

rstHisto.Fields(fld.name) = fld.value

En effet, fld est le champ de ton recordset source, donc:
rstHisto.Fields(fld.name) => Champ dans ton recordset
cible
fld.value => Valeur du champ source

Si tu as un nombre de champ conséquent, et qu'en plus ça
peut évoluer, ta solution répond bien à ton problème.
Pense cependant à modifier les champs devant l'être avant
l'update.

Dans le cas contraire, tu fait exactement ce que ferait
une requête Ajout:
INSERT INTO TaTableSource
SELECT * FROM TaRequeteSource;


Cordialement.


Avatar
Merci Xavier
J'ai remplacé la ligne et ca marche.

gilles

-----Message d'origine-----
Bonjour Gilles,

Je n'ai pas éplucher ton code, mais:

Field!rstHisto!fld = fld



Devrait plutôt être

rstHisto.Fields(fld.name) = fld.value

En effet, fld est le champ de ton recordset source, donc:
rstHisto.Fields(fld.name) => Champ dans ton recordset
cible
fld.value => Valeur du champ source

Si tu as un nombre de champ conséquent, et qu'en plus ça
peut évoluer, ta solution répond bien à ton problème.
Pense cependant à modifier les champs devant l'être
avant

l'update.

Dans le cas contraire, tu fait exactement ce que ferait
une requête Ajout:
INSERT INTO TaTableSource
SELECT * FROM TaRequeteSource;


Cordialement.
.