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

Bases de données Delphi Discussion :

[SQL] Faire un Distinct en incluant un champ de type Memo


Sujet :

Bases de données Delphi

  1. #1
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut [SQL] Faire un Distinct en incluant un champ de type Memo
    Salut à tous
    Je suis en train de développer un outil de recherche sur une BDD de mon bureau. C'est une BDD Access et j'utilise les compos ADO de la VCL.

    Seulement j'ai un petit souci: je voudrais utiliser le mot-clé DISTINCT pour SELECT mais j'ai malheureusement un champ de type Memo dans les résultats de ma requête (cette requête rassemble plusieurs tables suivant des critères). Du coup, j'ai un joli message qui me dit que DISTINCT ne peut pas être utilisé avec des objets OLE et des champs de type Memo.
    Plein de dépsespoir, je vais voir dans access, je reproduis ma requête et j'ajoute un DISTINCT. Et là, ça marche

    D'où ma question: comment faire un DISTINCT dans une requête qui fait apparaitre un champ de type Memo?
    Merci d'avance
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  2. #2
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Salut pedro,

    j'ai vu une bidouille une fois qui consistait à tronquer le mémo en plusieurs string de moins de 255 caractères puis à le reconstituer après.

    C'est pas génial, mais ça peut être une piste.

  3. #3
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut Franck
    J'ai fait une bidouille de mon coté et c'est (horriblement) long... Est-ce que tu peux m'en dire plus sur la tienne?
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  4. #4
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Citation Envoyé par Pedro
    Salut Franck
    J'ai fait une bidouille de mon coté et c'est (horriblement) long... Est-ce que tu peux m'en dire plus sur la tienne?
    Hola, ce n'est pas la mienne.

    Je me rappelle avoir vu passer un post sur le forum Access il y a bien longtemps et une amorce de solution (celle que je t'ai donné) etait fournie par... MicroSoft !

    Par contre je n'ai plus le lien vers la page en question, désolé.

  5. #5
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Bon j'ai fais une petite recherche chez MicroSoft, et voilà ce que ça donne.

    En espérant que tu y trouves ton bonheur.

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Merci pour le lien Franck mais visiblement, ça reste problématique Je vais essayer en utilisant GROUP BY bien que je n'y arrive pas pour l'instant...
    Je laisse le thread ouvert au cas où quelqu'un aurait une solution
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Je viens de faire un test avec un champ mémo dans la requete distinct et ca fonctionne parfaitement.
    C'est avec les champs Ole que tu ne peux pas le faire.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Malatar
    Je viens de faire un test avec un champ mémo dans la requete distinct et ca fonctionne parfaitement.
    C'est avec les champs Ole que tu ne peux pas le faire.
    Ah Avec les composants ADO???
    Alors c'est moi qui m'y prends comme un pieds
    Pour info, voici, dans toute sa splendeur , ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    with ResultQuery do //ResultQuery: TADOQuery.
    begin
        SQl.Add('SELECT DISTINCT DOSSIER.Numerodossier, PROJETS.RefProjet, '
               +'CLIENT.NomSociete, CLIENT.NomClient, CLIENT.PrenomClient, '
               +'PROJETS.DateDebutProjet, DOSSIER.Numero_rue, DOSSIER.Nom_rue, '
               +'DOSSIER.Commune, PROJETS.Facturation, PROJETS.DescriptionProjet');
        SQL.Add('FROM (DOSSIER INNER JOIN (CLIENT INNER JOIN PROJETS '
               +'ON CLIENT.RefClient = PROJETS.RefClient) '
               +'ON DOSSIER.RefDossier = PROJETS.RefDossier) '
               +'INNER JOIN (EMPLOYES INNER JOIN TACHES_PAR_PROJET '
               +'ON EMPLOYES.RefEmploye = TACHES_PAR_PROJET.RefEmploye) '
               +'ON PROJETS.RefProjet = TACHES_PAR_PROJET.RefProjet');
        SQL.Add('WHERE EMPLOYES.NomFamille='+QuotedStr(Value));
        Open;
    end;
    Ici, le champs en question est PROJETS.DescriptionProjet. J'ai droit à un erreur:
    EOleException: Can't include Memo or OLE object when you select unique values (PROJETS.DescriptionProjet)
    Et d'après le lien que m'a donné Franck, la fonction DISTINCT ne marche pas avec des objets OLE ou des Memo (il ne sait pas les comparer )... Le plus incroyable, c'est que Access, lui y arrive très bien
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  9. #9
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        SQl.Add('SELECT DISTINCT D.Numerodossier, P.RefProjet, '
               +'C.NomSociete, C.NomClient, C.PrenomClient, '
               +'P.DateDebutProjet, D.Numero_rue, D.Nom_rue, '
               +'D.Commune, P.Facturation, P.DescriptionProjet');
        SQL.Add('FROM (DOSSIER as d INNER JOIN (CLIENT as c INNER JOIN PROJETS as P'
               +'ON C.RefClient = P.RefClient) '
               +'ON D.RefDossier = P.RefDossier) '
               +'INNER JOIN (EMPLOYES as e INNER JOIN TACHES_PAR_PROJET as tpp '
               +'ON E.RefEmploye = TPP.RefEmploye) '
               +'ON P.RefProjet = TPP.RefProjet');
        SQL.Add('WHERE E.NomFamille='+QuotedStr(Value));
        Open;
    Version reduite de ton ecriture (utilise les alias ça aide pour la lecture d'une requete)

    Question que je me pose, est ce que tu peux avoir plusieurs RefProjet identique pour un RefDossier ?
    Si non, le Distinct ne sert a rien vu que tu affiches dans ta requete le RefProjet.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  10. #10
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Merci pour la simplification

    Citation Envoyé par Malatar
    Question que je me pose, est ce que tu peux avoir plusieurs RefProjet identique pour un RefDossier ?
    Si non, le Distinct ne sert a rien vu que tu affiches dans ta requete le RefProjet.
    Alors je pense qu'une petite explication de la structure de la base s'impose
    Table PROJETS:
    RefProjet : numéro clé auto-incrémenté
    DescriptionProjet: Le Memo qui me pose problème actuellement
    RefDossier: Lien vers une entrée de DOSSIER
    RefClient: Lien vers une entrée de CLIENT
    Table DOSSIER:
    NumeroDossier: Numéro du dossier
    RefDossier: Numéro clé auto incrémenté
    Commune, Rue, etc.

    Un dossier peut contenir plusieurs projets

    Table CLIENT :
    RefClient: Numéro clé auto incrémenté
    Nom, Prenom, etc.
    TACHES_PAR_PROJET
    RefProjet:Lien vers une entrée de PROJETS
    RefEmploye: Lien vers une entrée de la base contenant la liste des employés
    Note sur cette table: elle contient les heures travaillées sur chaque projet.

    Voila le but de ma requête est de récupérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    D.Numerodossier, P.RefProjet, '
    +'C.NomSociete, C.NomClient, C.PrenomClient, '
    +'P.DateDebutProjet, D.Numero_rue, D.Nom_rue, '
    +'D.Commune, P.Facturation, P.DescriptionProjet
    Pour un employé donné...
    Sachant que la table TACHES_PAR_PROJET aligne une par une les plages horaires sur lesquelles on a bossé sur le projet, je voudrais les distinguer...
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  11. #11
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    En fait ta requete peut dependre de comment tu autorises l'insertion des données dans la base.

    Regarde les cas possibles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
     
    NumeroDossier | RefProjet | NomClient | Possible
    _________________________________________________
    1             | 1         | 1         | Oui
    1             | 1         | 2         | ??? // à toi de répondre ^^
    1             | 2         | 1         | ??? // idem
    1             | 2         | 2         | ??? // idem
    2             | 1         | 1         | ??? // idem
    2             | 1         | 2         | ??? // idem
    2             | 2         | 1         | ??? // idem
    2             | 2         | 2         | ??? // idem
    Après avoir rempli ce petit tableau, tu pourras en deduire si le Distinct est vraiment nécessaire. Si je n'ai aps mis l'employé c'est que c'est voulut, vu que c'est une donnée qui filtre.

    Pour ma part je pense que logiquement, tu peux avoir :

    1 dossier -> x Projets
    1 projet -> x Employé qui travail dessus
    1 projet -> x Client (je trouve un peu bizarre pour cela, moi je mettrais plutot le client associé à un dossier)

    Mais tu ne peux pas avoir :

    1 projet -> x Dossiers (en clair ca veut dire qu'un projet peut être sur plusieurs dossiers en même temps )

    Répond surtout au tableau le reste c'est juste du détail pour le moment :p
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  12. #12
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Non en fait un projet correspond à un dossier et à un seul client...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    NumeroDossier | RefProjet | NomClient | Possible
    _________________________________________________
    1             | 1         | 1         | Oui
    1             | 1         | 2         | Non
    1             | 2         | 1         | Oui
    1             | 2         | 2         | Non
    2             | 1         | 1         | Non (Un Dossier ne peut pas pointer vers un projet déjà référencé par un Dossier
    2             | 3         | 1         | Oui
    2             | 4         | 1         | Oui
    2             | 4         | 2         | Non
    Pour plus d'infos, voici la structure de cette base entre ces tables:
    http://img111.imageshack.us/img111/7...ructure0yb.jpg
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  13. #13
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    AAHHHHHH des accents dans les nom des champs

    En général faut éviter les accents et tous caractères autres que les chiffres, les lettres et le _ . (enfin bon pas grave si ca reste que sous Access)

    Donc au vu de ta réponse, pas besoin du distinct ^^.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  14. #14
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Malatar
    AAHHHHHH des accents dans les nom des champs

    j'ai oublié de dire: Je suis en train de renommer tous les champs où mon cher patron m'a mis des accents
    Citation Envoyé par Malatar
    Donc au vu de ta réponse, pas besoin du distinct ^^.
    Ben si pourtant... Le problème est qu'il peut y avoir plusieurs références à un projet dans la table TACHES_PAR_PROJET: Exemple:
    On travaille 4 heures sur le projet 271 puis 2 heures le lendemain... On aura 2 entrée dans TACHES_PAR_PROJET avec
    271edro: Date: 4 heures
    271edroate+1: 2 heures
    Si je fais la requête telle quelle, il me sort toute la liste y compris les doublons des projets... D'où le distinct
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  15. #15
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Hum ... oui, passe par un group by alors ca sera plus simple.

    Sinon autre possibilité pour utlilser le distinct :

    - Tu ne mets pas le champs memo dans la requete.

    Je suppose que tu affiches tes données dans une dbgrid

    - Sur le onclick de la dbgrid, tu fais une 2em requete qui va chercher ton champ memo et tu l'affiches dans un DbMemo.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  16. #16
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Malatar
    Hum ... oui, passe par un group by alors ca sera plus simple.
    Hélàs, je n'en suis qu'à mes balbutiements dans le domaine de la BDD... Je ne maîtrise pas encore bien ce GROUP BY (messages d'erreur )
    Citation Envoyé par Malatar
    Je suppose que tu affiches tes données dans une dbgrid
    Non je fais ça uniquement pour contrôler mes résultats. Sinn, les résultats s'affichent dans un TListView
    Citation Envoyé par Malatar
    - Sur le onclick de la dbgrid, tu fais une 2em requete qui va chercher ton champ memo et tu l'affiches dans un DbMemo.
    2 choses:
    - Je n'utilise pas de TDBGrid
    - C'est la fameuse bidouille que je fais. Le seul problème est que, comme pour l'instant, je ne sais pas récupérer les résultats d'une requête en SQL, je le fasi avec Delphi... Et c'est (vraiment trop) long...
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  17. #17
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
       SQl.Add('SELECT DISTINCT D.Numerodossier, P.RefProjet, '
               +'C.NomSociete, C.NomClient, C.PrenomClient, '
               +'P.DateDebutProjet, D.Numero_rue, D.Nom_rue, '
               +'D.Commune, P.Facturation, P.DescriptionProjet');
        SQL.Add('FROM (DOSSIER as d INNER JOIN (CLIENT as c INNER JOIN PROJETS as P'
               +'ON C.RefClient = P.RefClient) '
               +'ON D.RefDossier = P.RefDossier) '
               +'INNER JOIN (EMPLOYES as e INNER JOIN TACHES_PAR_PROJET as tpp '
               +'ON E.RefEmploye = TPP.RefEmploye) '
               +'ON P.RefProjet = TPP.RefProjet');
        SQL.Add('WHERE E.NomFamille='+QuotedStr(Value));
     
        SQL.Add('Group By D.Numerodossier, P.RefProjet, '
               +'C.NomSociete, C.NomClient, C.PrenomClient, '
               +'P.DateDebutProjet, D.Numero_rue, D.Nom_rue, '
               +'D.Commune, P.Facturation, P.DescriptionProjet');
        Open;
    Rien de bien compliquer pour le group by ^^

    Le seul problème est que, comme pour l'instant, je ne sais pas récupérer les résultats d'une requête en SQL, je le fasi avec Delphi... Et c'est (vraiment trop) long... Confused
    Je comprend pas ton problème, la récupération de résultat avec un TxxxQuery se fait de la même manière qu'un TxxxTable/TxxxDataset.
    Les next,first,locate,etc ... fonctionnent de la même façon.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  18. #18
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Malatar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
       SQl.Add('SELECT DISTINCT D.Numerodossier, P.RefProjet, '
               +'C.NomSociete, C.NomClient, C.PrenomClient, '
               +'P.DateDebutProjet, D.Numero_rue, D.Nom_rue, '
               +'D.Commune, P.Facturation, P.DescriptionProjet');
        SQL.Add('FROM (DOSSIER as d INNER JOIN (CLIENT as c INNER JOIN PROJETS as P'
               +'ON C.RefClient = P.RefClient) '
               +'ON D.RefDossier = P.RefDossier) '
               +'INNER JOIN (EMPLOYES as e INNER JOIN TACHES_PAR_PROJET as tpp '
               +'ON E.RefEmploye = TPP.RefEmploye) '
               +'ON P.RefProjet = TPP.RefProjet');
        SQL.Add('WHERE E.NomFamille='+QuotedStr(Value));
     
        SQL.Add('Group By D.Numerodossier, P.RefProjet, '
               +'C.NomSociete, C.NomClient, C.PrenomClient, '
               +'P.DateDebutProjet, D.Numero_rue, D.Nom_rue, '
               +'D.Commune, P.Facturation, P.DescriptionProjet');
        Open;
    Rien de bien compliquer pour le group by ^^
    Oui c'est clair que vu comme ça, c'est pas très compliqué Suffit de mettre tous les champs affichés dans le GROUP BY en fait De cette façon, ça se comporte exactement comme un distinct en fait?
    Merci Malatar
    Citation Envoyé par Malatar
    Le seul problème est que, comme pour l'instant, je ne sais pas récupérer les résultats d'une requête en SQL, je le fasi avec Delphi... Et c'est (vraiment trop) long... Confused
    Je comprend pas ton problème, la récupération de résultat avec un TxxxQuery se fait de la même manière qu'un TxxxTable/TxxxDataset.
    Les next,first,locate,etc ... fonctionnent de la même façon.
    Oui c'est ce que je fais: Je parcours chaque ligne des résultats sans le champ Memo puis je récupère (avec Delphi donc) le RefProjet, puis je fais une requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DescriptionProjet
    FROM PROJETS
    WHERE RefProjet=[LeProjetRecupereAvant]
    Mais c'est vraiment long comme processus Ce que j'aurais voulu, c'est faire la même chose mais en SQL... Mais ça ne semble pas être une bonne idée
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  19. #19
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Pedro
    Oui c'est clair que vu comme ça, c'est pas très compliqué Suffit de mettre tous les champs affichés dans le GROUP BY en fait De cette façon, ça se comporte exactement comme un distinct en fait?
    Oui, ca fait la même chose, dans ton cas.


    Oui c'est ce que je fais: Je parcours chaque ligne des résultats sans le champ Memo puis je récupère (avec Delphi donc) le RefProjet, puis je fais une requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DescriptionProjet
    FROM PROJETS
    WHERE RefProjet=[LeProjetRecupereAvant]
    Mais c'est vraiment long comme processus Ce que j'aurais voulu, c'est faire la même chose mais en SQL... Mais ça ne semble pas être une bonne idée
    Bizarre que cela soit long. Le première requete je veux bien mais la deuxieme doit être rapide
    J'utilises souvent cette technique et ca a toujours été instantanné (je travail avec des tables à plus de 50 000 lignes)

    Vu que tu utilises un listview je pari que tu le remplis via une boucle.
    Alors Vire le, après pose un DataSource que tu vas lier à ta requete puis tu poses un dbgrid que tu vas lier au datasource. (essai tu vas voir le gain de temps )
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  20. #20
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Merci en tout cas de tes éclairages Malatar
    La requête en elle même est rapide Par contre, c'est la totalité des requêtes qui est lente puisqu'à chaque record de la première Query, il faut refaire une recherche...
    Je remplis effectivement le TListView via une boucle, ou plutot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      Machin.First;
      repeat
        //Remplissage du TListItem
      until not Machin.Next;

    Mais ça reste quasi instantané sans la reqûete supplémentaire pour trouver ce fichu DescriptionProjet (Astuce: cacher le TListView avant le traitement et le réafficher ensuite )...
    Et puis j'aime pas l'affichage du DBGrid, c'est beaucoup trop austère
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [2.x] Error SQL lors de l'enregistrement d'un champ de type Entity
    Par nihaoma dans le forum Symfony
    Réponses: 6
    Dernier message: 30/03/2015, 14h28
  2. [AC-2010] Comment faire un "retour chariot" dans un champ de type mémo ?
    Par Velcor dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/02/2012, 13h10
  3. faire un distinct par jour sur champ contenant un time()
    Par mdr_cedrick dans le forum Langage SQL
    Réponses: 1
    Dernier message: 01/08/2008, 11h10
  4. [SQl + Access] defénir la taille d'un champ du type integer
    Par Bourak dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/01/2007, 10h19
  5. Champs de type Memo
    Par talere dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/02/2006, 14h42

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