Champ à valeur unique

Résolu
tleboukaka Messages postés 79 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 5 mai 2010 - 25 déc. 2007 à 16:49
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 31 déc. 2007 à 14:17
salut !

comment je peux créer un champs à valeur unique, c'est à dire un champ sans doublon
dans une table Paradox.  Ma bdd est faite sur le BDE avec Delphi
je prend l'exemple d'une table tlbCivilite avec comme champs CivNum, CivNom (designation de la civilité = état civil). Par exemple CivNom aura comme valeur : marié, célibataire, divorcé
je veux appliquer sur le champ CivNom une VALEUR UNIQUE SANS DOUBLON
a tel point que l'utilisateur ne puisse jamais saisir plus d'une fois la valeur MARIE ou CELIBATAIRE

aidez moi à résoudre cela

Merci

Thibeault Lionel Eric

15 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 déc. 2007 à 14:44
Non, je n'ai pas le sentiment que çà marche..
Ce n'est pas l'index unique sur civNom (que j'aurai plutôt dénommé "libellé" évitant la confusion avec le nom de l'étudiant..) qui t'empêchera de saisir les doublons dans la table tblEtudiant.

La table tblCivilte ne comporte que 4 enregistrements qui sont stockés dès le départ et personne ne doit intervenir dans cette dernière puisqu'il s'agit d'une table annexe.
Il suffit tout simplement d'empêcher l'accès à l'édition de la table..
Il n'y a donc pas besoin de s'occuper des doublons..

En revanche, dans ta table tblEtudiant il est encore possible de saisir :

Nom                Prenom      civNum
DUPONT       Alain               M
DUPONT       Alain               M
DUPONT       Alain               C
DUPONT       Alain               C

Etc.. 

cantador
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 déc. 2007 à 15:11
Juste un dernier point..
Je te conseille d'abandonner BDE avec les tables paradox te permettant d'éviter les soucis de ré-indexage..(tjrs empoisonnant)  et les conflits réseaux..
Mieux est d'opter (si tu peux) pour une gestion à l'aide d'une base SQL type Firebird par exemple.
Ce SGBD est free très bien structuré robuste, très stable et agréable.
Ton souci de suppression en cascades se règle en quelques clics à l'intérieur même
du gestionnaire de base...etc etc.
Pour ma part,en gestionnaire, j'utilise IB Manager for SQL Inbterbase or Firebird.
peut-être en existe t-il d'autres free ?

Si mes réponses t'ont été utiles merci de cliquer "réponse acceptée".

@bientôt

cantador
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 déc. 2007 à 23:52
Attention la version Interbase fournie avec Delphi est une version CLIENT UNIQUE.
La version complète SERVER + CLIENT est payante..
L'utilisation est donc très limitée..


Par ailleurs, FIREBIRD(opensource) est mieux maintenue qu'INTERBASE.
D'autre part la version 2 de FireBird (toute écrite en C) est quasiment au point..
Je vais d'ailleurs bientôt l'installer sur mon réseau.
Borland qui a laché son Delphi n'est plus trop intéressé par INTERBASE désormais.Ils se consacrent aux outils de modélisation, design, management etc etc.
Mais d'autres bases sont aussi bonnes comme MySQL que tu cites.
Mais lit les comparatifs.. Il y a quelques différences..
Concernant Delphi, j'utilise tjrs la version D7 Entreprise.
Pour l'instant, elle me convient sur un plan professionnel.
La version 2007 est certes plus récente (donc avec un meilleur compilateur) orientée vers le WEB :
Plusieurs soucis me font hésiter :
- il faut racheter une autre licence
- il faut que je change tous mes compos en version .NET
(qd la version existe !)
je lorgne aussi Delphi PHP...pour les applis WEB.
@+
cantador
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
25 déc. 2007 à 22:36
Ta question n'est pas claire.. car si tu as un clé primaire avec un champ incrémental dans ta table, le problème est résolu.


