Impossibilité de cocher l'intégrité référentielle entre 2 tables

parroquet Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
blux Messages postés 27147 Date d'inscription   Statut Modérateur Dernière intervention   -
Je voudrais lier 2 tables: la première est la table "clients", la seconde la table "commandes".

La clé primaire de "clients" est la colonne "code clients" en texte avec ce format : 06-01-001 par exemple.

La clé primaire de "commande" est un "numéro auto" attribué à chaque commande. Une colonne "code clients" est présente aussi, avec un menu déroulant faisant appel à "code clients" de la table "clients" (donc à priori pas de code non présent dans la table "clients").

Lorsque je tente de créer la relation entre les 2 tables par "code clients", il m'est impossible d'appliquer l'intégrité référentielle (un à plusieurs). Le message d'erreur me signale que les données de la table "commande" ne respectent pas les règles d'intégrité référentielle...
J'ai vraiment vérifier chaque colonne côte à côte et pas un "code clients" sous "commande" qu'il n'y a pas dans "clients" (grâce au menu déroulant) et l'inverse est même vrai... Franchement je câle depuis des semaines... Quelqu'un pourrait il m'aider ?
A voir également:

7 réponses

Tessel75
 
Bonjour,
Pour vérifier que ton intégrité référentielle est vraiment respectée, tu peux essayer de demander à une requête de te sortir les Clients pour lesquels il n'y a pas de commandes en indiquant comme critère de sélection "null" pour le champ "Commandes!Clients", sans demander l'intégrité évidemment. Tu verras si tu n'as pas des surprises.
Tu peux aussi faire une requête inverse ("Commandes " vers "Clients") avec le même critère mais "Null"sur le champs "Clients!CodeClient". Tu verras bien ce se passe.
Enfin, pourquoi pas un N°Auto comme clé-Client, ce serait bien plus sûr qu'un CodeClient traficoté-perso.
Bonne suite
0
parroquet
 
Merci de ton attention Tessel75, je suis admiratif... La requête des non correspondance me donne la liste de tous mes clients soit 229 unité!!! J'ai le sentiment que c'est mon "code client" traficoté qui pose problème mais je n'arrive pas a comprendre pourquoi !!! Ce numéro est unique pour chaque client dans la table "Clients". Bien entendu, je le retrouve à plusieurs reprises dans mes "commandes", serais ce le problème?
0
parroquet Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Merci Tessel,

alors, j'ai créer la requête avec la table "Clients" et les champs "code clients" et "nom" puis avec la table "Commande" et le champ "date de commande".
1- propriétés de la jointure (1): rien ne s'affiche.
2- propriétés de la jointure (2): tous les codes clients et leurs nom s'affichent. Rien à "date de commande".
3- propriétés de la jointure (3): les "date de commandes" uniquement.

maintenant avec le critere "null":
1- "null" sur un des 3 champs: plus aucun affichage.
2- "null" sur "code clients" ou "nom": plus aucun affichage.
3- "null" sur "date de commande": plus aucun affichage.

La clé primaire crée perso n'est pas un numéro auto car je suis certains qu'un code sera unique, exemple: 13-08-003
13:année de première commande
08:mois de prem's com
003: troisième nouveau clients du jour...

pas de confusion possible, ce clients gardera son code à la prochaine commande.
0
blux Messages postés 27147 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
Salut,

pour moi, le problème est qu'une ligne de la table 'commandes' n'a pas un 'code client' que l'on peut retrouver dans la table 'clients'.
Essaye de lancer une requête de 'non-correspondance' avec l'assistant afin de voir si c'est le cas.
0
Tessel75
 
Bonjour Blux! Bonjour Parroquet
En fait, sans employer le nom, c'est bien des requêtes de non-correspondance que j'avais demandé de tester, car elles suivent les écritures que j'avais indiquées, mais je me suis sans doute mal expliqué parce que ce n'est pas ce que Parroquet a fait.
En fait l'écriture-type des requêtes de non-correspondance est la suivante:

SELECT Banques.IndexBanque, Banques.Banque FROM Banques LEFT JOIN CompteBque ON Banques.[IndexBanque] = CompteBque.[BanqueIndexCB] WHERE (((CompteBque.BanqueIndexCB) Is Null));

Cette requête vérifie que tous les comptes bancaires sont rattachés à une banque répertoriées. Elle ne ramène rien.
0

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

Posez votre question
parroquet
 
Bon effectivement, j'ai un gros bug car la requête de non-correspondance entre "clients" et "commandes" me liste tous mes codes clients! pourtant quand j'ai inséré mes commandes, je recherche le code client par un menu déroulant faisant appel a la table "Clients"...bon le format ne doit pas être bien reconnu... Qu'en pensez vous?
0
Tessel75
 
Bonjour,
S'il en est ainsi, il ne te reste qu'à vérifier la compatibilité des formats des codes dans les 2 tables.
Cela étant dit, je ne peux que te conseiller de ré-examiner ta position quant aux clés par N°Auto et les codes-clients bricolés-perso avant qu'il ne soit trop tard et que tu aies beaucoup avancé dans la construction de ta base. Les 2 types de codes ne sont pas incompatibles à la condition de se rappeler qu'il faut savoir distinguer le codage système qui peut rester masqué mais avec lequel ton projet fonctionne, et le code perso qui peut être visible, mais de la même façon que les identités civiles des clients.
Bonne suite et bon courage.
0
TOUFIKINFO34 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
essayer de reformuler votre question
0
blux Messages postés 27147 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
Pourquoi ?
Le problème est pourtant clair.
0