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 :

Tri sur DBgrid


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 25
    Points
    25
    Par défaut Tri sur DBgrid
    Salut à tous,

    J'ai un DBgrid dans mon application avec 8 colonnes.

    En cliquant sur les différents titres de colonnes, je voudrais que les informations se tries automatiquement par ordre croissant.

    J'ai fais une requete 'Order By' pour chaque colonne que j'utiliserais sur l'évènement OnTitleClick du DBgrid. Par contre je ne sais comment utiliser cette méthode.

    Si quelqu'un pourrais me donner un coup de main svp.

    Merci

  2. #2
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Voici le principe, à adapter (notament si la requête comporte déjà un order by ou si des zones sont renommées dans le select et comportent des espaces) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private
      qry : string;
    ...
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      qry := query1.SQL.Text;
    end;
     
    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
      query1.SQL.Text := qry + ' ORDER BY ' + column.FieldName;
      query1.Open;
    end;
    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  3. #3
    Membre éprouvé
    Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 830
    Points : 970
    Points
    970
    Billets dans le blog
    1
    Par défaut
    Une solution serait aussi, de redéfinir l'indexe en cours de l'ensemble de données au lieu de fermer et réouvrir.
    Dans le cas d'1 TClientDataSet, redéfinir la propriété IndexFieldNames.
    Diviser c'est régner : United we stand, Divided we fall
    .

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 25
    Points
    25
    Par défaut
    Salut,

    En utilisant la méthode de Bloon, j'ai une erreur a l'éxécution.

    Le problème est que j'ai une requete différente par colonne, et je ne sais pas faire la différence entre les colonnes.

    Je suis débutant.

  5. #5
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Regarde dans l'aide les propriétés de TColumn. Par contre je ne vois pas bien ce que tu entends par "une requête différente par colonne"

    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 25
    Points
    25
    Par défaut
    Chaque colonne a un nom différent, donc un champ différents dans les tables. Mon DBGrid est basé sur plusieurs tables.

    J'ai 8 requêtes avec un champ différent a chaque fois et un order by différent.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2003
    Messages : 64
    Points : 54
    Points
    54
    Par défaut
    Salut,

    Pourrais tu expliquer comment tu fait pour lier ton dbgrid à plusieurs tables STP. ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 25
    Points
    25
    Par défaut
    avec une requete...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2003
    Messages : 64
    Points : 54
    Points
    54
    Par défaut
    Ok,
    c'est bien ce que je pensais aussi.. mais comme tu disais que tu avais 8 requètes avec un champ différents je ne comprenais plus..

    Pourrais tu donner le message d'erreur à l'exécution pour y voir plus clair.

    Le problème est que j'ai une requete différente par colonne, et je ne sais pas faire la différence entre les colonnes.
    La méthode de Bloon me semble bonne pourtant.
    Quant tu es dans l'évènement OnTitleCLick de ta DBGrib, l'objet Column accessible à ce moment t'indique sur quelle colonne de ta Grid tu as cliqué, dont la propriété Column.FieldName te donne le champ de ta requète su lequel tu vas pouvoir trier.
    Il faut par contre peut être faire un query1.close avant de changer le SQL.text..à voir.
    Par contre si tu as déjà une clause ORDER BY dans ta requète initiale, il faudra comme le disait bloon adapter un peu sa solution (peut-être en sachant par avance dans quelle ligne de ton SQL.strings[xx] se situe ta clause ORDER BY pour pouvoir la remplacer.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query1.SQL.string[xx] := ' ORDER BY ' + Column.FieldName
    En espérant t'avoir aidé.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 25
    Points
    25
    Par défaut
    J'écris peut etre mal le code mais voici le message d'erreur a l'éxécution

    <<Le projet a provoqué une classe d'exeption EAccessViolation avec le message 'Violation d'accès à l'adresse 004BD79C dans le module Projet.exe. Lecture de l'adresse FFFFFFFF'. Processus stoppé. Utiliser ....>>

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2003
    Messages : 64
    Points : 54
    Points
    54
    Par défaut
    Après vérification ma méthode fonctionne.
    Peut-être pourrait tu coller ici le code qui provoque cette exception.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 25
    Points
    25
    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
     
    private
        qry &#58; string;
     
    procedure TForm.FormCreate&#40;Sender&#58; TObject&#41;;
    begin
         qry &#58;= DataModule.Query.SQL.Text;
    end;
     
    procedure TForm.DBGridTitleClick&#40;Column&#58; TColumn&#41;;
    begin
            DataModule.Query.SQL.Text &#58;= qry + ' ORDER BY ' + column.FieldName;
            DataModule.Query.Open;
    end;

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2003
    Messages : 64
    Points : 54
    Points
    54
    Par défaut
    Salut,

    Vérifie que Ton datamodule est bien créé avant ta Form.
    Va dans Projet/options et vérifie que ton datamodule est bien placé avant ta Form dans la liste, sinon tu prends le datamodule et tu le fais glisser au dessus.
    Cette erreur vient sûrement du fait que, dans le Oncreate de ta form, tu essaie de manipuler des objets du datamodule alors que lui même n'est pas encore créé.

    Amicalement.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 25
    Points
    25
    Par défaut
    Effectivement, ejaecker a raison, je n'ai plus l'erreur a l'exécution mais une autre erreur se produit lorsque je clique sur le titre de la colonne.

    Est ce que cela pourrait venir du fait que j'ai delphi 4 et access ?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2003
    Messages : 64
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par julien41
    Effectivement, ejaecker a raison, je n'ai plus l'erreur a l'exécution mais une autre erreur se produit lorsque je clique sur le titre de la colonne.

    Est ce que cela pourrait venir du fait que j'ai delphi 4 et access ?
    Tout dépend du message d'erreur que tu obtient..
    Il faut être plus explicite quand tu réponds en mettant les messages d'erreurs et en donnant le bout de code qui semble poser problème.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 25
    Points
    25
    Par défaut
    Le code est le même que plus haut...

    Erreur SQL générale....Erreur de syntaxe dans la clause ORDER BY.

    Requête : SELECT * FROM table ORDER BY champ

  17. #17
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Quelle est la requête obtenue après l'ajout du order by ? fais un showMessage(DataModule.Query.SQL.Text)

    Si la requête comporte déjà un order by, ça ne marchera pas, de même s'il y a des espaces dans le nom de la colonne (dans ce cas, encadrer le nom avec des ")

    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 25
    Points
    25
    Par défaut
    J'ai donc enlevé le order by de ma requete, je n'ai pas d'espace dans les noms des colonnes et là plus de message d'erreur.

    Par contre il n'y a rien qui se passe en cliquant sur les colonnes du DBGrid.

    J'ai fais un showMessage(DataModule.Query.SQL.Text) et le message me renvois bien la bonne requete.

    merci a tous de votre aide.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2003
    Messages : 64
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par julien41
    Par contre il n'y a rien qui se passe en cliquant sur les colonnes du DBGrid.
    C'est normal puisque c'était le role du ORDER BY...


    J'ai fais un showMessage(DataModule.Query.SQL.Text) et le message me renvois bien la bonne requete.
    Hé bien au moins fais nous voir le texte de cette requète Sans et Avec le ORDER BY si tu veux qu'on arrive à régler ton problème !!

    il y a peut être juste un problème d'espace avent le order by si ça se trouve. mais là avoue que l'on navigue un peu à vue hein !

    A plus.

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 68
    Points : 25
    Points
    25
    Par défaut
    Je recommence...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private
        qry &#58; string;
    procedure TForm.FormCreate&#40;Sender&#58; TObject&#41;; 
    begin 
         qry &#58;= DataModule.Query.SQL.Text; 
    end; 
     
    procedure TForm.DBGridTitleClick&#40;Column&#58; TColumn&#41;; 
    begin 
            DataModule.Query.SQL.Text &#58;= qry + ' ORDER BY ' + column.FieldName; 
            DataModule.Query.Open;
            showMessage&#40;DM_parc_informatique.SQL_OrderBy_serie.SQL.Text&#41;; 
    end;
    showMessage me renvoit

    SELECT *
    FROM table
    ORDER BY champ


    Ma requete dans mon DataModule est la suivante

    SELECT * FROM table

Discussions similaires

  1. tri sur mes colonnes dbgrid avec firebird
    Par tarmo57 dans le forum Débuter
    Réponses: 4
    Dernier message: 04/02/2013, 20h35
  2. Tri sur clic d'un titre colonne d'un dbgrid
    Par LuckyLuke56 dans le forum Langage
    Réponses: 6
    Dernier message: 08/04/2009, 22h09
  3. Tri sur une colonne d'un champs calculé DBGRID
    Par BuzzLeclaire dans le forum Bases de données
    Réponses: 13
    Dernier message: 18/02/2009, 16h13
  4. Tri sur un DBGrid
    Par k_boy dans le forum Composants VCL
    Réponses: 4
    Dernier message: 21/01/2008, 13h56
  5. Tri sur colonne DBgrid lié à une TTable
    Par Oluha dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/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