Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/08/2011, 02h02   #1
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
Par défaut Problème de création de requêtes

Bonjour,

Je possède une table [Famille] composée de 4 champs:
une clé primaire [ID], [Nom], [code], [IDparent]

Je n'arrive pas à gérer une requête qui puisse remplir une combobox d'un formulaire en filtrant un champs d'une table:

Code :
SELECT DISTINCT Famille.Nom FROM Famille WHERE (((Famille.IDparent)="Manifold") ORDER BY Famille.Nom;
Je souhaiterais qu'elle filtre sur le champs [IDparent] et qu'elle m'affiche le [Nom] correspondant. Or, une fois créée, la requête filtre uniquement sur la clé primaire. Par exemple, si je cherche la valeur "Manifold" il ne me trouve rien. Par contre si je cherche la valeur "1" (correspondant à la clé primaire d'une ligne ou j'ai IDparent qui contient "Manifold" ça fonctionne. Mais ce n'est pas ce que je veux. Je n'arrive pas à comprendre pourquoi. Je viens de perdre ma soirée à buter sur ce problème.

Pourtant j'ai déjà réussi à le faire sur une autre combobox et ça fonctionne parfaitement:

Code :
SELECT Famille.Nom FROM Famille WHERE (((Famille.Code) Like "E-*")) ORDER BY Famille.Nom;
Ici je voulais remplir ma combobox avec le contenu du champs [Nom] lorsque [Code] comme par "E-". Ce que j'obtiens sans problème.

Je suppose qu'il y a des bases que je ne connais pas qui sont la source de mon problème. Mais j'ai eu beau chercher et tester des tas de solutions diverses, mais toujours en vain.

Merci d'avance
Vhalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 11h28   #2
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
Bonjour,

Ta requete semble bonne, simplement qu'il manque une parenthese, ou d'un autre point de vue, des parentheses en trop:

Code :
1
2
 
SELECT DISTINCT Famille.Nom FROM Famille WHERE Famille.IDparent="Manifold" ORDER BY Famille.Nom;
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 14h20   #3
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
Bonjour,

Effectivement, à force de faire des essais, je m'étais mélanger dans les parenthèses. Merci

J'ai donc corrigé la requête et j'obtiens le message d'erreur suivant:
Type de données incompatible dans l'expression du critère.

Pour essayer de comprendre, j'ai modifié ma requête en transformant l'égalité en Like:

Code :
SELECT DISTINCT Famille.Nom FROM Famille WHERE Famille.IDparent Like "Manifold*" ORDER BY Famille.Nom;
Il me renvoie le même message d'erreur que ci-dessus. Donc je teste en cherchant sur un entier (le même formatage que la clé primaire)

Code :
SELECT DISTINCT Famille.Nom FROM Famille WHERE Famille.IDparent="1" ORDER BY Famille.Nom;
J'obtiens encore une fois la même erreur. Et dans ce cas je ne comprends vraiment pas pourquoi. Car si je remplate le = par le Like:

Code :
SELECT DISTINCT Famille.Nom FROM Famille WHERE Famille.IDparent Like "1" ORDER BY Famille.Nom;
Il m'affiche bien le résultat que je souhaite. Mais uniquement en lui renseignant la valeur de la clé primaire. Or j'ai besoin de le rechercher par [IDparent]

Ca me parait basique comme problème, mais je ne trouve aucune réponse.
Vhalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 14h54   #4
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
C'est peut etre moi qui comprend mal, mais ton champ IDparent contient un chiffre ou un nom ?
D'apres ce que j'ai compris IDparent contient un chiffre et dans il y a une autre table qui associe cet IDparent a un nom :

parent
ID | nom
1 | Manifold

Si c'est bien ca la requete serait
Code :
SELECT DISTINCT Famille.Nom FROM Famille WHERE Famille.IDparent=1 ORDER BY Famille.Nom;
Et si tu souhaite plutot rentré le nom il faut passer par un join
Code :
SELECT DISTINCT Famille.Nom FROM Famille RIGHT JOIN Parent WHERE Famille.IDparent = Parent.ID WHERE Parent.nom="Manifold" ORDER BY Famille.Nom
ou bien
Code :
SELECT DISTINCT Famille.Nom FROM Famille RIGHT JOIN Parent WHERE Famille.IDparent = Parent.ID WHERE Parent.nom LIKE "Manifold*" ORDER BY Famille.Nom
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 15h49   #5
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
Excuse moi, à force de mettre trop d'information je crois qu'on s'y perds plus qu'autre chose.
Mon champs IDparent contient bien un nom (ex: manifold)

Exemple d'une ligne:

[ID] = 1
[Nom] = Instrumentation
[Code] = 4
[IDparent] = Manifold

Par contre, pour te répondre, j'ai effectivement une liaison de [Famille].[IDparent] vers [Famille_1].[ID]. Mais pour être franc cette partie n'a pas été faite par moi, et je ne comprends pas son but. J'avais essayé de supprimer cette liaison, mais cela n'avait pas corrigé mon problème. Donc je l'ai remise. Est ce que mes soucis peuvent provenir de ça?

Le champs [Famille].[ID] est lui aussi relié à d'autres tables mais je crois que ça n'a pas d'importance ici.
Vhalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 16h17   #6
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
Il n'y a jamais "trop" d'informations !

Non je ne pense pas que cette liaison pose probleme, de plus elle n'apparait pas dans notre requete donc pas de soucis.

Donc si le champ IDparent contient bien du texte la bonne requete serait donc ma premiere, essai de changer les " par des ' comme cela :

Code :
SELECT DISTINCT Famille.Nom FROM Famille WHERE Famille.IDparent='Manifold' ORDER BY Famille.Nom;
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 16h25   #7
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
Je viens d'essayer, et j'ai toujours la même erreur.
Cependant, ce qui m'étonne, c'est qu'après le message d'erreur, ma combobox contient une entrée qui est vide.

Donc je me pose la question de savoir si le fait que je puisse, dans certain cas, ne pas avoir de valeur dans le champs [IDparent] puisse être une source de problème?

Cela dit, je ne pense pas que ce soit ça. Mais sait on jamais.
Vhalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 16h38   #8
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
Pour faire les tests de ta requete je te conseille de mettre ta requete dans une requete a part et pas dans la source de ton combobox, ca sera plus simple pour differencier les vrai/faux enregistrement "null"

Normalement si IDparent est vide, non ce n'est pas censé poser probleme

Essai :
Code :
SELECT DISTINCT Famille.Nom FROM Famille WHERE Famille.IDparent=1 ORDER BY Famille.Nom
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 16h42   #9
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
La requête fonctionne bien avec ce critère. Du coup tu as mis en évidence une erreur que je ne comprenais pas plus haut.

Pour moi il est clair que l'on filtre sur [ID] et non pas [IDparent]. Qu'en penses tu?
Vhalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 17h24   #10
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
Cela met en evidence que IDparent est un champ numéro et pas texte!

Je vois pas pourquoi access confondrait le champ ID et IDparent :S
Mais seul toi peux le voir, en regardant le resultat de ta requete si elle correspond bien a un filtre sur IDparent et pas ID ....

si tu cree une requete vierge avec
Code :
SELECT IDparent FROM Famille
Tu as du texte ?!

Si c'est possible pourrais tu m'envoyer ton fichier ?!
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 17h40   #11
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
Oui je peux te passer le fichier sans problème.

Mais j'ai eu le fin mot de l'histoire.. J'ai contacté la personne qui avait créer la partie que je ne comprenais pas. Et j'ai bien fait!! Je vais tenter d'expliquer ce que j'ai appris:

En fait la table Famille_1 qui est liée à IDparent n'est pas réelement une table mais une instance de Famille. Donc je voyais bien que IDparent affichait des noms tels que Manifold, mais en réalité il s'agit d'entiers (voir mon post ou je décris cette liaison.

De ce fait, je crois que tu t'approchais pas mal de la solution lorsque tu parlais de jointures.

Voici la requête qui résout mon problème:

Code :
SELECT B.Nom FROM Famille AS A, Famille AS B WHERE A.ID=B.IDparent AND A.Nom=[Formulaires]![GPE]![cbFamille];
Bon j'ai juste modifié mon critère pour qu'il soit fonction de la sélection d'une combobox.

Je ne suis pas sur d'être clair car je n'ai pas encore tout bien saisi. (mais je vais y réfléchir )

En tous cas, merci beaucoup pour ton aide.
Vhalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 18h05   #12
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
Okey en fait parentID fais reférence a ID de la meme table.
Donc effecteivement ta requete doit fonctionner mais je te conseille d'utiliser la requete de jointure que j'avais faite:

Code :
SELECT tblMain.Nom FROM Famille AS tblMain LEFT JOIN Famille AS tblLinked ON tblMain.parentID=tblLinked.ID WHERE tblLinked.nom=[Formulaires]![GPE]![cbFamille]
Si elle ne fonctionne pas essai de remplacer LEFT JOIN par RIGHT JOIN

Cependant je ne sais pas comment tu forme ta liste box, mais si tu peux recuperer le IDparent et non son nom ca serait bcp plus simple.Si la source de ta liste box est basé sur la table Famille, aucun probleme.
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 20h02   #13
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
Y a t-il un avantage à utiliser une solution plutôt que l'autre?

Citation:
Envoyé par gabvoir Voir le message
Cependant je ne sais pas comment tu forme ta liste box, mais si tu peux recuperer le IDparent et non son nom ca serait bcp plus simple.Si la source de ta liste box est basé sur la table Famille, aucun probleme.
Je vais tâcher de t'expliquer pourquoi la personne qui s'est occupée de cette partie en est venu à cette solution.

Imagine que je doive classer un grand nombre de pièces dont leur numéros d'identification provient d'un système existant. Pour retomber sur la logique existante, il me faut classer ces pièces sur un principe de hierarchie.

Exemples:

Famille (1er niveau): Quincallerie
Catégorie (2eme niveau): Vis
Sous catégorie (3eme niveau): H

H appartient à Vis. Et Vis appartient à Quincallerie.
IDparent permet de définir à qui appartient une entité. (donc niveau 2 ou 3 suivant si c'est rattaché à une entité de 1 ou 2 niveau)
Si IDparent est vide, c'est que l'entité est de 1er niveau.

Or on est pas sur qu'une entité du 2eme ou 3eme niveau soit réélement unique car certain termes peuvent être génériques et utilisés pour des hierarchies différentes.

Exemple:

une sous catégorie (3eme niveau) nommée "Horizontal" peut convenir pour differents supports ou matériel.

Et si j'ai bien compris l'explication que l'on m'a fourni, c'est suite à cette problématique que l'on en vient à cette solution. Par contre je ne comprends pas forcément bien pourquoi.

Est-ce que ça te parait cohérent?
Vhalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 20h40   #14
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
ben en soit je ne sais pas vraiement, mais ma solution de jointure est "plus dans les regles de l'art" si je ne me trompe.

Oui je vois effectivement la structure de la base.
Imaginons le cas suivant :
Quincallerie - Vis -H - M6
Quincallerie - Vis -H - M7
Outillage - H -Bosch
(exemple absurde mais exemple quand meme ^^)

Les 2 premier H sont egaux, d'ou le troisieme H est obligatoirement un autre avec un autre ID et un autre IDparent.
Si on rentre H dans la requete que l'on a fait precedemment, on aura
M6 - M7 - Bosch

C'etait bien ton souhait ? Ou simplement M6 et M7 (ou bosch) ?!
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 21h22   #15
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
Merci pour l'info. Dans ce cas, je vais tâcher de modifier ma requête.

Pour situer un peu à quoi ressemble le formulaire (pour le moment), j'ai 3 combobox (correspondant aux 3 différents niveaux) qui filtreront une liste box qui affichera la liste des pièces correspondantes.

Tu vas me dire si je me trompe, mais si tout fonctionne comme je l'espère, après avoir fait mes 3 sélections (si j'ai 3 niveaux car ils sont facultatifs), je devrais bien avoir ce que je désire:

Citation:
Pour reprendre ton exemple:

Cbox Famille = Quincallerie
Cbox Catégorie = H

Alors j'aurai Cbox Sous Catégorie = M6 - M7

De même, si

Cbox Famille = Outillage
Cbox Catégorie = H

Alors j'aurai Cbox Sous Catégorie = Bosch
Si ce n'est pas le cas, alors je me suis planté quelque part.

Pour le moment, je suis en train d'avancer sur la finition des combobox. J'ai encore quelque soucis pour masquer la cbox descendante dans la hierarchie si celle-ci est vide. Sinon je crois que tout est ok pour cette partie au combien éprouvante

ps: du fait d'être "absurde", l'exemple est d'autant plus clair
Vhalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 22h19   #16
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
Ben en fait ce n'est pas ce qui se passera.
En effet le fait de faire la recherche sur le champ name, te confondra la categorie H outillage et H quincallerie.
Dans l'exemple fournit, la Cbox sous categorie sera dans les deux cas rempli avec les memes chose, les 3, M6 - M7 - Bosch.

C'est pourquoi il faut modifier la requete afin de faire une recherche sur un identificateur unique. Ici c'est parfait ca correspond a parentID.
Elle devient tout simplement :
Code :
SELECT Famille.Nom FROM Famille WHERE parentID=[Formulaires]![GPE]![cbFamille]
Cependant, il faut egalement changer la Cbox Famille afin quelle renvoi l'ID selectionné et pas son nom. Sa source sera donc :
Code :
SELECT ID,Nom FROM Famille WHERE Nz(parentID,0)=0
Ensuite verifier que la propriete BoundColumn est a 1;
ce qui permet de lier [Formulaires]![GPE]![cbFamille] a ID
et ensuite au niveau affichage pour cacher l'ID, mettre "0cm" dans la prorpiete width

De meme pour le Cbox sous categorie
Code :
SELECT Famille.Nom FROM Famille WHERE parentID=[Formulaires]![GPE]![cbCategorie]
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/08/2011, 23h52   #17
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
Bonsoir,

Désolé pour le temps de réponse.

J'en ai profité pour parler de tout ça avec un collègue qui est familier avec les bases de données, et il préfère lui aussi ta requête qu'il juge plus propre. Et m'a donc conseillé de virer la liaison (Famille_1).

J'ai donc suivi vos conseils et mis en place cette solution.
Pour le moment cela fonctionne pour les niveaux 1 et 2. Mais pas encore pour le 3ème. Je réfléchis donc à une manière de faire marcher cette dernière combobox

Par contre, j'aimerais, si possible, avoir plus d'explication sur ce que tu m'as donné. Je l'ai appliqué, mais je ne comprends pas tout.

Code :
SELECT ID,Nom FROM Famille WHERE Nz(parentID,0)=0
Que signifie "Nz"? est-ce un nom donné pour une table fictive?
Que sont les arguments entre parenthèses, du moins le "0")?

