Intégrité référentielle entre les tables

tleboukaka Messages postés 79 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 5 mai 2010 - 2 janv. 2008 à 18:12
cs_joelamouk Messages postés 2 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 22 juin 2011 - 25 mai 2011 à 20:53
slt à tous

Pour tous ceux qui ont déjà developpé une application de bdd Delphi sous le moteur BDE/Paradox, voici le problème auquel je suis exposé :

J'utilise Delphi 7 et ai crée mes 2 tables sous Paradox, mais je ne sais pas comment faire fonctionner l'INTEGRITE REFERENTIELLE entre deux tables dont voici les champs :
tblClient (table mere) =   cliNum , cliNom, etc
tblCommandes (table fille) = comNum, cliNum#, comMontant

NB : les champs en Gras sont des clés primaires
le champ suivi du symbole # est la clé étrangere (clé secondaire)

Alors, qui pourrait avoir la gentillesse de me décrire (pas à pas / en détail) le processus pour créer l'intégrité référentielle entre les 2 tables ?

s'il vous plait, aidez moi !

Merci

Thibeault Lionel Eric

12 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
3 janv. 2008 à 11:44
Pour créer une intégrité référentiel il faudrait savoir déjà ce que tu cherches à faire entre ces deux tables.
Car une intégrité çà veut dire qlqchose...
et puis c'est plus simple si tu t'arrangeais pour avoir un champ désigné de la même manière dans les deuc tables.


Si tu mettais le champ cliNum (zé zoli comme nom..) dans la table tbl commandes et que tu faisais une requête en reliant les deux champs ?

humm ?

cantador
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
3 janv. 2008 à 11:46
Pour les noms je te conseille :


TClient avec clé primaire CODECLIENT


TCommande avec clé primaire CODECOMMANDE

cantador
0
tleboukaka Messages postés 79 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 5 mai 2010
3 janv. 2008 à 15:46
slt

Avant de commencer je dirai merci pour vos tentatives de réponses...

