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 :

problèmes requête sql, dont lien avec la valeur d'un textbox


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut [A-03] Problème requête sql, dont lien avec la valeur d'un textbox
    Bonjour,

    J'espère trouver de l'aide ici car mon projet est important et étant débutant je nage complètement entre les relations de tables, les requêtes sql et le code vba...

    Voici mes tables :



    Et les relations :


    Table_Dossier( ID_Dossier, Libellé_Dossier, Etat_Dossier, Ref_Client)
    Table_Tâche( ID_Tâche, Libellé_Tâche, Etat_Tâche, Ref_Dossier)
    Table_Client(ID_Client, Nom, prenom...)
    Table_Technicien(ID_Technicien, Nom_Technicien, Mail_Technicien)
    Table_Jointure(ID_Dossier, ID_Tâche, ID_Technicien, Date_Début, Date_fin)


    J'essaie de créer dans un formulaire un tableau à 5 colonnes, comportant le Numéro d'une tâche, l'Etat de la tâche, le Nom du technicien, la Date de début et la Date de fin.
    Ces données doivent correspondre à un numéro de dossier inscrit dans une textbox sur le même formulaire, mais je ne sais même pas si mes relations entre les tables sont exactes.

    Pour en venir au code sql :

    J'ai créé une zone de liste appelé ZdL.
    Voici mon code qui ne fonctionne pas, en effet je n'ai pas de message d'erreur mais rien ne s'affiche dans la zone de liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ZdL.ColumnCount = 5
    ZdL.ColumnHeads = True
    ZdL.RowSourceType = "Table/Query"
    ZdL.RowSource = "SELECT ID_Tâche as [Numéro], Etat_Tâche as [Etat], Nom_Technicien as [Technicien], Date_Début as [Date Début], Date_Fin as [Date Fin]" & "FROM Table_Technicien TT, Table_Jointure TJ, Table_Tâche TTA, Table_Dossier TD" & "WHERE TT.ID_Technicien = TJ.NumTechnicien" & "AND TTA.ID_Tâche = TJ.NumTâche" & "AND TD.ID_Dossier = TJ.NumDossier" & "AND TD.ID_Dossier= Forms!(Form_Dossier)!(ID_Dossier).Value;"
    Je suis conscient que la condition
    WHERE ID.ID_Dossier=Forms!(Form_Dossier)!(ID_Dossier).Value doit être une grosse erreur, cependant je n'ai rien trouvé d'autre pour faire le lien avec le textbox "ID_Dossier".

    De plus même sans cette dernière condition la requête SQL n'affiche toujours rien dans la zone de liste.

    Merci à tout ceux qui prendront un peu de leur temps.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    L'utilisation de form!(form_dossier)!(ID_dossier) n'est en effet pas correct

    il faut faire plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    'si tu sépare ta chaine en plusieurs avec des &, n'oublie un espace avant de fermer ta chaine ou apres l'avoir ouverte : 
    '"Select ID_Tâche as [Numéro]" &" FROM" au lieu de "Select ID_Tâche as [Numéro]" &"FROM" par exemple
     
    'requête correcte
    ZdL.RowSource = "SELECT ID_Tâche as [Numéro], Etat_Tâche as [Etat], " _
    &"Nom_Technicien as [Technicien], Date_Début as [Date Début], " _
    &"Date_Fin as [Date Fin] " _
    &"FROM Table_Technicien TT, Table_Jointure TJ, Table_Tâche TTA, " _
    &"Table_Dossier TD WHERE TT.ID_Technicien = TJ.NumTechnicien " _
    &"AND TTA.ID_Tâche = TJ.NumTâche AND TD.ID_Dossier = TJ.NumDossier " _
    &"AND TD.ID_Dossier= " &me.ID_Dossier &";"
    'ou si id_dossier est du texte et pas du numérique : 
    &"AND TD.ID_Dossier= '" &me.ID_Dossier &"';"
    en effet, l'appel à une zone de texte présente sur le même formulaire que ta zone de liste se fait en utilisant Me.tazonedeTexte
    et il faut que cet appel soit fait en dehors des guillemets sinon il peut pas deviner que ça référence la zone de texte de ton formulaire

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    Vérifies aussi la longueur des colonnes de ta zone de listes
    dans les propriétés de ta zone de liste, onglet Format, propriétés largeur colonnes. Sépare les valeurs par des virgules :

    0cm;2,5cm;1cm;1cm;1cm par exemple pour masquer la première colonne (colonne Numéro d'après ta requête) et afficher les 4 autres

  4. #4
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Merci beaucoup pour la syntaxe, j'ai maintenant les titres qui s'affichent dans la zone de liste, mais pour le reste je n'ai toujours rien. Le problème doit venir des relations des tables mais je ne vois pas l'erreur.

    Je n'ai pas le problème de la largeur des colonnes mais merci quant même.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    Si tu as uniquement les titres qui s'affichent, cela veut dire que ta requête ne renvoie aucune donnée...

    Si dans le textbox id_dossier, l'utilisateur saisi un nom de dossier, il te faut plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...
    &"AND TD.LIbellé_Dossier= '" &me.ID_Dossier &"';"

  6. #6
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Je pense que c'est un problème de relation entre les tables, j'essaie en ce moment d'être certain que ma conception de la base de donnée soit ok.

    Dans la textbox id_dossier c'est un numéro, c'est la clé primaire du dossier qui est incrémenté automatiquement à chaque nouveau formulaire (un nouveau dossier). Il me faut faire entre sorte d'avoir donc un tableaux de tâche qui affichera les tâches créées correspondant au numéro de dossier.

  7. #7
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Bonjour, j'ai toujours pas résolu le problème de ma zone de liste , voici une requête insérée dans la zone de liste qui marche, cependant elle n'est pas "filtrée", j'obtiens toute les tâches alors que j'aimerais obtenir seulement les tâches correspondantes à un Numéro de dossier contenu dans le textbox ID_Dossier.

    Voici le code sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT Table_Dossier.ID_Dossier, Table_Tâche.ID_Tâche, Table_Tâche.Libelle_Tâche, Table_Tâche.Etat_Tâche, Table_Tâche.Date_Début, Table_Tâche.Date_Fin, Table_Technicien.Nom_Technicien
    FROM Table_Technicien INNER JOIN (Table_Dossier INNER JOIN Table_Tâche ON Table_Dossier.ID_Dossier = Table_Tâche.Ref_Dossier) ON Table_Technicien.ID_Technicien = Table_Tâche.Ref_Technicien;
    Quant j'essaie de rajouter la condition WHERE suivante plus rien ne marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Table_Dossier.ID_Dossier='" &me.ID_Dossier & "'
    Il est écrit type de donnée incompatible dans l'expression du critère
    J'ai supposé donc que l'on ne peut pas mettre un where avec un inner join ?
    Sinon comment pourrais je ajouter ma condition where ?
    J'ai essayé de virer le inner join et de mettre seulement le where mais des msgbox s'ouvrent me demandant de rentrer en paramètre l'id_tache, le libelle_tache, l'état_tache...


    P.S :
    Sinon j'ai pu observer un petit problème mais qui m'importe pas beaucoup par rapport au problème du dessus, c'est que si un des critères est vide la tâche ne s'affiche pas, (par exemple si dans ma table Tâche une occurence est vide dans le champ état, elle ne va pas s'afficher dans ma zone de list) il n'y a pas moyen de faire un afficher Table_Tâche.Libellé_Tâche, Table_Tâche.Etat_Tâche, et que si il n'y a pas d'Etat le libellé tache soit quant même affiché ?

    Merci.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    si dans ta table table_dossier, id_dossier est de type numérique, il te faut enlever les simples cotes dans ta requêtes where :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Table_Dossier.ID_Dossier, Table_Tâche.ID_Tâche, Table_Tâche.Libelle_Tâche, Table_Tâche.Etat_Tâche, Table_Tâche.Date_Début, Table_Tâche.Date_Fin, Table_Technicien.Nom_Technicien
    FROM Table_Technicien INNER JOIN (Table_Dossier INNER JOIN Table_Tâche ON Table_Dossier.ID_Dossier = Table_Tâche.Ref_Dossier) ON Table_Technicien.ID_Technicien = Table_Tâche.Ref_Technicien
    WHERE ID_Dossier=" &me.id_dossier

    L'erreur incompatibilité veut dire soit que tu essaie de faire une jointure entre deux champs de type différents, soit dans ta clause where que ton champ id_dossier n'est pas de type texte par conséquence, tu n'as pas besoin des simples cotes

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    pour voir afficher une colonne quand les autres sont vides, il te faut utiliser les jointures gauches ou droites.

    http://sqlpro.developpez.com/cours/sqlaz/jointures/

  10. #10
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Merci pour ton aide, j'ai trouvé la solution ce matin, comme tu dis les simples quotes provoquaient l'erreur, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT Table_Dossier.ID_Dossier, Table_Tâche.ID_Tâche, Table_Tâche.Libelle_Tâche, Table_Tâche.Etat_Tâche, Table_Tâche.Date_Début, Table_Tâche.Date_Fin, Table_Technicien.Nom_Technicien FROM Table_Technicien, Table_Dossier, Table_Tâche WHERE Table_Tâche.Ref_Dossier = Table_Dossier.Id_Dossier AND Table_Tâche.Ref_Technicien = Table_Technicien.ID_Technicien AND Table_Dossier.ID_Dossier = " & Me.ID_Dossier & ";
    Merci de ton renseignement pour les jointures gauches droites, je viens d'aller voir. Mais je dois être à côté de la plaque car ça ne fonctionne pas en effet plus rien ne s'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Table_Dossier.ID_Dossier, Table_Tâche.ID_Tâche, Table_Tâche.Libelle_Tâche, Table_Tâche.Etat_Tâche, Table_Tâche.Date_Début, Table_Tâche.Date_Fin, Table_Technicien.Nom_Technicien FROM Table_Technicien LEFT OUTER JOIN (Table_Dossier LEFT OUTER JOIN Table_Tâche ON Table_Dossier.ID_Dossier = Table_Tâche.Ref_Dossier) ON Table_Technicien.ID_Technicien = Table_Tâche.Ref_Technicien AND Table_Tâche.Ref_Technicien IS NULL WHERE Table_Dossier.ID_Dossier = " & Me.ID_Dossier & " ;

Discussions similaires

  1. Problème requête SQL avec jointure
    Par dorianb dans le forum Langage SQL
    Réponses: 8
    Dernier message: 12/05/2014, 12h13
  2. [Débutant] Problème requête SQL avec VS2010 premium et wamp
    Par manon.net dans le forum C#
    Réponses: 1
    Dernier message: 25/01/2013, 16h28
  3. Réponses: 4
    Dernier message: 11/01/2011, 17h29
  4. [MySQL] Balise HTML <a href=".. avec requête SQL en lien ?
    Par mauriiice dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/05/2009, 17h17
  5. [SQL] Problème requête sql,rajouter une valeur,checbox
    Par snakejl dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 23/06/2006, 12h18

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