OVH Cloud OVH Cloud

Requete mise a jour

3 réponses
Avatar
Manu
Bonjour a tous,

Voici ma problematique: Importer des donnes en provenance
d'un fichier Excel dans une table,
dans une autre table enregistrer le nom de l'utilisateur
et la date de l'operation,
puis creer un lien entre ces deux tables pour savoir qui a
ajoute quoi et quand.

Ma table Donnee contient un Champ IdOperation qui doit me
permettre de faire le lien
avec la table Operations mais rien a faire. Dans la table
Operations ce Champ est defini
comme cle primaire et est en numerotation automatique.

J'essaye avec la requete suivante:

UPDATE Donnees, Operations SET Donnees.IdOperation = DMax
([Operations!IdOperation],"Operations")
WHERE (((Donnees.IdOperation) Is Null));

Cela me renvoie systematiquement zero alors que je
voudrais recuperer la cle primaire.

Esperant avoir ete clair, je vous remercie pour vos
suggestions.

Manu/

Access 2000 / Win Nt/2000

3 réponses

Avatar
LE CARRE Yannick
Salut Manu,

un champ (clé primaire + numéro auto) ne peut être modifié !

Il faut que tu enlèves ces options de numérotation automatique et que tu
gère l'intégrité référentiel toi même.
Ou bien tu insères en même temps 2 enregistrements : 1 dans chaque table,
ils auront les mêmes identifiants s'ils sont en numéro auto.

Yannick
Manu a écrit dans le message :
00f501c3919f$6187c060$
Bonjour a tous,

Voici ma problematique: Importer des donnes en provenance
d'un fichier Excel dans une table,
dans une autre table enregistrer le nom de l'utilisateur
et la date de l'operation,
puis creer un lien entre ces deux tables pour savoir qui a
ajoute quoi et quand.

Ma table Donnee contient un Champ IdOperation qui doit me
permettre de faire le lien
avec la table Operations mais rien a faire. Dans la table
Operations ce Champ est defini
comme cle primaire et est en numerotation automatique.

J'essaye avec la requete suivante:

UPDATE Donnees, Operations SET Donnees.IdOperation = DMax
([Operations!IdOperation],"Operations")
WHERE (((Donnees.IdOperation) Is Null));

Cela me renvoie systematiquement zero alors que je
voudrais recuperer la cle primaire.

Esperant avoir ete clair, je vous remercie pour vos
suggestions.

Manu/

Access 2000 / Win Nt/2000



Avatar
Pierre Jagut
Bonjour,

Si j'ai bien compris, tu ajoutes un enregistrement dans la table
"Operations", et plusieurs dans la table "Donnees". Le champ IdOperation de
la table "Donnees" est vide au moment de l'ajout, et tu veux le remplacer
par le IdOperation généré lors de la création de l'enregistrement dans la
table "Operation" (celui-ci étant NuméroAuto et Clef unique).

Je ferais cela comme suit :
- L'enregistrement ajouté dans la table "Operations" est réalisé en VBA, de
manière à récupérer le IdOperation généré.
- La requête SQL de modification est générée par une chaîne de caractère en
VBA en utilisant ce IdOperation.

En gros :

Dim rsOperations as Recordset
Dim lIdOperation as long
Set rsOperations = CurrentDb.OpenRecordset("SELECT * FROM Operations",
dbOpenDynaset)

rsOperations.AddNew
rsOperations!DateOperation = Date
rsOperations!NomOperateur = 'mettre ici le nom de l'opérateur
'.... renseigner tous les champs liés à l'opération
rsOperations.Update
rsOperations.MoveLast
lIdOperation = rsOperations!IdOperation

rsOperations.Close

' Importer ici les données dans la table Donnees

DoCmd.RunSQL "UPDATE Donnees, Operations SET Donnees.IdOperation = " &
lIdOperation &_
"WHERE (((Donnees.IdOperation) Is Null))"

Voilà, je pense que cela devrait fonctionner (probablement des erreurs de
frappes).
Dis-moi ce que cela donne.

Remarque : ici, il n'y a pas de traitement des erreurs de contrainte et
d'import. Si les utilisateurs ne font pas de contrôle des données avant de
les importer, il serait peut-être utile d'importer avant dans une table
temporaire et d'effectuer un état statististique du fichier avant de
l'importer définitivement dans la table "Donnees". Ce qui veux dire que
l'ajout se fait en deux temps (import pour contrôles, puis ajout validé). Tu
peux ne créer l'enregistrement dans "Operations" qu'après l'ajout validé.
Mais je te conseille quand même de le faire avant, et de conserver un flag
"Ajouté" de manière à
- rappeler à l'utilisateur qui sort du formulaire sans ajouter qu'il a
oublié cette étape
- compter les "imports sans ajout" par utilisateur pour repérer les
problèmes de saisie ou les besoins de formation

Pierre.


"Manu" a écrit dans le message de
news:00f501c3919f$6187c060$
Bonjour a tous,

Voici ma problematique: Importer des donnes en provenance
d'un fichier Excel dans une table,
dans une autre table enregistrer le nom de l'utilisateur
et la date de l'operation,
puis creer un lien entre ces deux tables pour savoir qui a
ajoute quoi et quand.

Ma table Donnee contient un Champ IdOperation qui doit me
permettre de faire le lien
avec la table Operations mais rien a faire. Dans la table
Operations ce Champ est defini
comme cle primaire et est en numerotation automatique.

J'essaye avec la requete suivante:

UPDATE Donnees, Operations SET Donnees.IdOperation = DMax
([Operations!IdOperation],"Operations")
WHERE (((Donnees.IdOperation) Is Null));

Cela me renvoie systematiquement zero alors que je
voudrais recuperer la cle primaire.

Esperant avoir ete clair, je vous remercie pour vos
suggestions.

Manu/

Access 2000 / Win Nt/2000



Avatar
Manu
Bonjour Pierre,

Si j'ai bien compris, tu ajoutes un enregistrement dans
la table

"Operations", et plusieurs dans la table "Donnees".


C'est exactement ca sauf que je procede dans l'ordre
inverse pour ne pas
enregistrer une operation qui aurait echoue.

Le champ IdOperation de
la table "Donnees" est vide au moment de l'ajout, et tu
veux le remplacer

par le IdOperation généré lors de la création de
l'enregistrement dans la

table "Operation" (celui-ci étant NuméroAuto et Clef
unique).


Tout a fait.


Je ferais cela comme suit :
- L'enregistrement ajouté dans la table "Operations" est
réalisé en VBA, de

manière à récupérer le IdOperation généré.
- La requête SQL de modification est générée par une
chaîne de caractère en

VBA en utilisant ce IdOperation.

En gros :

Dim rsOperations as Recordset
Dim lIdOperation as long
Set rsOperations = CurrentDb.OpenRecordset("SELECT * FROM
Operations",

dbOpenDynaset)

rsOperations.AddNew
rsOperations!DateOperation = Date
rsOperations!NomOperateur = 'mettre ici le nom de
l'opérateur

'.... renseigner tous les champs liés à l'opération
rsOperations.Update
rsOperations.MoveLast
lIdOperation = rsOperations!IdOperation

rsOperations.Close

' Importer ici les données dans la table Donnees

DoCmd.RunSQL "UPDATE Donnees, Operations SET
Donnees.IdOperation = " &

lIdOperation &_
"WHERE (((Donnees.IdOperation) Is Null))"

Voilà, je pense que cela devrait fonctionner
(probablement des erreurs de

frappes).
Dis-moi ce que cela donne.


J'essaye et je te tiens au courant.
Merci de ton aide.
Manu/