Celui auprès de qui j'ai appris à nommer les tables et les champs de tables n'est pas la moindre des personnes : un professionnel en la matière. c'est Mr FREDERIC BROUARD.
TClient (dans l'écriture SQL / IDE Delphi)  et tblClient (en MDE/Paradox)
TCommande (dans l'écriture SQL / IDE Delphi) et tblCommande (en MDE/Paradox)

avec les nom des champs, Frederic Brouard met Cli_Num ou Cli_Code tandis que moi je prefere mettre CliNum ou CliCode (plus court et plus propre à mon avis), etc

Vous pouvez vs en convaincre en visitant ce lien ci-dessous
http://sql.developpez.com/bddexemple/
http://sql.developpez.com/

mon intégrité référentielle c'est pour que les enregistrements de la table mere ne soient pas supprimés quand un enregistrement correspondant est présent dans la table Fille
ensuite que les mise à jour soit automatique de la table mere vers la table fille.

Voilà !

@+

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
3 janv. 2008 à 16:09
Il n'y existe aucune norme en matière de désignation des tables..
Juste un peu de bon sens et de règles mnémotechniques..c'est tout.

"mon intégrité référentielle c'est pour que les enregistrements de la table mere ne soient pas supprimés quand un enregistrement correspondant est présent dans la table Fille
ensuite que les mise à jour soit automatique de la table mere vers la table fille."

Ceci montre que tu confonds contraintes et intégrité..

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
3 janv. 2008 à 16:25
comme il en est ainsi...
comment puis je faire pour que les enregistrements de la tblClasse (ClaNum, ClaNom) ne soient pas supprimés tant qu'il existe un  ou plusieurs Etudiants dans la tblEtudiant (EtuNum, EtuNom, ClaNum, ...)  qui sont (inscrits) dans cette même classe.
Par ailleur les mise à jours effectuées dans la tblClasse soient répercutées automatiquement dans la tblEtudiant ! Sachant que le champs qui lie les 2 table est ClaNum ou CodeClasse si vous voulez

j'attend le sécours !!!

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
4 janv. 2008 à 11:39
ok !

Message bien reçu !
je continue à bosser

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
4 janv. 2008 à 12:33
bon je vais qd même te répondre :
les Maj et les Suppressions en cascade -->> contraintes
à régler dans ton gestionnaire de base de données
(évites le SQL sinon tu vas galérer..)

pour empêcher les suppression du père si le fils est n'est pas vide
->>>> par programmation

voilà le décor est planté.

bon courage

cantador
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
4 janv. 2008 à 13:06
Je rectifie pour les noms des tables :
En fait, le plus simple est de nommer directement la table par son nom
ex : table client         -->> CLIENT avec pour clé CODECLIENT      
      table commande->>> COMMANDE             CODECOMMANDE
ce qui clarifie grandement les constructions des SQL.

Pour les composants (d'où ma confusion) on prend pour habitude de le nommer
avec la première lettre de son nom sans le "T" :
ex : TQuery->>>>> QClient
                                QCommande etc..

      TLabel  ->>>>> LClient
      TPanel->>>>>> PCommande
                                 etc 

Bien sûr, il y a des exceptions comme les TTables par ex
car le T pourrait prêter à confusion avec une classe de composant...
Dans ce cas, moi par exemple je double le "T" ex:   TTClient
(mais comme je ne me sers plus des TTables)

Mais chacun est libre en ce domaine..

cantador
0
tleboukaka Messages postés 79 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 5 mai 2010
4 janv. 2008 à 14:21
parfait

au fait c'est un style le nommage. comme vous le dites, plus comprehensible et plus facile à se retrouver dans l'écriture SQL !

 a partir de demain Samedi je vais essayer d'y reflechir et exploiter cette piste que vous avez indiquez à savoir :
 les Maj et les Suppressions en cascade -->> contraintes
à régler dans ton gestionnaire de base de données
(évites le SQL sinon tu vas galérer..)

pour empêcher les suppression du père si le fils est n'est pas vide
->>>> par programmation

Pour l'heure la tête commence à peser
Merci encore pour votre disponibilité

@+

Thibeault Lionel Eric
0
khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 4 août 2010 1
4 janv. 2008 à 17:47
  
Salut !



<!--[if !supportLists]-->
1-    
<!--[endif]-->



Définition du dossier de travail 

:


          Dans le module de base de données
choisis comme repertoire de travail le
          repertoire qui contient tes tables
(sinon tu ne pourras pas indiquer la table de
          réference )



<!--[if !supportLists]-->
2-    
<!--[endif]-->



Configuration de l’integrité réferentielle

 :


toujours dans le module de base
de données ouvres la sous table ( la table fille comme tu dis )  et dans la la liste des proprietés de la table
sélectionnes  integrité référentielle ,
puis cliquer sur le bouton DEFINR



   
<!--[if !supportLists]-->

3-     

<!--[endif]-->



Sélection du champ référencé :










Dans la boite de dialogue intégrité
référentielle cliquer sur le champ  référencé
  puis la fleche vers la droite



<!--[if !supportLists]-->
4-    
<!--[endif]-->



Sélection de la clé de référence 

:


            Toujours  dans la boite de dialogue intégrité référentielle
et dans la 
           partie  droite sélectionnes la table (principale)et la clé est automatiquement
           sélectionnée     



<!--[if !supportLists]-->
5-    
<!--[endif]-->



Configuration de la mise à jour des données référencées :






      Toujours  dans la boite de dialogue intégrité référentielle(
en bas à 
      gauche )tu as deux       options 1- cascade   2- interdite











Si tu
choisis  l’option  Interdite: tu ne pourras plus modifier ou supprimer
une clé dans    la table PRINCIPALE  que si <st1:personname productid="la SOUS TABLE" w:st="on"><st1:personname productid="la SOUS" w:st="on">la
SOUS</st1:personname> TABLE</st1:personname> e ne comprend aucun
enregistrement    correspondant .
  Bonne chance
0
tleboukaka Messages postés 79 Date d'inscription lundi 26 février 2007 Statut Membre Dernière intervention 5 mai 2010
5 janv. 2008 à 10:39
MERCI [auteur/KHAWARIZM/553963.aspx khawarizm]

Mais je suis arrivé jusqu'à l'étape 3 :
    <!--[if !supportLists]-->3-      <!--[endif]-->Sélection du champ référencé :

Dans la boite de dialogue intégrité référentielle cliquer sur le champ  référencé   puis la fleche vers la droite

CEPENDANT dans la boite de dialogue INTEGRITE REFERENTIEL, apres avoir selectionné le champ  référencé, le bouton OK n'est pas activé;  d'où je ne peux meme pas  valider cette action et ne peu meme pas poursuivre/continuer.

Je suis coincé à ce niveau. je me demande : est ce que c'est mon Delphi qui est mal installé ? est ce que j'ai pas bien installé ce module Base de données Paradox MDE ?  Car à mon sens le bouton OK devait etre Activé - il est estompé (seul les boutons Anuler et Aide sont activés)

Je crois en cette démarcheque vous m'avez DETAILLE mais mais mais... je vous prie de m'aider d'avantage svp  Le bouton OK de la boite de dialogue INTEGRITE REFERENTIEL est inactivé/estompé !!!!

A bientôt

Thibeault Lionel Eric
0
cs_joelamouk Messages postés 2 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 22 juin 2011
25 mai 2011 à 20:53
Bonjour
ben voila je suis entraine de faire une application sous delphi7 et j'ai un blem lors de la création des tables sous paradoxe je n'arrive pas a faire l'intégrité referentielle il m'affiche comme erreur "la table n'existe pas " alors que je l'est crée aprés g fais reference dans le data module ajouter un nouveau champ ...... je ne sais pas q'il sagit de la mm chose que l'integrité referentiel sous paradoxe jtd une réponse SVP :)
0
Rejoignez-nous