Est ce que le "=0" signifie qu'on veut que les entrées dont IDparent est vide?

(je me suis permi d'enlever le tag "Résolu" le temps que j'arrive à utiliser cette méthode)
Vhalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 11h17   #18
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
Bonjour,

Pas de soucis pour le retard ^^

Ben la troisieme combobox fonctionne exactement comme la deuxieme.
Et c'est moi qui me suis trompé ...
Dans la deuxieme Cbox la source doit etre :
Code :
SELECT ID,Nom FROM Famille WHERE parentID=[Formulaires]![GPE]![cbFamille]
Et comme pour la premiere:
Verifier que la propriete BoundColumn est a 1;
ce qui permet de lier [Formulaires]![GPE]![cbCategorie] a ID
et ensuite au niveau affichage pour cacher l'ID, mettre "0cm" dans la prorpiete width

Et de meme pour la source de a troisieme Cbox rajouter le ID:
Code :
SELECT ID,Nom FROM Famille WHERE parentID=[Formulaires]![GPE]![cbCategorie]
Pour ce qui est de
Code :
SELECT ID,Nom FROM Famille WHERE Nz(parentID,0)=0
Le Nz, c'est "non-zero", si parentID = null, alors parentID=0 (le parametre)
Cela permet d'etre sur de bien prendre en compte les champs vide, et ceux egal a 0.

