IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Table de paramètres liés à une table principale


Sujet :

Langage SQL

  1. #1
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 723
    Points : 627
    Points
    627
    Par défaut Table de paramètres liés à une table principale
    Bonjour,

    j'ai une question peut-être toute bête , mais je me lance :

    - j'ai récupéré une base de données sous Access 2010 , une de ces tables porte sur des produits.

    Une table "paraProduits" lui est liée et enregistre les propriétés des produits.

    Mon soucis est que cette table de paramètres se présente sous la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    | ID  | Code_para  | Parametre
    | 1   |   COL001    | Rouge        
    | 2   |   COL002    | Vert          
    ...
    | 30  |   MAT001   | Acier         
    | 31  |   MAT002   | Verre         
    ...
    | 51  |   TYP001   | Sportif     
    | 52  |   TYP002   | Simple     
    ...
    et dans la table des produits, ces paramètres sont entrés sous la forme du code de paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Prod_Couleur = "COL002"
    Prod_Matiere = "MAT002"
    Prod_Type="TYP003"

    d’où ma question :

    comment faire une requête qui va me ramener tous mes paramètres en une seule fois ?

    la couleur, la matière et le type ... je me triture les méninges

    Merci d'avance

    Amicalement

    Olivier

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 907
    Points
    30 907
    Billets dans le blog
    16
    Par défaut
    Bonsoir Olivier,


    Je ne suis pas utilisateur d’ACCESS, sinon de façon épisodique, quand il s’agit de travailler directement avec SQL. Quoi qu’il en soit, la manip ci-dessous pourrait vous intéresser. J’utilise ici ACCESS 2003.


    Situation initiale, le bouton « Requêtes » est sélectionné :



    Faire un clic droit sur « Créer une requête en mode Création ». Au résultat :



    Faire un clic gauche sur « Mode Création ». Il y a ouverture de la fenêtre « Afficher la table » :



    Cliquer sur le bouton « Fermer ». Dans la barre de menus la couleur du choix « SQL » ayant viré du gris au noir, ce choix devient accessible :



    Cliquer sur « SQL », ACCESS présente une amorce de requête SELECT :



    Il n’y a plus qu’à remplacer cette amorce :



    Et exécuter la requête Requête1 en cliquant sur son nom :




    Si vous voulez une solution dans le style QBE, postez dans le forum ACCESS.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 723
    Points : 627
    Points
    627
    Par défaut
    Bonjour et merci pour la réponse.

    Mais ce que je cherche, c'est de le faire en SQL depuis une application tierce et non au sein d'Access

    Olivier

  4. #4
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 907
    Points
    30 907
    Billets dans le blog
    16
    Par défaut
    D'accord. Quoi qu'il en soit, la requête SQL que j'ai proposée répond-elle à votre besoin ?
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  5. #5
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 723
    Points : 627
    Points
    627
    Par défaut
    Bonjour,

    oupss ... milles excuses, je n'avais pas vu le SQL, je n'avais vu que la marche a suivre sous Access pour créer une requête.

    Pour le code, il ne fonctionne pas, mais comme le projet sur lequelle je travaille est en Windev avec un mode de connexion ODBC , ce n'est pas formement le SQL qui est faux , mais Windev qui limite ce que l'on peut utiliser.

    Merci de ton aide, je vais essayer de faire quelque chose a partir de ton code (assez futé , je dois dire )

    Si j'arrive a quelque chose je mettrai la suite ici

    excellente journée

    Olivier

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    WinDev ne bride pas forcément le code SQL des requêtes.
    Il suffit d'utiliser SqlExec(), ou hExecuteRequeteSQL() avec l'option hRequeteSansCorrection.

    Tatayo.

  7. #7
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 907
    Points
    30 907
    Billets dans le blog
    16
    Par défaut
    Bonjour Olivier,


    Citation Envoyé par wd_newbie Voir le message
    Pour le code, il ne fonctionne pas, mais comme le projet sur lequelle je travaille est en Windev avec un mode de connexion ODBC , ce n'est pas formement le SQL qui est faux , mais Windev qui limite ce que l'on peut utiliser.
    La requête que j’ai proposée fonctionne parfaitement avec ACCESS 2003, DB2, MS SQL Server, etc. c'est-à-dire en SQL pur. Une remarque : j’ai employé la jointure, sous sa forme antique :
    FROM T1, T2, T3, ..., Tn WHERE ...
    au lieu de
    FROM T1 INNER JOIN T2 ON ... INNER JOIN T3 ON ... JOIN Tn ON ...
    car le papa d’ACCESS n’a pas vu que cette opération était associative, et l’emploi obligatoire des parenthèses devient très vite pénible.

    Aujourd’hui, la mode est à coder ainsi :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT x.*, y.Parametre, z.Parametre, t.Parametre
    FROM   PRODUIT AS x INNER JOIN paraProduits AS y ON x.ProdCouleur = y.Code_para
                        INNER JOIN paraProduits AS z ON x.ProdMatiere = z.Code_para
                        INNER JOIN paraProduits AS t ON x.ProdType = t.Code_para
    ;
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  8. #8
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 723
    Points : 627
    Points
    627
    Par défaut
    Bonsoir ,

    je reviens sur mon soucis , j'ai bien essayé les versions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	SELECT top 50  Code_Art, Nom_Art
    	FROM 
    	Tbl_Art AS J, Tbl_ParaArt as A
    	WHERE 
    	J.Code_Couleur = A.Code_Para
    ce qui me donne :


    Erreur de l'accès ODBC/OLEDB (provider=MSDASQL).
    Numéro d'erreur = 170129
    Description = [Microsoft][Pilote ODBC Microsoft Access] Trop peu de paramètres. 1 attendu.
    Source = Microsoft OLE DB Provider for ODBC Drivers
    SQL State = 07001
    Error Number = -2147217904
    Native Error Number = -3010
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	SELECT top 50  Code_Art, Nom_Art
    	FROM 
    	Tbl_Art AS J INNER JOIN Tbl_ParaArt  AS A ON  j.Code_Couleur= A.Code_PAra
    ..idem ... même erreur

    et pourtant avec une hRequêteSansCorrection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SI PAS HExécuteRequêteSQL(rs,"MaConnex",hRequêteSansCorrection, sSQL)   ALORS
    	Erreur(HErreurInfo())
     
    	RETOUR
    FIN

    si je fais :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	SELECT top 50  Code_Art, Nom_Art
    	FROM 
    	Tbl_Art AS J
    ... ça roule.

    Comprend pas
    Bonne soirée

    Olivier

  9. #9
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 907
    Points
    30 907
    Billets dans le blog
    16
    Par défaut
    Bonsoir Olivier,


    De mon côté, en ACCESS direct je n’ai pas de problème.

    Que se passe-t-il si vous créez une vue (requête) sous ACCESS :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT top 50  Code_Art, Nom_Art
    FROM Tbl_Art AS J, Tbl_ParaArt AS A
    WHERE J.Code_Couleur = A.Code_Para ;
    en l’appelant Requete1 comme je l’avais fait de mon côté et que vous exécutez via ODBC :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT * FROM Requete1 ;

    Si ça ne marche pas c'est qu'il y a une incohérence dans la structure des tables jointes.

    Merci de fournir les structures exactes des tables, en fait les CREATE TABLE, car apparaissent de nouveaux attributs et on va finir par ne plus savoir à quoi ressemblent ces structures...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  10. #10
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 723
    Points : 627
    Points
    627
    Par défaut
    La base que j'ai ne me permet pas de créer des requêtes, uniquement d'accéder aux tables.

    je suppose que la fonction est bloquée, l'appli en cours de dév est un fait une passerelle pour importer les données d'un logiciel dans un autre, je ne fais pas tout ce que je veux avec, malheureusement.

    Olivier

  11. #11
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 723
    Points : 627
    Points
    627
    Par défaut
    hello,

    j'ai résolu mon soucis en créant des fonctions spécifique lors du transfert des données , pas très élégant ... mais résolu

    Merci pour votre aide

    Olivier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL-5.1] Passer le nom d'une table en paramètre d'une procédure
    Par boubanet dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 08/06/2014, 18h06
  2. [AC-2007] Dans une table, deux champs liés à une autre table.
    Par julienbru dans le forum Modélisation
    Réponses: 3
    Dernier message: 24/11/2011, 18h49
  3. recupérer les info d'une table X pour alimenter une table Y
    Par lemerite dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/09/2008, 11h31
  4. Passage d'une table en paramètre d'une fonction
    Par Noir-Bizarre dans le forum 4D
    Réponses: 2
    Dernier message: 03/08/2006, 13h56
  5. Faire passer une table en paramètre pour une procedure
    Par samplaid dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/02/2006, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo