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 des enregistrements d'une IBTable


Sujet :

Bases de données Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Tri des enregistrements d'une IBTable
    Bonjour,

    J'utilise un TIBTable comme source de donnée pour un DBGrid dans mon application. J'ai lu sur internet que pour gérer l'ordre d'affichage des enregistrement, je dois jouer avec l'index de cette table car l'ordre est dictée par l'index.

    Ceci me cause 2 problèmes.

    Premièrement, mettre en index un colonne en particulier ordonne les enregistrement en ordre croissant sur cette colonne mais cependant ne me permet pas de faire l'ordre inverse.

    Deuxièmement, Si je change la valeur de l'index, j'interfert avec le bon fonctionnement de ma relation maître-détail que cette dite table fait partie.

    J'ai pensée changer tous mes composante TIBTable pour des TIBQuery et éditer la requête SQL lorsque l'utilisateur clique sur la nom de la colonne dans le DBGrid mais la tâche est très lourde car j'ai environs 20 TIBTable différent et de plus, je me dis qu'il y a surement un façon de trier les résultats du composant IBTable. L'ordre de trie est un fonctionnalité généralement standard la manipulation de donnée d'une base de donnée. Donc je ne crois pas que ce soit impossible.

    Merci d'avance pour votre aide!

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Points : 118
    Points
    118
    Par défaut
    Salut,

    Pour coder le click sur la colonne, voilà comment je procède avec des KadaoQuery : version free de composant pour attaquer une base de donnée ACCESS :

    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
    procedure TFormHistorique.RxDBGrid1TitleClick(Column: TColumn);
    var
    EstPresent:Integer;
      ASC,DESC:Boolean;
    begin
    	ASC:=NPos('ASC',DmSQL.SQLHistorique.SortedByText.text,1)<>0;
      DESC:=NPos('DESC',DmSQL.SQLHistorique.SortedByText.text,1)<>0;
      DmSQL.SQLHistorique.SortedByText.Clear;
      if ASC and not DESC then
    		DmSQL.SQLHistorique.SortedByText.Add(Column.FieldName+' DESC');
      if not ASC and DESC then
      	DmSQL.SQLHistorique.SortedByText.Add(Column.FieldName+' ASC');
      if not ASC and not DESC then
      	DmSQL.SQLHistorique.SortedByText.Add(Column.FieldName+' ASC');
    	DmSQL.SQLHistorique.Sort;
    end;

    windows 10 / DEBIAN 7.9 / Etc...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Points : 118
    Points
    118
    Par défaut

    Oups j'ai cliqué sur le mauvais bouton, donc voila la suite
    Donc : J'ai une expression requete du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select xxx From MaTAble
    J'utilise une RXDBGRID composant free, avec sa propriete DataSource contenant le DataSource de ma Requete.

    La fonction NPos de la rxLib fichier SysUtils, recherche la nième occurence d'une chaine dans une autre chaine. Ici par exemple je cherche la première occurence de ASC ou de DESC dans "DmSQL.SQLHistorique.SortedByText.text". Si cette chaine n'est pas codée dans l'expression de ma requete, par défaut je code un tri ascendant.

    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
    TFormHistorique.RxDBGrid1TitleClick(Column: TColumn);
    var
      EstPresent:Integer;
      ASC,DESC:Boolean; // ASC : triascendant  DESC descendant
    begin
      // rechercher si déja un tri dans la requete
      ASC:=NPos('ASC',DmSQL.SQLHistorique.SortedByText.text,1)<>0;
      DESC:=NPos('DESC',DmSQL.SQLHistorique.SortedByText.text,1)<>0;
      DmSQL.SQLHistorique.SortedByText.Clear;
      // Il y déja un tri ASC je code donc un tri DESC
      if ASC and not DESC then
         DmSQL.SQLHistorique.SortedByText.Add(Column.FieldName+' DESC');
      // Il y déja un tri ADESC je code donc un tri ASC
      if not ASC and DESC then
         DmSQL.SQLHistorique.SortedByText.Add(Column.FieldName+' ASC');
      // Aucun tri je code donc un tri ASC
      if not ASC and not DESC then
         DmSQL.SQLHistorique.SortedByText.Add(Column.FieldName+' ASC');          
    DmSQL.SQLHistorique.Sort;
    end;
    Donc à chaque fois que un click est fait sur un titre de colonne, je trie le contenu de ma grid soit en tri ascendant, soit en tri descendant.

    Voilà un exemple de code qui pourrait surement t'aider, mais préfère les requetes aux tables.

    Bon courage
    A+

    windows 10 / DEBIAN 7.9 / Etc...

  4. #4
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut

    Citation Envoyé par CharleLéo
    Voilà un exemple de code qui pourrait surement t'aider, mais préfère les requetes aux tables.
    bien d'accord avec toi. a quoi ça sert de récupérer les 100 000 enregistrements d'une table alors qu'on en a besoin que de 100 ?

Discussions similaires

  1. Tri des enregistrement d'une table
    Par Otis07 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 27/04/2009, 22h33
  2. Réponses: 3
    Dernier message: 05/10/2005, 18h33
  3. Parcourir l'ensemble des enregistrements d'une table
    Par Aurèl90 dans le forum Access
    Réponses: 17
    Dernier message: 22/09/2005, 14h51
  4. Exclure des enregistrements d'une requête
    Par beegees dans le forum Access
    Réponses: 2
    Dernier message: 20/06/2005, 13h01
  5. Tri des colonnes d'une DBGRID
    Par Atrebate62 dans le forum Bases de données
    Réponses: 3
    Dernier message: 31/05/2004, 12h20

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