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

 Delphi Discussion :

Aide pour numérotation


Sujet :

Delphi

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut Aide pour numérotation
    Bonsoir
    Je souhaite avoir une aide pour une boucle dans une table ADO (élèves) qui contient plusieurs enregistrements avec un champs classe étude[CL_E] et un champs [No] .
    Je veux que dans chaque classe l’élève aura un numéro exe :de 01….25 qui est le dernier et quand la classe change le compteur retourne à 01 pour numéroter l’élève de la classe suivante jusqu’au dernier élève de la cl asse ainsi de suite …
    Resultat est indiquée dans la photo suivante

    Nom : Eleves.png
Affichages : 288
Taille : 15,0 Ko

    Merci pour toutes aide

  2. #2
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Quel SGBD utilises tu ? En SQL Serveur par exemple tu peux le faire en une seule requête avec "row over partition by".

    Si tu veux le faire en Delphi et poster les requetes il faut que tu selectionnes tes élèves avec un tri par classe (au minimum). Ensuite avec Eof tu boucles sur tes données, tant que la classe ne change pas tu incrémentes un compteur et tu fais l'update. Si la classe à changée tu remets le compteur à 0.

    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
     
    var
       iCompte  : integer;
       sClasse : string;
    begin
       // recuperation des donnees
       sClasse := '';
       while not qrySelect.Eof do
       begin
          if sClasse <> qrySelect.FieldByName('CL_E').AsString then
             iCompteur := 0
          else
             Inc(iCompteur);
     
          // update
          // sClasse := valeur du query
          // next ...
       end

  3. #3
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Bonjour
    ce qui concerne le SGBD c'est table ADO(Access) et Delphi 2010
    retwas
    Je suis honoré de votre réponse.
    je me inspiré de votre solution et j’ai fait

    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
    29
    30
     
     
    procedure TForm1.Button3Click(Sender: TObject);
      var
       i  : integer;
       sClasse : string;
    begin
       // recuperation des donnees
       sClasse :=QEntete.FieldByName('CL_E').AsString;
       i :=0;
     
       QEntete.First;
       while not QEntete.Eof do
       begin
          if sClasse = QEntete.FieldByName('CL_E').AsString then
          begin
          Inc(i);
          ListBox1.Items.Add(intToStr(i));
          end
              else
              begin
              i:=0;
              Inc(i);
              ListBox1.Items.Add(intToStr(i));
             end;
          QEntete.next;
     
       end;
     
    end;
    Qui m’a donné une numérotation exacte pour la première Classe seulement et les autres classes avec un numéro unique (1) , c'est-à-dire la boucle s’arrête .

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    retwas a préconisé de se baser sur le changement de nom, pas sur l'égalité du nom

  5. #5
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Papy214
    merci de votre réponse
    meme problème si je fait <> .
    j'ai fait toutes les changements possibles sans arrive a une résultat suffisante.

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Le code donné par retwas est tout à fait classique et doit fonctionner.
    Après, il y a la solution de faire un select distinct sur CL_E pour avoir tous les noms de classe pour ensuite les traiter une par une avec une requête simple.
    Si c'est plus facile comme ça, pourquoi pas ...

  7. #7
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Il faut affecter la valeur dans la boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       sClasse := QEntete.FieldByName('CL_E').AsString;
    end;

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    rapidement il y a un problème de mise en place des instructions qu'un algorithme sur papier aurait vite détecté
    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
     
    procedure TForm1.Button3Click(Sender: TObject);
      var
       i  : integer;
       sClasse : string;
    begin
       i :=0; 
       QEntete.First; //(où est le open ?) 
       // recuperation des donnees 
       sClasse :=QEntete.FieldByName('CL_E').AsString; 
     
       while not QEntete.Eof do
       begin
          if sClasse = QEntete.FieldByName('CL_E').AsString then
          begin
             Inc(i);
              ListBox1.Items.Add(intToStr(i));
          end
          else begin
             sClasse :=QEntete.FieldByName('CL_E').AsString; // mémorisation de la nouvelle classe 
              i:=0;
              Inc(i);
              ListBox1.Items.Add(intToStr(i)); 
             end;
          QEntete.next;
       end;
    end;
    bien sûr il faut que la table soit trié par classe puis ID
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Merci Beaucoup a tous

    SergioMaster
    bien sure le problème était la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sClasse :=QEntete.FieldByName('CL_E').AsString; // mémorisation de la nouvelle classe
    Résolu

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

Discussions similaires

  1. [MySQL] besoin d'aide pour un script pour la numérotation de page
    Par rysis83 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 30/01/2008, 20h59
  2. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  3. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05
  4. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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