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 :

Afficher le résultat d'une requete même si certains champs vides [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut Afficher le résultat d'une requete même si certains champs vides
    Bonjour, j'affiche dans une zone de liste des éléments extraits de tables.

    Je voudrais savoir comment afficher une ligne de résultat de requete même si un des champs est vide dans la table.

    Merci

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,

    Si je lis bien ta question il suffit de ne rien faire puisqu'une requête affiche aussi les champs vides

    Si c'est un champ vide dans la condition where tu peux utiliser isnull(...) ou nz(tonchamp,ValeurSiNulle)

  3. #3
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Re, je crois que j'ai mal expliqué mon cas.

    J'ai une table intervention qui est composée de plusieurs ID (voir fichier joint)

    Je voudrais afficher dans une zone de liste le résultat suivant:

    Id_Intervention
    DateIntervention
    Identite
    Ligne
    Machine
    Type
    Categorie
    SousEnsemble
    Element
    Descriptif
    Diagnostic

    J'obtiens donc la requete suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT tbl_Intervention.Id_Intervention, tbl_Intervention.DateIntervention, tbl_Personnel.Identite, tbl_Ligne.Ligne, tbl_Machine.Machine, tbl_Type.Type, tbl_Categorie.Categorie, tbl_SousEnsemble.SousEnsemble, tbl_Element.Element, tbl_Intervention.Descriptif, tbl_Diagnostic.Diagnostic
    FROM (((((tbl_Ligne INNER JOIN (((tbl_Intervention INNER JOIN tbl_Intervenir ON tbl_Intervention.Id_Intervention = tbl_Intervenir.Id_Intervention) INNER JOIN tbl_Personnel ON tbl_Intervenir.Id_Personnel = tbl_Personnel.Id_Personnel) INNER JOIN tbl_Machine ON tbl_Intervention.Id_Machine = tbl_Machine.Id_Machine) ON tbl_Ligne.Id_Ligne = tbl_Machine.Id_Ligne) INNER JOIN tbl_Type ON tbl_Intervention.Id_Type = tbl_Type.Id_Type) INNER JOIN tbl_Categorie ON tbl_Intervention.Id_Categorie = tbl_Categorie.Id_Categorie) INNER JOIN tbl_SousEnsemble ON tbl_Intervention.Id_SousEnsemble = tbl_SousEnsemble.Id_SousEnsemble) INNER JOIN tbl_Element ON (tbl_Categorie.Id_Categorie = tbl_Element.Id_Categorie) AND (tbl_Intervention.Id_Element = tbl_Element.Id_Element)) INNER JOIN tbl_Diagnostic ON tbl_Intervention.Id_Diagnostic = tbl_Diagnostic.Id_Diagnostic;
    Le soucis c'est que ma table intervention compte 4309 enregistrements, mais comme certains champs sont vides, quand je lance ma requete, je n'ai plus que 2770 enregistrement.

    J'ai fais un test, si j'arrete ma requete au simple affichage de :

    Id_Intervention
    DateIntervention
    Identite
    Ligne
    Machine
    Type

    J'ai bien comme résultat de requete 4309 enregistrements, car ces champs sont tous complets dans ma table. En revanche si je passe à l'étape d'après, à savoir :

    Id_Intervention
    DateIntervention
    Identite
    Ligne
    Machine
    Type
    Categorie

    J'obtiens 4200 enregistrements avec la requete suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     SELECT tbl_Intervention.Id_Intervention, tbl_Intervention.DateIntervention, tbl_Personnel.Identite, tbl_Ligne.Ligne, tbl_Machine.Machine, tbl_Type.Type, tbl_Categorie.Categorie
    FROM ((tbl_Ligne INNER JOIN (((tbl_Intervention INNER JOIN tbl_Intervenir ON tbl_Intervention.Id_Intervention = tbl_Intervenir.Id_Intervention) INNER JOIN tbl_Personnel ON tbl_Intervenir.Id_Personnel = tbl_Personnel.Id_Personnel) INNER JOIN tbl_Machine ON tbl_Intervention.Id_Machine = tbl_Machine.Id_Machine) ON tbl_Ligne.Id_Ligne = tbl_Machine.Id_Ligne) INNER JOIN tbl_Type ON tbl_Intervention.Id_Type = tbl_Type.Id_Type) INNER JOIN tbl_Categorie ON tbl_Intervention.Id_Categorie = tbl_Categorie.Id_Categorie;
    Ce qui parrait "Logique" car si je vais voir ma table intervention, et que je regarde le nombre de champs vides, j'obtiens : 108 enregistrements filtrés.

    Donc : 4309-108 = 1201 -1 pour le champs 0.

    Mais ce que je veux savoir, c'est comment afficher l'enregistrement même si un des champs de cet enregistrement est vide, et donc ici si la catégorie est vide, je veux que ça m'affiche quand même l'intervention, mais que le champs catégorie reste vide.

    Merci
    Images attachées Images attachées  

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Essaie d'utiliser LEFT JOIN à la place de INNER JOIN ainsi si une table n'est pas complète ses données seront remplacées par des champs vides.

    NB : dans ton cas la table des interventions doit être la première appelée (sinon il faut mélanger right join et left join)

  5. #5
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Re, dans mon cas, la table intervention est bien la première appelée.

    En revanche, si le LEFT JOIN fonctionne, si je m'arrete à la requete suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT tbl_Intervention.Id_Intervention, tbl_Intervention.DateIntervention, tbl_Personnel.Identite, tbl_Type.Type, tbl_Categorie.Categorie
    FROM ((tbl_Ligne INNER JOIN (((tbl_Intervention INNER JOIN tbl_Intervenir ON tbl_Intervention.Id_Intervention = tbl_Intervenir.Id_Intervention) INNER JOIN tbl_Personnel ON tbl_Intervenir.Id_Personnel = tbl_Personnel.Id_Personnel) INNER JOIN tbl_Machine ON tbl_Intervention.Id_Machine = tbl_Machine.Id_Machine) ON tbl_Ligne.Id_Ligne = tbl_Machine.Id_Ligne) LEFT JOIN tbl_Type ON tbl_Intervention.Id_Type = tbl_Type.Id_Type) LEFT JOIN tbl_Categorie ON tbl_Intervention.Id_Categorie = tbl_Categorie.Id_Categorie;
    Avec les tables affichées comme suit : Copie d'écran 1

    En revanche, si j'essaye d'afficher la suite comme je le souhaite, à savoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT tbl_Intervention.Id_Intervention, tbl_Intervention.DateIntervention, tbl_Personnel.Identite, tbl_Type.Type, tbl_Categorie.Categorie, tbl_SousEnsemble.SousEnsemble, tbl_Element.Element, tbl_Intervention.Descriptif, tbl_Diagnostic.Diagnostic
    FROM (((((tbl_Ligne INNER JOIN (((tbl_Intervention INNER JOIN tbl_Intervenir ON tbl_Intervention.Id_Intervention = tbl_Intervenir.Id_Intervention) INNER JOIN tbl_Personnel ON tbl_Intervenir.Id_Personnel = tbl_Personnel.Id_Personnel) INNER JOIN tbl_Machine ON tbl_Intervention.Id_Machine = tbl_Machine.Id_Machine) ON tbl_Ligne.Id_Ligne = tbl_Machine.Id_Ligne) LEFT JOIN tbl_Type ON tbl_Intervention.Id_Type = tbl_Type.Id_Type) LEFT JOIN tbl_Categorie ON tbl_Intervention.Id_Categorie = tbl_Categorie.Id_Categorie) INNER JOIN tbl_SousEnsemble ON tbl_Intervention.Id_SousEnsemble = tbl_SousEnsemble.Id_SousEnsemble) INNER JOIN tbl_Element ON (tbl_Categorie.Id_Categorie = tbl_Element.Id_Categorie) AND (tbl_Intervention.Id_Element = tbl_Element.Id_Element)) INNER JOIN tbl_Diagnostic ON tbl_Intervention.Id_Diagnostic = tbl_Diagnostic.Id_Diagnostic;
    Avec les tables affichées comme suit : Copie d'écran 2

    J'ai le message d'erreur suivant : Voir copie d'écran "Message d'erreur"

    Qu'est ce qui ne lui plait pas?
    Il faut que je mette des LEFT JOIN par tout?
    Images attachées Images attachées    

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Dans ton cas (une table principale et plein de tables annexes) il me semble préférable de mettre LEFT JOIN partout et autant de parenthèses !

    Sur la 3e image il y a plus de tables appelées que de champs et la table principale n'est pas la première. Il faudrait vérifier que tout est nécessaire...

  7. #7
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Re,

    Voila tout ce dont j'ai besoin (voir copie écran)

    Donc au niveau de la requete en brut, cela donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT tbl_Intervention.Id_Intervention, tbl_Intervention.DateIntervention, tbl_Personnel.Identite, tbl_Ligne.Ligne, tbl_Machine.Machine, tbl_Type.Type, tbl_Categorie.Categorie, tbl_SousEnsemble.SousEnsemble, tbl_Element.Element, tbl_Intervention.Descriptif, tbl_Diagnostic.Diagnostic
    FROM (((((tbl_Ligne INNER JOIN (((tbl_Intervention INNER JOIN tbl_Intervenir ON tbl_Intervention.Id_Intervention = tbl_Intervenir.Id_Intervention) INNER JOIN tbl_Personnel ON tbl_Intervenir.Id_Personnel = tbl_Personnel.Id_Personnel) INNER JOIN tbl_Machine ON tbl_Intervention.Id_Machine = tbl_Machine.Id_Machine) ON tbl_Ligne.Id_Ligne = tbl_Machine.Id_Ligne) LEFT JOIN tbl_Type ON tbl_Intervention.Id_Type = tbl_Type.Id_Type) INNER JOIN tbl_Categorie ON tbl_Intervention.Id_Categorie = tbl_Categorie.Id_Categorie) INNER JOIN tbl_SousEnsemble ON tbl_Intervention.Id_SousEnsemble = tbl_SousEnsemble.Id_SousEnsemble) INNER JOIN tbl_Element ON (tbl_Intervention.Id_Element = tbl_Element.Id_Element) AND (tbl_Categorie.Id_Categorie = tbl_Element.Id_Categorie)) INNER JOIN tbl_Diagnostic ON tbl_Intervention.Id_Diagnostic = tbl_Diagnostic.Id_Diagnostic;
    Maintenant, si je remplace tous les INNER JOIN par des LEFT JOIN, j'ai le un message d'erreur comme quoi certaines jointures ne sont pas supportées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT tbl_Intervention.Id_Intervention, tbl_Intervention.DateIntervention, tbl_Personnel.Identite, tbl_Ligne.Ligne, tbl_Machine.Machine, tbl_Type.Type, tbl_Categorie.Categorie, tbl_SousEnsemble.SousEnsemble, tbl_Element.Element, tbl_Intervention.Descriptif, tbl_Diagnostic.Diagnostic
    FROM (((((tbl_Ligne LEFT JOIN (((tbl_Intervention LEFT JOIN tbl_Intervenir ON tbl_Intervention.Id_Intervention = tbl_Intervenir.Id_Intervention) LEFT JOIN tbl_Personnel ON tbl_Intervenir.Id_Personnel = tbl_Personnel.Id_Personnel) LEFT JOIN tbl_Machine ON tbl_Intervention.Id_Machine = tbl_Machine.Id_Machine) ON tbl_Ligne.Id_Ligne = tbl_Machine.Id_Ligne) LEFT JOIN tbl_Type ON tbl_Intervention.Id_Type = tbl_Type.Id_Type) LEFT JOIN tbl_Categorie ON tbl_Intervention.Id_Categorie = tbl_Categorie.Id_Categorie) LEFT JOIN tbl_SousEnsemble ON tbl_Intervention.Id_SousEnsemble = tbl_SousEnsemble.Id_SousEnsemble) LEFT JOIN tbl_Element ON (tbl_Intervention.Id_Element = tbl_Element.Id_Element) AND (tbl_Categorie.Id_Categorie = tbl_Element.Id_Categorie)) LEFT JOIN tbl_Diagnostic ON tbl_Intervention.Id_Diagnostic = tbl_Diagnostic.Id_Diagnostic;
    Il faut que je fasse comment?
    Images attachées Images attachées  

  8. #8
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,

    Ta requête ne respecte pas la hiérarchie des tables :
    - Tbl_intervention doit être la plus à gauche (depuis le début c'est Tbl_ligne !)
    - si une table est au rang 3 (ligne, personnel) elle doit être derrière sa "mère"

    Si tout est dans l'ordre et avec les bonnes parenthèses normalement LEFT JOIN partout doit être OK. Amha il vaut mieux l'écrire en SQL qu'en utilisant l'éditeur

    Une autre solution plus lisible dans ton cas serait d'utiliser des sous-select mais ça risque d'être plus lent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select *
    , (select ligne from Tligne where...)
    , ...
    from intervention
    NB : sur l'image il y a une liaison bizarre entre element & categorie

  9. #9
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Re,

    C'est pas que je ne veux pas, mais je ne sais pas écrire la requete sans l'assistant.

    Moi ce que je t'ai envoyé c'est le résultat de ce que je souhaite voir apparaitre dans l'ordre d'apparition.

    Pourrais-tu me réécrire ma requete tel qu'il faudrait qu'elle soit écrite en respectant la table mère?

    Pour ce qui est de la liaison entre catégorie et élement, je ne sais pas pourquoi elle est là, je vais demander à la personne qui a crée cette liaison.

    Merci

  10. #10
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut c'est mon jour de bonté
    La liaison est là parce que tu l'as mise dans ta requête donc la personne c'est toi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT tbl_Intervention.Id_Intervention, tbl_Intervention.DateIntervention, tbl_Personnel.Identite, tbl_ligne.ligne, tbl_Type.Type, tbl_Categorie.Categorie, tbl_SousEnsemble.SousEnsemble, tbl_Element.Element, tbl_Intervention.Descriptif, tbl_Diagnostic.Diagnostic
    FROM (((((((tbl_Intervention 
    LEFT JOIN (tbl_Intervenir INNER JOIN tbl_Personnel ON tbl_Intervenir.Id_Personnel = tbl_Personnel.Id_Personnel) ON tbl_Intervention.Id_Intervention = tbl_Intervenir.Id_Intervention) 
    LEFT JOIN (tbl_machine INNER JOIN tbl_Ligne on tbl_Ligne.Id_Ligne = tbl_Machine.Id_Ligne) ON tbl_Intervention.Id_Machine = tbl_Machine.Id_Machine)
    LEFT JOIN tbl_Type ON tbl_Intervention.Id_Type = tbl_Type.Id_Type) 
    LEFT JOIN tbl_Categorie ON tbl_Intervention.Id_Categorie = tbl_Categorie.Id_Categorie)
    LEFT JOIN tbl_SousEnsemble ON tbl_Intervention.Id_SousEnsemble = tbl_SousEnsemble.Id_SousEnsemble)
    LEFT JOIN tbl_Element ON tbl_Intervention.Id_Element = tbl_Element.Id_Element)
    LEFT JOIN tbl_Diagnostic ON tbl_Intervention.Id_Diagnostic = tbl_Diagnostic.Id_Diagnostic)

  11. #11
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Re,

    Sa me met : Expression de jointure non supportée.

  12. #12
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    C'est probablement à cause des 2 cascades

    Tu peux essayer soit en rempaçant les 2 INNER par des LEFT, soit en rempaçant les 2 premiers LEFT par des INNER, soit la version "multi-select" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT tbl_Intervention.Id_Intervention, tbl_Intervention.DateIntervention
    , (select tbl_Personnel.Identite from tbl_Intervenir INNER JOIN tbl_Personnel ON tbl_Intervenir.Id_Personnel = tbl_Personnel.Id_Personnel where tbl_Intervention.Id_Intervention = tbl_Intervenir.Id_Intervention) 
    , (select tbl_ligne.ligne from tbl_machine INNER JOIN tbl_Ligne on tbl_Ligne.Id_Ligne = tbl_Machine.Id_Ligne where tbl_Intervention.Id_Machine = tbl_Machine.Id_Machine)
    , (select tbl_Type.Type from tbl_Type where tbl_Intervention.Id_Type = tbl_Type.Id_Type) 
    , (select tbl_Categorie.Categorie from tbl_Categorie where tbl_Intervention.Id_Categorie = tbl_Categorie.Id_Categorie)
    , (select tbl_SousEnsemble.SousEnsemble from tbl_SousEnsemble where tbl_Intervention.Id_SousEnsemble = tbl_SousEnsemble.Id_SousEnsemble)
    , (select tbl_Element.Element from tbl_Element where tbl_Intervention.Id_Element = tbl_Element.Id_Element)
    , tbl_Intervention.Descriptif 
    , (select tbl_Diagnostic.Diagnostic from tbl_Diagnostic where tbl_Intervention.Id_Diagnostic = tbl_Diagnostic.Id_Diagnostic)
    FROM tbl_Intervention

  13. #13
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Re,

    Cette requete là fonctionne (j'y ai ajouté 2 champs).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT tbl_Intervention.Id_Intervention, tbl_Intervention.DateIntervention, (select tbl_Personnel.Identite from tbl_Intervenir INNER JOIN tbl_Personnel ON tbl_Intervenir.Id_Personnel = tbl_Personnel.Id_Personnel where tbl_Intervention.Id_Intervention = tbl_Intervenir.Id_Intervention) AS Expr1, (select  tbl_ligne.ligne from tbl_machine INNER JOIN tbl_Ligne on tbl_Ligne.Id_Ligne = tbl_Machine.Id_Ligne where tbl_Intervention.Id_Machine = tbl_Machine.Id_Machine) AS Expr2, (select  tbl_Type.Type from tbl_Type where tbl_Intervention.Id_Type = tbl_Type.Id_Type) AS Expr3, (select  tbl_Categorie.Categorie from tbl_Categorie where tbl_Intervention.Id_Categorie = tbl_Categorie.Id_Categorie) AS Expr4, (select  tbl_SousEnsemble.SousEnsemble from tbl_SousEnsemble where tbl_Intervention.Id_SousEnsemble = tbl_SousEnsemble.Id_SousEnsemble) AS Expr5, (select  tbl_Element.Element from tbl_Element where tbl_Intervention.Id_Element = tbl_Element.Id_Element) AS Expr6, tbl_Intervention.Descriptif, (select  tbl_Diagnostic.Diagnostic from tbl_Diagnostic where tbl_Intervention.Id_Diagnostic = tbl_Diagnostic.Id_Diagnostic) AS Expr7, tbl_DureeIntervention.DureeIntervention, tbl_DureeArret.DureeArret
    FROM tbl_DureeIntervention INNER JOIN (tbl_DureeArret INNER JOIN tbl_Intervention ON tbl_DureeArret.Id_DureeArret = tbl_Intervention.DureeArretMachine) ON tbl_DureeIntervention.Id_DureeIntervention = tbl_Intervention.DureeIntervention;
    Par contre comment je peux faire pour l'incorporer au niveau de mon RefreshQuery car elle est trop longue?

  14. #14
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Euh ça veut dire quoi elle est trop longue ???

    Amha c'aurait été plus homogène de rajouter les 2 champs sur le même principe des requêtes spécifiques mais bon s'il y a toujours une durée d'intervention et une durée d'arrêt pourquoi pas...

  15. #15
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Ah ba oui c'est sur, on peux le mettre sur le même principe que précédement,

    Quand je dit qu'elle est trop lo,gue, je veux dire par là que comme je passe par du code vba, la longeur de la ligne de requete est supérieur à ce qui est admis par vba, il faut donc je j'éclate la requete sur plusieur ligne pour la reconstituer ensuite.

    Auparavant, je faisait:

    sqlselect="Select....."
    sqlFrom= " Fom...."

    sql= sqlselect + sqlfrom

  16. #16
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut Dernière proposition
    Tu peux réserver les sous-requêtes aux 2 cas tordus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT tbl_Intervention.Id_Intervention, tbl_Intervention.DateIntervention
    , (select tbl_Personnel.Identite from tbl_Intervenir INNER JOIN tbl_Personnel ON tbl_Intervenir.Id_Personnel = tbl_Personnel.Id_Personnel where tbl_Intervention.Id_Intervention = tbl_Intervenir.Id_Intervention) 
    , (select  tbl_ligne.ligne from tbl_machine INNER JOIN tbl_Ligne on tbl_Ligne.Id_Ligne = tbl_Machine.Id_Ligne where tbl_Intervention.Id_Machine = tbl_Machine.Id_Machine)
    , tbl_Type.Type, tbl_Categorie.Categorie, tbl_SousEnsemble.SousEnsemble, tbl_Element.Element, tbl_Intervention.Descriptif, tbl_Diagnostic.Diagnostic
    FROM (((((tbl_Intervention 
    LEFT JOIN tbl_Type ON tbl_Intervention.Id_Type = tbl_Type.Id_Type) 
    LEFT JOIN tbl_Categorie ON tbl_Intervention.Id_Categorie = tbl_Categorie.Id_Categorie)
    LEFT JOIN tbl_SousEnsemble ON tbl_Intervention.Id_SousEnsemble = tbl_SousEnsemble.Id_SousEnsemble)
    LEFT JOIN tbl_Element ON tbl_Intervention.Id_Element = tbl_Element.Id_Element)
    LEFT JOIN tbl_Diagnostic ON tbl_Intervention.Id_Diagnostic = tbl_Diagnostic.Id_Diagnostic)

  17. #17
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Re,

    Bon voila, j'ai incorporé la requete que tu m'as envoyé dans mon refreshQuery, j'obtient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sqlSelect = "SELECT tbl_Intervention.Id_Intervention, tbl_Intervention.DateIntervention, (select tbl_Personnel.Identite from tbl_Intervenir INNER JOIN tbl_Personnel ON tbl_Intervenir.Id_Personnel = tbl_Personnel.Id_Personnel where tbl_Intervention.Id_Intervention = tbl_Intervenir.Id_Intervention), (select  tbl_ligne.ligne from tbl_machine INNER JOIN tbl_Ligne on tbl_Ligne.Id_Ligne = tbl_Machine.Id_Ligne where tbl_Intervention.Id_Machine = tbl_Machine.Id_Machine), tbl_Type.Type, tbl_Categorie.Categorie, tbl_SousEnsemble.SousEnsemble, tbl_Element.Element, tbl_Intervention.Descriptif, tbl_Diagnostic.Diagnostic"
    sqlFrom = " FROM (((((tbl_Intervention LEFT JOIN tbl_Type ON tbl_Intervention.Id_Type = tbl_Type.Id_Type)LEFT JOIN tbl_Categorie ON tbl_Intervention.Id_Categorie = tbl_Categorie.Id_Categorie)LEFT JOIN tbl_SousEnsemble ON tbl_Intervention.Id_SousEnsemble = tbl_SousEnsemble.Id_SousEnsemble)LEFT JOIN tbl_Element ON tbl_Intervention.Id_Element = tbl_Element.Id_Element)LEFT JOIN tbl_Diagnostic ON tbl_Intervention.Id_Diagnostic = tbl_Diagnostic.Id_Diagnostic)"
    sql = sqlSelect + sqlFrom
    Par contre, au moment du lancement, j'ai une petite fenetre qui m'intérroge sur "tbl_Personnel.Identite".

    Voir pièce jointe.

    Sais tu d'où cela peut venir?
    Pour ce qui est de la durée d'intervention et d'arrêt machine, je les incorpore comment dans le sql?

    On va y arriver

    Non mais en tout cas merci parce que ça fait un moment que j'essaye de remplir cette zone de liste et ça me posait beaucoup problème pour la suite de mon projet.
    Images attachées Images attachées  

  18. #18
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Re,

    J'ai résolu mon problème de fenetre qui s'affichait.

    En revanche, pour les Temps d'Intervention et pour les durées d'arrêt de production, j'ai un souci.


    En effet, ce qu'il faut savoir, c'est que ma base est explosée, c'est à dire que l'IHM est sur mon bureau, et les tables sur le serveur.

    Si je vais voir les liaisons entre mes tables sur le serveur, j'obtient la copie d'écran1

    Maintenant si je me met dans mon IHM en mode requete, que j'affiche les tables liées à ma table intervention, les tables duréeIntervention et duréeArrêt ne sont pas liées.

    Je peux les lier manuellement, mais je ne récupere que les ID de la table intervention et non pas les vrais durées.

    Comment cela est-il possible?

    Merci
    Images attachées Images attachées  

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

Discussions similaires

  1. afficher le résultat d'une requete dans le DBGrid
    Par rommel7 dans le forum Bases de données
    Réponses: 6
    Dernier message: 26/04/2007, 19h07
  2. [SQL] Afficher le résultat d'une requete en Image ?
    Par cedinfo dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 28/09/2006, 14h28
  3. afficher le résultat d'une requete dans une datagrid
    Par awatif dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/09/2006, 14h57
  4. Réponses: 3
    Dernier message: 25/11/2005, 14h51
  5. [QReport] Afficher le résultat d'une requete
    Par PFX dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/05/2005, 14h38

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