Pour chaque numéro, il faudra un choix entre marié ou célibataire etc (il y a d'autres situations..)
J'ai le sentiment que la difficulté n'est pas là :
elle va être plutôt d'éviter :

n° 840 DUPONT Alain marié
n° 841 DUPONT Alain célibataire

n'est ce pas ?

cantador
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tleboukaka Messages postés 79 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 5 mai 2010
26 déc. 2007 à 17:18
non

j'éclairci ma question
j'ai une table qui n'a que 2 champs ou deux colonnes : tblCivilite(CivNum, CivNom)
il n'y a aucun champ qui soit autoIncrémentable
le 1er champs (Primary Key) est un 1A. CivNum (N°) = C, ou M
le 2e champs est un 15AN CivNom = Célibataire ou Marié
exemple
n° C   Célibataire
n° M  Marié
n° D   Célibataire (ce cas ne devait pas passer. l'utilisateur ne doit pas saisir par inadvertance Célibataire 2 fois et que la Bdd ne doit pas laisser passer çà !)

voilà je croi avoir été clair, est ce que c'est depuis ma table Paradox/BDE je dois le faire ou bien c'est au niveau de l'IDE Delphi; et comment on le fait ! svp ?

Merci

Thibeault Lionel Eric
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
27 déc. 2007 à 17:58
Oui c'est plus clair mais la logique n'est tjrs pas là..
Combien d'enregistrements au maximum as-tu dans ta table tblCivilite ?

cantador
0
tleboukaka Messages postés 79 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 5 mai 2010
28 déc. 2007 à 09:17
ma tblCivilité aura au maximum 4 enregistrement qui sont
C - Célibataire
M- Marié
D- Divorcé
V- Veuf

Thibeault Lionel Eric
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 déc. 2007 à 12:21
Oui mais alors ta table tblCivilite est une table d'alimentation, une table de type si tu préfères..
sinon tu n'as droit qu'à un seul individu..

Donc, je suppose que cette table est en relation avec une autre dans laquelle tu stockes le choix CivNum (cette information étant un sigle).

bref tu as une relation 1-N entre ta table tblCivilite et une autre tPERSONNES..
ainsi pour chaque enregistrement de la table tPERSONNES il faut faire un choix (liste déroulante) entre les CivNum.

je suis dans le coup ou pas ?

cantador
0
tleboukaka Messages postés 79 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 5 mai 2010
28 déc. 2007 à 12:32
tout a fait EXACT ce que tu dis
la tblEtudiant et la tblCivilite. il y a une relation 1,N qui d'ailleur marche bien
cependant comme j'avais l'habitude de le faire facilement en Access, je voudrai bloquer les doublon du coté tblCivilite, sinon par inadvertance l'utilisateur peu saisir la valeur Marié 2 fois sans que le programme le lui interdisse
j'ai testé moi meme en faisant (sachant que l'INDEX c'est le champs CODE/civNum)code M   civilité (Nom) Mariécode E    civilité Marié

voilà c'est bien clair (je veux interdire les saisies en double du coté de la tblCivilite) !

Thibeault Lionel Eric
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 déc. 2007 à 13:23
On y voit plus clair mais faut tirer sur la pelotte... 


et je m'aperçois que les doublons ne sont pas dans la table tblCivilite comme tu l'indiques mais dans la table tblEtudiant (ce que je pressentais au départ..)


En fait ton souci est le problème classique de l'identifiant unique
concernant les individus...


Tout dépend du niveau de sécurité que tu veux obtenir..
Si c'est pour gérer la location d'une console de jeux ou
effectuer des virements bancaires..


Dans le premier cas, tu peux te contenter de mettre un index
secondaire unique sur le Nom, le Prenom, le CcivNum et
(par ex :la Date de Nnaissance ou la Ville de naissance)


avec çà je pense que tu devrais éviter la plupart des doublons.


j'ai encore d'autres idées mais j'attends tes réactions..

cantador
0
tleboukaka Messages postés 79 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 5 mai 2010
28 déc. 2007 à 13:38
regarde
c'est simple l'explication, vous avez pourtant compris le problème de cette relation de 1,n
Si j'étais avec la bdd Interbase, je créerai ma table tblcivilite de la sorte
CREATE tblcivilite
( civNum CHAR primarykey,
   civNom VARCHAR (15) UNIQUE   // l'instruction UNIQUE permet d'eviter les                                                               // doublons
)

Voilà ! il n'y a pas à toucher du coté de la tblEtudiant à mon avis

Merci

Thibeault Lionel Eric
0
tleboukaka Messages postés 79 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 5 mai 2010
28 déc. 2007 à 14:55
tout a fait
j'ai compris - tu as raison. je n'ai pas besoin de m'occuper de la tblCivilite
Plutot de travailler si possible du côté de la tblEtudiant

Merci pour ta disponibilité et tes interventions
je travaille demain samedi apres midi et je pourrai poser une autre question concernant les suppressions en cascades avec Delphi tjrs

@+

Thibeault Lionel Eric
0
tleboukaka Messages postés 79 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 5 mai 2010
29 déc. 2007 à 15:59
ok

mais ne penses tu pas qu'il serait préferable d'utiliser Interbase à la place de FireBird, étant donné que InterBase est dejà livré avec Delphi sur un meme CD ?
entre temps j'ai des bonnes bases sur InterBase, il dispose aussi d'une interface graphique pour créer des tables et des requette (en mode graphide = facilité d'utilisation) !!!

Franchement tu as été gentil envers moi pour tout cet aide et éclaircisement, content de te connaitre un peu

Mais tu pourrai me dire quelle version de Delphi utilises tu actuellement ?  Moi j'en suis encore avec DELPHI 7 ENTREPRISE.
mon souhait est d'avoir le DELPHI 2007 ENTREPRISE du fait que déjà mySql est integré

@ +

Thibeault Lionel Eric
0
tleboukaka Messages postés 79 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 5 mai 2010
31 déc. 2007 à 08:33
Merci pour tes conseils et orientations si précieuses
donc je vais être obligé pour l"heure de me reprendre sur FireBird (openSource) plutot de reconsiderer interBase qui est limité.
Mais je croyais que la version INTERBASE livré avec le CD Delphi était limité à 5 ou 6 utilisateur (en reseau) ! si c'est le cas ça vaudrait le cou ! - je vais poser cette question sur le forum...
entre temps si tu as une documentation en FRANCAIS  sur FireBird, je te prie de me l'envoyer afin que je commence mes premiers pas stp

je t'invite de m'envoyer ton eMail pour des discutions plus privées. le mien est : tleboukaka@hotmail.com

Merci

Thibeault Lionel Eric
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
31 déc. 2007 à 14:17
Ah si juste une précision : 
La version 1.5 de Firebird a par contre fait l'objet d'une réécriture en C++ ainsi que la 2.
Alors que IB6 est en C et bugée et IB7 est payante.
Donc le problème est réglé..

Pour FIREBIRD, il y a maintenant bcp de sites..
En voici un :
http://www.ibphoenix.fr/spip.php?page=plan

Mon Email : [mailto:pulsar3000@wanadoo.fr pulsar3000@wanadoo.fr]


@+
cantador
0
Rejoignez-nous