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 :

FireBird Tri dans DBgrid


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 104
    Points : 85
    Points
    85
    Par défaut FireBird Tri dans DBgrid
    Bonjour à tous,

    Une question qui va vous sembler triviale, mais sur laquelle je bute depuis un certain temps (je suis novice en base de données);

    J'ai créé une base de données avec FireBird. Elle comporte plusieurs champs.
    Je l'affiche sans problème dans un dbGrid.
    Mais j'aimerais indexer cette base selon le champ "CAT" et l'afficher dans ce dbGrid
    voici le code utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      try
       IBQuery1.Close;
       IBQuery1.SQL.Clear;
       IBQuery1.SQL.Text := 'SELECT * FROM MaTable ORDER BY CAT DESC ' ;
       IBQuery1.Open;         
       IBTransaction1.Commit;
      except
        IBTransaction1.Rollback;
      end; 
    end;
    Je n'ai pas d'erreur.
    Mais rien ne se passe au niveau du DbGrid. Il reste dans son état initial avec tous ses enregistrements non triés.

    Où ai-je fait une erreur ?

    Merci de votre aide.
    Jl

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Bonjour,
    Citation Envoyé par illuch Voir le message
    Mais rien ne se passe au niveau du DbGrid. Il reste dans son état initial avec tous ses enregistrements non triés.
    Par ce que l'ensemble de données était déjà ouvert au lancement, je présume.

    Supprimez le commit de votre transaction. Cette commande (idem pour rollback) ne doit être appelée qu'en fin de traitement.
    En l'occurrence si la grille ne sert qu'à la visualisation, c'est totalement inutile...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       IBQuery1.Close;
       // IBQuery1.SQL.Clear;  // inutile du fait de l'affectation directe de la propriété Text
       IBQuery1.SQL.Text := 'SELECT * FROM MaTable ORDER BY CAT DESC ' ;
       IBQuery1.Open;         
    end;

  3. #3
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 104
    Points : 85
    Points
    85
    Par défaut
    Par ce que l'ensemble de données était déjà ouvert au lancement, je présume.
    Oui la base est ouverte.
    Je l'ai donc fermée en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     IBDatabase1.connected:=True;
      IBQuery1.Close;
      IBQuery1.SQL.Text := 'SELECT * FROM MaTable ORDER BY CAT DESC ' ;
      IBQuery1.Open;
    mais je n'arrive toujours pas à visualiser ma base triée. J'ai toujours l'affichage non trié.
    Une idée serait la bienbenue.

    Merci

    JL

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Bonjour,
    Citation Envoyé par illuch Voir le message
    Oui la base est ouverte.
    Attention aux termes employés, je n'ai pas parlé de la base de données mais de l'ensemble de données, c.a.d. ce qui est retourné par la requête SQL (IBQuery1 en l'occurrence).

    Citation Envoyé par illuch Voir le message
    Je l'ai donc fermée en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     IBDatabase1.connected:=True;
      IBQuery1.Close;
      IBQuery1.SQL.Text := 'SELECT * FROM MaTable ORDER BY CAT DESC ' ;
      IBQuery1.Open;
    mais je n'arrive toujours pas à visualiser ma base triée. J'ai toujours l'affichage non trié.
    C'est qu'il y a un problème ailleurs...
    Il faudrait en savoir un peu plus sur ce que vous faites dans la fiche (Form) où se trouve votre grille (DBGrid).
    Par exemple, y-a-t-il une liaison IBQuery1 <-> Datasource <-> DBGrid ?

  5. #5
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 104
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Bonjour,
    Attention aux termes employés, je n'ai pas parlé de la base de données mais de l'ensemble de données, c.a.d. ce qui est retourné par la requête SQL (IBQuery1 en l'occurrence).


    C'est qu'il y a un problème ailleurs...
    Il faudrait en savoir un peu plus sur ce que vous faites dans la fiche (Form) où se trouve votre grille (DBGrid).
    Par exemple, y-a-t-il une liaison IBQuery1 <-> Datasource <-> DBGrid ?
    Sur ma fiche, il y a :
    un IBQuery, un Datasource, un IBTable, un IBTransaction et un IBDatabase.
    Il y a aussi un TDBNavigator et un TDBGrid;
    Le tout est configuré comme ça:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    IBDataBase1.Params.Clear;
      with IBDatabase1 do 
      begin
       DatabaseName:=Nom_Base;
       Params.Add('user_name=Moi'); 
       Params.Add('password=MonMotdePasse');  
       Params.Add('PAGE_SIZE 4096');
       LoginPrompt:=False;              
       DefaultTransaction:=IBTransaction1;
      end;
     
     IBTransaction1.defaultDatabase:=IBDatabase1;
     IBDatabase1.connected:=True;          
     IBTransaction1.active:=True;
     
     with IBTable1 do 
     begin
      database:=IBDatabase1;
      TableName:='MaTABLE';
     end;
     DataSource1.DataSet:=IBTable1;
     
     IBTable1.Active:=True;
     DBNavigator1.DataSource:=DataSource1;
     DBGrid1.DataSource:=DataSource1;
     
     IBQuery1.Database:=IBDataBase1;
     IBQuery1.DataSource:=DataSource1;
    Dans le TDBGrid, je vois bien tous mes enregistrements,
    Mon problème est lorsque je veux faire un tri , avec le code suivant, rien n'est modifié dans le TDBGrid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     IBQuery1.SQL.Clear;
     IBQuery1.SQL.Text := 'SELECT * FROM MaTABLE ORDER BY CAT DESC ' ;
     IBQuery1.Open;        
    end;
    Merci de vos lumières

    JLouis

  6. #6
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Citation Envoyé par illuch Voir le message
    Sur ma fiche, il y a :
    un IBQuery, un Datasource, un IBTable, un IBTransaction et un IBDatabase.
    Il y a aussi un TDBNavigator et un TDBGrid;
    Le tout est configuré comme ça:
    Et incorrectement donc...

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    IBDataBase1.Params.Clear;
      with IBDatabase1 do 
      begin
       DatabaseName:=Nom_Base;
       Params.Add('user_name=Moi'); 
       Params.Add('password=MonMotdePasse');  
       Params.Add('PAGE_SIZE 4096');
       LoginPrompt:=False;              
       DefaultTransaction:=IBTransaction1;
      end;
     
     IBTransaction1.defaultDatabase:=IBDatabase1;
     IBDatabase1.connected:=True;          
     IBTransaction1.active:=True;
     
     with IBTable1 do 
     begin
      database:=IBDatabase1;
      TableName:='MaTABLE';
     end;
     DataSource1.DataSet:=IBTable1;  // la grille est alimentée par l'ensemble de données IBTable1, non trié
     
     IBTable1.Active:=True;
     DBNavigator1.DataSource:=DataSource1;
     DBGrid1.DataSource:=DataSource1;
     
     IBQuery1.Database:=IBDataBase1;
     //IBQuery1.DataSource:=DataSource1;  // NON !!! Inutile !
    Citation Envoyé par illuch Voir le message
    Dans le TDBGrid, je vois bien tous mes enregistrements,
    Normal, la grille est alimentée par le datasource qui lui est associé à l'ensemble de données IBTable1.

    Citation Envoyé par illuch Voir le message
    Mon problème est lorsque je veux faire un tri , avec le code suivant, rien n'est modifié dans le TDBGrid
    Toujours normal, votre grille est alimentée par le datasource qui lui RESTE associé à l'ensemble de données IBTable1, et pas à l'ensemble de données IBQuery1.
    Après correction rapide, on a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     DataSource1.DataSet := IBQuery1; // la grille est maintenant alimentée par le datasource associé à l'ensemble de données IBQuery1, trié !
     // IBQuery1.SQL.Clear; // Inutile, quand on renseigne la requête sql par affectation directe via la propriété Text !
     IBQuery1.SQL.Text := 'SELECT * FROM MaTABLE ORDER BY CAT DESC ' ;
     IBQuery1.Open;        
    end;

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 174
    Points : 41 365
    Points
    41 365
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    je rajouterais un close à la procédure indiquée par Philippe, au cas où

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     DataSource1.DataSet := IBQuery1; // la grille est maintenant alimentée par le datasource associé à l'ensemble de données IBQuery1, trié !
     // IBQuery1.SQL.Clear; // Inutile, quand on renseigne la requête sql par affectation directe via la propriété Text !
     IBQuery1.Close;
     IBQuery1.SQL.Text := 'SELECT * FROM MaTABLE ORDER BY CAT DESC ' ;
     IBQuery1.Open;        
    end;

  8. #8
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 104
    Points : 85
    Points
    85
    Par défaut
    Après une petite absence, je reviens sur ce post pour vous remercier de vos explications.
    Grâce à votre aide mon problème est résolu et surtout j'y vois un peu plus clair en bases de données

    JL

    PS : comment mettre le tag "résolu" ?

  9. #9
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 877
    Points : 11 369
    Points
    11 369
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Juste en dessous du dernier message, à gauche, 2 boutons : "répondre" et
    Un p'tit clic et hop !

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

Discussions similaires

  1. Tri dans une DBGrid sur un champ date au format jj/mm
    Par Jeankiki dans le forum Bases de données
    Réponses: 10
    Dernier message: 31/10/2004, 12h32
  2. DBLookupComboBox dans DBGrid
    Par KThrax dans le forum Bases de données
    Réponses: 7
    Dernier message: 24/08/2004, 15h18
  3. Afficher une icone dans DBgrid
    Par boyerf dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/02/2004, 15h45
  4. Tri sur DBgrid
    Par julien41 dans le forum Bases de données
    Réponses: 21
    Dernier message: 19/02/2004, 17h33
  5. Couleur des lignes dans DBGrid
    Par eddie dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/06/2002, 18h15

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