J'espere avoir ete clair.
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/08/2011, 14h05   #19
Nouveau Membre du Club
 
Homme Mickaël
Dessinateur industriel
Inscription : décembre 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Localisation : France

Informations professionnelles :
Activité : Dessinateur industriel
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 61
Points : 31
Points : 31
Bonjour,

Merci beaucoup Gabvoir !

D'une part, ça fonctionne très bien, et en plus je comprends la solution que tu m'as proposé.

C'est plus clair pour moi maintenant ce système de requête avec les combobox. Je suis juste déçu de ne pas avoir réussi à me débrouiller tout seul hier soir en fonction de ce que tu m'avais donné.

Par contre, il y aurait pour moi, une clause AND à rajouter dans la requête pour remplir la 3ème combobox.

En effet, on va aller piocher dans notre table, admettons, toutes les entrées dont le nom correspond à "H" et qui ne sont pas de premier niveau.

Cependant, il se peut qu'on ai une entité "H" dont le parent est "Vis", et une 2ème (ou n) entité dont le parent serait "Outillage". Or je souhaite, puisque j'ai sélectionné "Vis" dans la première combobox, ne pas voir les "H" lié à "Outillage".

Il me semblerait donc logique, lors de cette dernière requête, de filtrer sur le nom qui nous intéresse bien sur (ici "H"), mais de vérifier que son parent est égal à ce que nous avons sélectionné dans la combobox de 1er niveau.

