Copier un enregistrement ???
Le
gilles
Bonjour,
Voila mon probleme:
j'extrait un enregistrement d'une table au moyen d'une
requete.
Cette requette d'apres le filtre appliqué n'a plus qu'un
seul enregistrement.
Je voudrais ajouter un nouvel enregistrement dans la
table ayant les meme valeurs que l'enregistrement de la
requette.
Pourquoi? j'explique sinon vous allez dire que je suis
fou :)
l'enregistrement de la table a beaucoup de champs (et ca
risque d'évoluer par la suite)
Un champ de l'enregistrement doit etre modifier et un
deuxieme (une case a cocher)qui indique si
l'enregistrement est archivé ou pas.
d'ou mon idée de copier l'enregistrement de la requette
dans la table, puis de modifier mes deux champs.
il est bien possible de faire une boucle avec tous les
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ées de
la tables THistoriqueEven
Dim fld As Field
Dim ChampsTHisto As CurrentData
Set qdfIndexation = CurrentDb.QueryDefs
("RAfficheHistoClientActuel")
qdfIndexation.Parameters("NomClient") =
ClientAReindexer 'intI est le RefSociété de
TSociété il donne la société en fait
Set rstIndexation = qdfIndexation.OpenRecordset 'j'ai
isolé tous les clients de la société (sauf les supprimés)
Set rstHisto = CurrentDb.OpenRecordset("THistoriqueEven")
With rstIndexation
rstHisto.AddNew
For Each fld In rstIndexation.Fields
Field!rstHisto!fld = fld
Next
rstHisto.Update
End With
Set rstIndexation = Nothing
Set qdfIndexation = Nothing
End Function
a priori c'est ca qui passe pas:
Field!rstHisto!fld = fld
il me dis "objet requis" avec Field!rstHisto!fld
je n'arrive pas a caler les champs de rstHisto et de
rstIndexation (la requete) en face.
merci de toute aide.
Voila mon probleme:
j'extrait un enregistrement d'une table au moyen d'une
requete.
Cette requette d'apres le filtre appliqué n'a plus qu'un
seul enregistrement.
Je voudrais ajouter un nouvel enregistrement dans la
table ayant les meme valeurs que l'enregistrement de la
requette.
Pourquoi? j'explique sinon vous allez dire que je suis
fou :)
l'enregistrement de la table a beaucoup de champs (et ca
risque d'évoluer par la suite)
Un champ de l'enregistrement doit etre modifier et un
deuxieme (une case a cocher)qui indique si
l'enregistrement est archivé ou pas.
d'ou mon idée de copier l'enregistrement de la requette
dans la table, puis de modifier mes deux champs.
il est bien possible de faire une boucle avec tous les
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ées de
la tables THistoriqueEven
Dim fld As Field
Dim ChampsTHisto As CurrentData
Set qdfIndexation = CurrentDb.QueryDefs
("RAfficheHistoClientActuel")
qdfIndexation.Parameters("NomClient") =
ClientAReindexer 'intI est le RefSociété de
TSociété il donne la société en fait
Set rstIndexation = qdfIndexation.OpenRecordset 'j'ai
isolé tous les clients de la société (sauf les supprimés)
Set rstHisto = CurrentDb.OpenRecordset("THistoriqueEven")
With rstIndexation
rstHisto.AddNew
For Each fld In rstIndexation.Fields
Field!rstHisto!fld = fld
Next
rstHisto.Update
End With
Set rstIndexation = Nothing
Set qdfIndexation = Nothing
End Function
a priori c'est ca qui passe pas:
Field!rstHisto!fld = fld
il me dis "objet requis" avec Field!rstHisto!fld
je n'arrive pas a caler les champs de rstHisto et de
rstIndexation (la requete) en face.
merci de toute aide.

Poser une question


Je n'ai pas éplucher ton code, mais:
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.
J'ai remplacé la ligne et ca marche.
gilles