OVH Cloud OVH Cloud

doublons

2 réponses
Avatar
GL
Bonjour,
Je veux alimenter régulièrement une table à partir d'une requête ajout pour
faire ensuite un graphique chronologique.
Je voudrais empêcher l'importation d'enregistrements déjà existants dans la
table.
Bien sûr, on peut extraire les doublons à partir d'une requête recherche des
doublons et les supprimer, mais je pense qu'il doit y avoir plus "propre".
exemple de table :
date(), champ1, champ2
et je ne veux pas un doublon si je fais 2 fois ma requête ajout le même
jour.
Merci pour votre collaboration.

2 réponses

Avatar
Rv
Bonjour,

A partir de l'exemple donné, deux possibilités parmi bien d'autres:
- Créer un index unique sur la combinaison des champs date(),
champ1, champ2 (attention au nom des champs qui ne doivent pas correspondre
à des mots clés) . Access empèchera la création des doublons car la
propriété unique sera à vrai.
Avantages:
. Access fait tout le boulot.
. C'est trés rapide à mettre en place.

Inconvénient:
. On ne sait pas forcément pourquoi les enregistrements ne sont
pas insérés. Le message d'access parle de violation de clé et indique le
nombre d'enregistrements qui ne passe pas.
. L'index fait grossir la base et ralentit les insertions et
suppressions dans cette table tandis qu'il va accélérer les recherches
basées sur ces critères. Tout cela, un peu ou plus sensiblement, ça dépend
surtout du volume de la table.

- Créer une procédure VBA d'insertion des enregistrements avec
l'algo suivant:

Sélectionner les enregistrements à insèrer à partir de la
source d'origine
Pour tous les enregistrements à insèrer
Si l'enregistrement n'est pas déjà présent dans la table
d'arrivée
Ajouter l'enregistrement
FinSi
Fpour
Mais là ce n'est plus une requête ajout, c'est du code VBA. On peut
toutefois l'éxecuter à partir d'une macro. C'est plus long à mettre en
place, mais on contrôle bien mieux le processus (enregistrement par
enregistrement). L'insertion avec cette procédure sera quand même beaucoup
plus lente qu'avec une requête ajout.

A+

Rv

"GL" a écrit dans le message de
news:bvknpb$aeu$
Bonjour,
Je veux alimenter régulièrement une table à partir d'une requête ajout
pour

faire ensuite un graphique chronologique.
Je voudrais empêcher l'importation d'enregistrements déjà existants dans
la

table.
Bien sûr, on peut extraire les doublons à partir d'une requête recherche
des

doublons et les supprimer, mais je pense qu'il doit y avoir plus "propre".
exemple de table :
date(), champ1, champ2
et je ne veux pas un doublon si je fais 2 fois ma requête ajout le même
jour.
Merci pour votre collaboration.




Avatar
GL
Merci Hervé pour ta réponse rapide et efficace.
GL
"Rv" a écrit dans le message de news:
#
Bonjour,

A partir de l'exemple donné, deux possibilités parmi bien d'autres:
- Créer un index unique sur la combinaison des champs date(),
champ1, champ2 (attention au nom des champs qui ne doivent pas
correspondre

à des mots clés) . Access empèchera la création des doublons car la
propriété unique sera à vrai.
Avantages:
. Access fait tout le boulot.
. C'est trés rapide à mettre en place.

Inconvénient:
. On ne sait pas forcément pourquoi les enregistrements ne
sont

pas insérés. Le message d'access parle de violation de clé et indique le
nombre d'enregistrements qui ne passe pas.
. L'index fait grossir la base et ralentit les insertions et
suppressions dans cette table tandis qu'il va accélérer les recherches
basées sur ces critères. Tout cela, un peu ou plus sensiblement, ça dépend
surtout du volume de la table.

- Créer une procédure VBA d'insertion des enregistrements avec
l'algo suivant:

Sélectionner les enregistrements à insèrer à partir de la
source d'origine
Pour tous les enregistrements à insèrer
Si l'enregistrement n'est pas déjà présent dans la
table

d'arrivée
Ajouter l'enregistrement
FinSi
Fpour
Mais là ce n'est plus une requête ajout, c'est du code VBA. On
peut

toutefois l'éxecuter à partir d'une macro. C'est plus long à mettre en
place, mais on contrôle bien mieux le processus (enregistrement par
enregistrement). L'insertion avec cette procédure sera quand même beaucoup
plus lente qu'avec une requête ajout.

A+

Rv