En l'écrivant, je me dit qu'il faudrait surement en faire de même pour le 2ème niveau.

Est-ce que ma logique te semble correcte? Si oui, je crois que nos requêtes actuelles permettraient l'affichages d'entrées non voulues.
Vhalar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 15h30   #20
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
Quand on a la capacité d'aider alors pourquoi pas.
Il n'y a pas de malm a ne pas y arriver tout seul, c'est d'ailleur pour ca que ce genre de fofo existe !

Donc le probleme que tu cite ici etait celui que j'avais mis en avant avec ta premiere solution. Dans cette derniere on recherché dans la table en fonctione du nom de la famille.
Ici avec les requetes que l'on a denrierement mise en place, on ne recherche pas en fonction du nom de son parent, mais directement a partir d'un identifiant unique parentID.
Reprenons notre exemple absurde mais concret :
ID | parentID | nom
1 | 0 | Quincaillerie
2 | 0 | Outillage
3 | 1 | H
4 | 3 | M6
5 | 2 | H
6 | 5 | Bosch

Ici on a deux H mais ils n'ont ni le meme ID ni meme le meme parentID.
Le fait de recherche sur les parentID et non pas sur le nom de ce meme parentID, nous permet de s'affranchir de ce probleme.
En choisisant 1 dans le premier Cbox, cela va nous afficher dans la Cbox2 tous les ID qui ont comme parentID 1, soit le 3. Par la meme reflexion, avec 3 dans la Cbox2, on va afficher dans la Cbox3 tous les ID qui ont comme parentID 3, soit 4.
Il faut reflechir par ID et non par nom. C'est d'ailleurs le grand avantage des bases de donnés avoir un identifiant unique pour chaque enregistrement.

J'espere avoir ete clair
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h51.


 
 
 
 
Partenaires

Hébergement Web