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

Requêtes et SQL. Discussion :

Créer une relation entre deux tables en liste de choix via SQL


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Homme Profil pro
    Apprendre
    Inscrit en
    Avril 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 147
    Points : 175
    Points
    175
    Par défaut Créer une relation entre deux tables en liste de choix via SQL
    Bonjour,

    Problème simplifié, j'ai deux tables: Table1 et Table2. J'ai deux champ identique dans ces deux tables: Champ1 et Champ2.

    Je voudrais que le champ2 de la table 2 soit en relation avec le champ2 de la table 1 via une liste de choix en passant par une instruction SQL.

    Mais je galère solide...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "SELECT champ2 FROM table2 INNER JOIN table1 WHERE table2.champ2 = table1.champ2"
    Comme d'habitude (On s'habitue!) l'instruction me donne une erreur dans la clause FROM...

    Quelqu'un peut m'aider à corriger le code?

    Également, comment établir la relation comme étant une liste de choix à partir de la table1(Avec intégrité référentielle)?

    Merci!

  2. #2
    Membre confirmé Avatar de saymoneu
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 248
    Points : 505
    Points
    505
    Par défaut
    Bonjour,

    Quand on utilise inner join il faut mettre "ON table2.champ2 = table1.champ2" et pas "WHERE table2.champ2 = table1.champ2" il me semble

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 640
    Points : 34 355
    Points
    34 355
    Par défaut
    salut,

    c'est surtout car tu tentes d'exécuter une requete selection, alors que CurrentDb.Execute est utilisé pour les requetes action (SELECT INTO, INSERT, UPDATE, DELETE, DROP, ALTER...)

    La remarque de syntaxe sur l'INNER JOIN de saymoneu restant bien sûr valable ici

  4. #4
    Membre habitué
    Homme Profil pro
    Apprendre
    Inscrit en
    Avril 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 147
    Points : 175
    Points
    175
    Par défaut
    Bonjour,

    Donc, je reviens vers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL  "SELECT champ2 FROM table1 INNER JOIN table2 ON table1.champ2=table2.champ2"
    Qui me donne une erreur, argument non facultatif.

    Par évidence, j'ai omis de déclarer un champ ou une table, mais ne vois pas ou...

    Quelqu'un peut m'aider?

    Également, le résiduel serait de savoir comment faire pour que la relation s'affiche comme une liste déroulante dans un formulaire sans que j'ai manuellement à aller jouer dans la table?

    Merci beaucoup!

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Quel est l'intérêt de lancer une requête sélection de la sorte ?

    En général ce genre de requête est là pour alimenter un formulaire, un recordset DAO, etc... et non pour être exécutée de cette manière.

    Philippe

  6. #6
    Membre habitué
    Homme Profil pro
    Apprendre
    Inscrit en
    Avril 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 147
    Points : 175
    Points
    175
    Par défaut
    Rebonjour,

    J'ai changé mon code pour le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DoCmd.RunCommand acCmdSaveRecord
    Dim StrTableName As String
       StrTableName = Me.txt_Projet.Value
       CurrentDb.Execute "SELECT description, prioritaire, [ordre de priorité], responsable, commentaire, catégorie, [temps total], complété, organigramme, ajouter INTO [" & StrTableName & "] FROM Tâches"
       DoCmd.RunSQL "ALTER TABLE [" & StrTableName & "] ADD FOREIGN KEY (responsable) REFERENCE tâches(responsable);"
       RefreshDatabaseWindow
    Dans le fond, l'idée générale, c'est de créer une table identique à la table Tâches.

    Mais je bloque encore. Si je fais le test sur deux tables simples avec deux champ, ça fonctionne, la relation se fait.

    Mais maintenant mon problème, c'est que le champ responsable de la table Tâches fait déjà référence à une autre table. Quoique je me doute que le problème ne viennent pas de là.

    J'arrive à une erreur de syntaxe dans la clause Constraint. Je croyais que je pouvais me passer de la clause Constraint...

    Donc, nonobstant mes posts précédents, est-ce que mon code se tient, quelle pourrait être l'erreur dans la dernière ligne du code? Ou que devrais-je ajouter pour palier à l'erreur?

    Merci

    PS: J'aime le SQL, mais pas sur que le SQL m'aime...

  7. #7
    Membre habitué
    Homme Profil pro
    Apprendre
    Inscrit en
    Avril 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 147
    Points : 175
    Points
    175
    Par défaut
    Bonjour,

    Effectivement Philippe, je ne crois pas que le code initial avait du sens par rapport à ce que je désirais faire au départ. Je lis et relis plusieurs forums, l'aide de Access et essaie de ramener le tout à un code fonctionnel...Avec des résultats parfois encourageants, parfois décourageants

    Merci

  8. #8
    Membre habitué
    Homme Profil pro
    Apprendre
    Inscrit en
    Avril 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 147
    Points : 175
    Points
    175
    Par défaut
    Bonjour,

    Problème résolu, j'avais oublié de créé une clé primaire dans ma nouvelle table.

    Donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim StrTableName As String
       StrTableName = "Tâches" & " " & Me.txt_Projet.Value  'Création variable au nom du projet
       CurrentDb.Execute "SELECT * INTO [" & StrTableName & "] FROM Tâches"  'Sélectionne tous les champs de la table Tâches et les recopie dans la nouvelle
       DoCmd.RunSQL "ALTER TABLE [" & StrTableName & "] ADD PRIMARY KEY(N°);" 'Crée clé primaire dans la nouvelle table
       DoCmd.RunSQL "alter table [" & StrTableName & "] ADD FOREIGN KEY (commentaire) REFERENCES employés (initiales);"  ' Crée clé étrangère, donc, relation avec la table approprié
       DoCmd.RunSQL "DELETE FROM [" & StrTableName & "];" 'Supprime tous les renregistrements de la nouvelle table
       RefreshDatabaseWindow
    Merci

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

Discussions similaires

  1. comment créer une relation entre 2 table?
    Par giguoin dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/04/2010, 14h31
  2. Comment établir une relation entre deux tables
    Par Monta^^ dans le forum Hibernate
    Réponses: 15
    Dernier message: 30/04/2009, 19h54
  3. Comment créer une contrainte entre deux tables ?
    Par Invité dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/04/2009, 16h53
  4. Réponses: 5
    Dernier message: 14/08/2008, 10h13
  5. Supprimer et créer une relation entre deux tables
    Par bassiste dans le forum Administration
    Réponses: 1
    Dernier message: 18/07/2008, 20h20

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