Vérifier si doublon avantMAJ (cas de clé primaire composée)

Le
JM Lesavagnin
Bonjour.

Sous Access 2000 je souhaiterais vérifier avantMAJ si un enregistrement
'doublonne'.

J'ai trouvé comment réaliser cette opération similaire sur une clé
primaire 'simple' à partir d'un contrôle de saisie dans le formulaire,
mais là (clé composée et plusieurs contrôles pour la saisie), je sèche.

Merci par avance à celui ou ceux qui m'apporteront la lumière.

*************

Le contexte est le suivant:

TABLE : ENSEIGNEMENT
ENS_ID : NuméroAuto
ENS_MAT_ID : Entier long
ENS_PROF_ID : Entier long
ENS_ANNEE : Entier long - Format '0000'

Clé primaire sur ENS_MAT_ID, ENS_PROF_ID, ENS_ANNEE

TABLE : MATIERE
MAT_ID : Entier Long NuméroAuto -> Clé primaire
MAT_LIBELLE : Texte

TABLE : PROFESSEUR
PROF_ID : NuméroAuto -> Clé primaire
PROF_NOM : Texte
PROF_PRENOM : Texte
Etc.

FORMULAIRE : ENSEIGNEMENT
Champs ENS_ID, ENS_MAT_ID, ENS_PROF_ID, ENS_ANNEE

Les infos de ces champs sont saisies à partir de listes déroulantes
alimentées par des requêtes pour ce qui concerne les profs et matières
et par du code à partir d'un DLookUp sur une table PARAMETRES pour ce
qui concerne l'année.



--
Pour me contacter hors newsgroup :
ng.20.mikosax#spamgourmet.com en n'omettant pas de remplacer le # par @
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Raymond [mvp]
Le #6304311
Bonjour.

Tu dois pouvoir faire ceci:

If DCount("ENS_MAT_ID", "ENSEIGNEMENT", "[ENS_MAT_ID]=" & ENS_MAT_ID & " And
[ENS_PROF_ID]=" & ENS_PROF_ID & " And [ENS_ANNEE]=" & ENS_ANNEE) > 0 Then
' ici il y a doublon
End If

le numauto ENS_ID ne doit pas servir à grand-chose vu qu'il n'est pas clé
primaire ?

P.S. ici tout se passe en famille, pas de cachoteries hors newsgroup

--
@+
Raymond Access MVP http://www.OfficeSystemAccess.com/
http://officesystem.access.over-blog.com/
http://officesystem.access.free.fr/wiki/
Pour débuter sur le forum: http://www.mpfa.info/

Cet été, j'en ai rien à coder, je me forme : les devoirs de vacances
http://www.comscamp.com/Tracker/Redirect.ashx?linkidJd96883-a859-4212-b4a0-bce47c8e0d99


"JM Lesavagnin" dans le message de news: 469f5549$0$25873$
| Bonjour.
|
| Sous Access 2000 je souhaiterais vérifier avantMAJ si un enregistrement
| 'doublonne'.
|
| J'ai trouvé comment réaliser cette opération similaire sur une clé
| primaire 'simple' à partir d'un contrôle de saisie dans le formulaire,
| mais là (clé composée et plusieurs contrôles pour la saisie), je sèche....
|
| Merci par avance à celui ou ceux qui m'apporteront la lumière.
|
| *************
|
| Le contexte est le suivant:
|
| TABLE : ENSEIGNEMENT
| ENS_ID : NuméroAuto
| ENS_MAT_ID : Entier long
| ENS_PROF_ID : Entier long
| ENS_ANNEE : Entier long - Format '0000'
|
| Clé primaire sur ENS_MAT_ID, ENS_PROF_ID, ENS_ANNEE
|
| TABLE : MATIERE
| MAT_ID : Entier Long NuméroAuto -> Clé primaire
| MAT_LIBELLE : Texte
|
| TABLE : PROFESSEUR
| PROF_ID : NuméroAuto -> Clé primaire
| PROF_NOM : Texte
| PROF_PRENOM : Texte
| Etc....
|
| FORMULAIRE : ENSEIGNEMENT
| Champs ENS_ID, ENS_MAT_ID, ENS_PROF_ID, ENS_ANNEE
|
| Les infos de ces champs sont saisies à partir de listes déroulantes
| alimentées par des requêtes pour ce qui concerne les profs et matières
| et par du code à partir d'un DLookUp sur une table PARAMETRES pour ce
| qui concerne l'année.
|
|
|
| --
| Pour me contacter hors newsgroup :
| ng.20.mikosax#spamgourmet.com en n'omettant pas de remplacer le # par @
Raymond [mvp]
Le #6304301
.../...

j'ai oublié de te dire de placer cette procédure dans l'événement
beforeupdateUpdate des trois champs inclus dans la clé primaire et de
terminer la séquence IF par la ligne: Cancel = True

--
@+
Raymond Access MVP http://www.OfficeSystemAccess.com/
http://officesystem.access.over-blog.com/
http://officesystem.access.free.fr/wiki/
Pour débuter sur le forum: http://www.mpfa.info/

Cet été, j’en ai rien à coder, je me forme : les devoirs de vacances
http://www.comscamp.com/Tracker/Redirect.ashx?linkidJd96883-a859-4212-b4a0-bce47c8e0d99


"Raymond [mvp]" de news:
| Bonjour.
|
| Tu dois pouvoir faire ceci:
|
| If DCount("ENS_MAT_ID", "ENSEIGNEMENT", "[ENS_MAT_ID]=" & ENS_MAT_ID & "
And
| [ENS_PROF_ID]=" & ENS_PROF_ID & " And [ENS_ANNEE]=" & ENS_ANNEE) > 0 Then
| ' ici il y a doublon
| End If
|
| le numauto ENS_ID ne doit pas servir à grand-chose vu qu'il n'est pas clé
| primaire ?
|
| P.S. ici tout se passe en famille, pas de cachoteries hors newsgroup
|
| --
| @+
| Raymond Access MVP http://www.OfficeSystemAccess.com/
| http://officesystem.access.over-blog.com/
| http://officesystem.access.free.fr/wiki/
| Pour débuter sur le forum: http://www.mpfa.info/
|
| Cet été, j'en ai rien à coder, je me forme : les devoirs de vacances
|
http://www.comscamp.com/Tracker/Redirect.ashx?linkidJd96883-a859-4212-b4a0-bce47c8e0d99
|
|
| "JM Lesavagnin" | dans le message de news: 469f5549$0$25873$
|| Bonjour.
||
|| Sous Access 2000 je souhaiterais vérifier avantMAJ si un enregistrement
|| 'doublonne'.
||
|| J'ai trouvé comment réaliser cette opération similaire sur une clé
|| primaire 'simple' à partir d'un contrôle de saisie dans le formulaire,
|| mais là (clé composée et plusieurs contrôles pour la saisie), je
sèche....
||
|| Merci par avance à celui ou ceux qui m'apporteront la lumière.
||
|| *************
||
|| Le contexte est le suivant:
||
|| TABLE : ENSEIGNEMENT
|| ENS_ID : NuméroAuto
|| ENS_MAT_ID : Entier long
|| ENS_PROF_ID : Entier long
|| ENS_ANNEE : Entier long - Format '0000'
||
|| Clé primaire sur ENS_MAT_ID, ENS_PROF_ID, ENS_ANNEE
||
|| TABLE : MATIERE
|| MAT_ID : Entier Long NuméroAuto -> Clé primaire
|| MAT_LIBELLE : Texte
||
|| TABLE : PROFESSEUR
|| PROF_ID : NuméroAuto -> Clé primaire
|| PROF_NOM : Texte
|| PROF_PRENOM : Texte
|| Etc....
||
|| FORMULAIRE : ENSEIGNEMENT
|| Champs ENS_ID, ENS_MAT_ID, ENS_PROF_ID, ENS_ANNEE
||
|| Les infos de ces champs sont saisies à partir de listes déroulantes
|| alimentées par des requêtes pour ce qui concerne les profs et matières
|| et par du code à partir d'un DLookUp sur une table PARAMETRES pour ce
|| qui concerne l'année.
||
||
||
|| --
|| Pour me contacter hors newsgroup :
|| ng.20.mikosax#spamgourmet.com en n'omettant pas de remplacer le # par @
|
|
JM Lesavagnin
Le #6303201
Raymond [mvp] ecrivait (wrote), le (on) 19/07/2007 15:00 :
Bonjour.

Tu dois pouvoir faire ceci:

If DCount("ENS_MAT_ID", "ENSEIGNEMENT", "[ENS_MAT_ID]=" & ENS_MAT_ID & " And
[ENS_PROF_ID]=" & ENS_PROF_ID & " And [ENS_ANNEE]=" & ENS_ANNEE) > 0 Then
' ici il y a doublon
End If


Merci Raymond pour cette suggestion judicieuse. En fait, çà revient un
peu au même que d'exécuter une requête dont le WHERE correspond à
l'argument du DCount et de tester le RecordCount. Hormis la concision
d'écriture du DCount, quelle est la plus efficace des deux ?

le numauto ENS_ID ne doit pas servir à grand-chose vu qu'il n'est pas clé
primaire ?


Dans cet extrait de MPD, il ne sert effectivement à rien, mais la table
ENSEIGNEMENT est reliée à une table COURS, cette dernière à une table
ELEVE, etc...

P.S. ici tout se passe en famille, pas de cachoteries hors newsgroup

Je suppose que ce PS est dû au fait que j'ai indiqué une adresse de

contact hors NG. Je mets toujours cette signature au cas où, car j'ai
indiqué une adresse d'expéditeur totalement bidon afin d'éviter le spam
et çà fonctionne plutôt bien. En tout cas nulle envie de ma part de
faire des cachotteries ;-)

--
Pour me contacter hors newsgroup :
ng.20.mikosax#spamgourmet.com en n'omettant pas de remplacer le # par @

Raymond [mvp]
Le #6303191
Bonsoir.

Quand on ne cherche qu'une seule valeur, les fonctions de Domaine (Dcount,
Dlookup, Dmax, Dmin.....) sont plus rapides sans que ça atteigne des
sommets, et c'est plus simple comme code.

| > P.S. ici tout se passe en famille, pas de cachoteries hors newsgroup
| >
C'était pour te signaler que tout passe ici, que tout le monde doit en
profiter et que nos archives sur google sont importantes pour nous tous.
bonne soirée.
--
@+
Raymond Access MVP http://www.OfficeSystemAccess.com/
http://officesystem.access.over-blog.com/
http://officesystem.access.free.fr/wiki/
Pour débuter sur le forum: http://www.mpfa.info/

Cet été, j'en ai rien à coder, je me forme : les devoirs de vacances
http://www.comscamp.com/Tracker/Redirect.ashx?linkidJd96883-a859-4212-b4a0-bce47c8e0d99


"JM Lesavagnin" dans le message de news: 46a11b9b$0$3781$
| Merci Raymond pour cette suggestion judicieuse. En fait, çà revient un
| peu au même que d'exécuter une requête dont le WHERE correspond à
| l'argument du DCount et de tester le RecordCount. Hormis la concision
| d'écriture du DCount, quelle est la plus efficace des deux ?
|
| > le numauto ENS_ID ne doit pas servir à grand-chose vu qu'il n'est pas
clé
| > primaire ?
|
| Dans cet extrait de MPD, il ne sert effectivement à rien, mais la table
| ENSEIGNEMENT est reliée à une table COURS, cette dernière à une table
| ELEVE, etc...
|
| > P.S. ici tout se passe en famille, pas de cachoteries hors newsgroup
| >
| Je suppose que ce PS est dû au fait que j'ai indiqué une adresse de
| contact hors NG. Je mets toujours cette signature au cas où, car j'ai
| indiqué une adresse d'expéditeur totalement bidon afin d'éviter le spam
| et çà fonctionne plutôt bien. En tout cas nulle envie de ma part de
| faire des cachotteries ;-)
|
| --
| Pour me contacter hors newsgroup :
| ng.20.mikosax#spamgourmet.com en n'omettant pas de remplacer le # par @
JM Lesavagnin
Le #6303081
Raymond [mvp] ecrivait (wrote), le (on) 20/07/2007 22:45 :
Bonsoir.

Quand on ne cherche qu'une seule valeur, les fonctions de Domaine (Dcount,
Dlookup, Dmax, Dmin.....) sont plus rapides sans que ça atteigne des
sommets, et c'est plus simple comme code.


Merci. Je le supposais mais il est toujours bon d'avoir confirmation.

| > P.S. ici tout se passe en famille, pas de cachoteries hors newsgroup
| >
C'était pour te signaler que tout passe ici, que tout le monde doit en
profiter et que nos archives sur google sont importantes pour nous tous.
bonne soirée.


OK. Merci et bon week end.


--
Pour me contacter hors newsgroup :
ng.20.mikosax#spamgourmet.com en n'omettant pas de remplacer le # par @

Publicité
Poster une réponse
Anonyme