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 :

nombre d'un numero dans une table


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 53
    Points : 35
    Points
    35
    Par défaut nombre d'un numero dans une table
    salut tout le monde je suis debutant en delphi et j'ai un problem que j'ai pas reussi a le resoudre
    j'ai une table de six attributs qui contient des numeros de 1...jusqu'a 49, et je voudrais compter le nombre de repetition de chaque numero dans cette table et affecter chque numero avec son nombre de repetition dans une autre table, j'ai ecris ce script

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    var i,m,j,k:integer;
     
     
    begin
     j:=0;
     table1.First;
     table2.First;
      m:=table1.recordcount;
     
     
     
     
     for i:=1 to 49 do
     
      begin
     
      for k:=1 to m do
     
      begin
     
       if (intToStr(i)= table1.FieldByName('Num1').AsString)then
          begin
     
            table1.next;
          j:=j+1;
     
          end ;
     
       if (intToStr(i)= table1.FieldByName('Num2').AsString)then
          begin
     
     
           table1.next;
     
          j:=j+1;
     
          end;
     
     
       if (intToStr(i)= table1.FieldByName('Num3').AsString)then
          begin
     
     
             table1.next;
           j:=j+1;
          end;
     
       if (intToStr(i)= table1.FieldByName('Num4').AsString)then
          begin
     
     
              table1.next;
              j:=j+1;
          end;
     
       if (intToStr(i)= table1.FieldByName('Num5').AsString)then
          begin
     
             table1.next;
          j:=j+1;
          end;
     
     
       if (intToStr(i)= table1.FieldByName('Num6').AsString)then
          begin
     
     
         table1.next;
           j:=j+1;
         end;
     
     
     
     
      end;
     
        table2.insert;
          table2.fieldByName('Num').asString:=IntToStr(i);
          table2.fieldByName('Nomb').asString:=IntToStr(j);
          table2.post;
     
          table2.next;
     
            j:=0;
     
     
     
     
        end;
     
     end;
    mais sa na pas marcher les resultats son erronees, ce que j'ai voulus faire c'est de parcourir la table et compter le nombre de chaque numero, est que quelqu'un pourait m'aider

  2. #2
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Première précaution : quand tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Table1.First;
    m := Table1.RecordCount;
    tu n'es pas certain que m soit juste. Surtout si la table a un nombre important d'enregistrements. Codifie plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Table1.Last;
    m := Table1.RecorCount;
    Table1.First;
    Ensuite, j'aurais écrit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if i = StrToInt(table1.FieldByName('Num1').AsString) then
    ou encore (sous réserve que le champ Num1 ne contienne que des chiffres entiers)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if i = table1.FieldByName('Num1').AsInteger then
    Je ne sais pas si c'est ce que tu cherches, mais il me semble que j contient le nombre de fois que i est égal à Num1 + le nombre de fois que i est égal à num2 +..... Avant d'aller plus loin, c'est cela que tu veux ?
    Ce qui se conçoit bien s'énonce clairement
    Et les mots pour le dire viennent aisément (Boileau)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    merci JP pour ta reponse; j contient le nombre de fois de i ,

    par exemple :pour
    i=1 le nombre est j=4 fois
    i=2 est j=0 fois
    ...31 est 6 fois
    ...49 est 2 fois

    mais Num1 jusqu'a Num6 sont des attributs de la table1 qui contiennent des numero de 1 jusqu'a 49 mais pas de repetition dans un tuple c'est a dire on peut pas trouver deux numeros 5 dans le meme tuple par exemple

    puis j'insert chaque numero i et son nombre j dans une table2 qui contient deux attribut Num et Nomb (plus la cle primere biensure)

    mon programme sa marche mais les resultats son fausse.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    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 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par soforan Voir le message
    mon programme fonctionne mais les résultats sont faux.
    donc il ne fonctionne pas

    as tu le droit au SQL sur cette table ? car
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT NUMERO,COUNT(NUMERO) FROM TABLE GROUP BY NUMERO
    devrait si j'ai bien compris l'énoncé fournir les réponses

    par programmation évidemment c'est un peu plus compliqué mais déjà , a moins d'utiliser un tableau de 49 éléments je ne vois pas comment tu peux stocker tes résultats

    Voici comment je vois les choses

    déclarer un tableau de 49 éléments et l'initialiser à 0
    ouvrir et aller en début de fichier
    tant que non fin de fichier
    selon la valeur NUMERO incrémenté la valeur dans le tableau
    lire l'enregistrement suivant
    fin
    fermer le fichier
    faire l'affichage des 49 éléments du tableau
    c'est une histoire de 20 à 30 de lignes de code , mais je ne vais pas donner la solution toute crue
    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

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    merci sergio, juste pour etre plus claire, c que le tableau contient n element (enregistrement ou tuple et 6 attributs) et chaque element doit etre les numero de 1 jusqu'a 49.
    j'ai essaye se code de SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT NUMERO,COUNT(NUMERO) FROM TABLE GROUP BY NUMERO
    sa marche just pour un attribut NUMERO, mais j'aimerais bien si je trouve un code de SQL qui marche pour tout les attributs sachant que j'ai 6 attributs

    merci

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    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 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    ce sql n'etait qu'un exemple !
    n'ayant pas de descriptif de la table j'y ai mis le minimum
    ce n'est qu'une question de group by

    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT NUMERO,COUNT(NUMERO) FROM TABLE GROUP BY NUMERO,CRIT1,CRIT2,CRIT3,CRIT4,CRIT5,CRIT6
    devrais donner l'occurence selon tous les critères , l'ordre dans la liste pouvant être important

    par critére
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT NUMERO,CRIT1,COUNT(NUMERO) FROM TABLE GROUP BY NUMERO,CRIT1
    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

  7. #7
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    comme tu peux aussi paramétrer ta procédure comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Procedure comptage(attribut : string);
    begin
      codeSQL := 'SELECT' + attribut+ ',COUNT(' + attribut+ ') FROM TABLE GROUP BY' +  attribut + '''';
    end;
    avec codeSQL variable globale.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

Discussions similaires

  1. [Conception]Nombre Maxi d'enregistrements dans une table
    Par del__k dans le forum Modélisation
    Réponses: 3
    Dernier message: 16/04/2007, 11h57
  2. [MySQL] Comment récupérer le nombre d'élément présent dans une table
    Par TrX314 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/04/2007, 21h20
  3. nombre d'enregistrements limite dans une table sql
    Par lilou229 dans le forum Outils
    Réponses: 3
    Dernier message: 30/01/2007, 15h21
  4. Nombre de ligne maxi dans une table ACCESS
    Par ygiraudeau dans le forum Access
    Réponses: 2
    Dernier message: 05/09/2005, 17h23
  5. URGENT - Nombre d'enregistrements différents dans une table
    Par Jeankiki dans le forum Bases de données
    Réponses: 6
    Dernier message: 11/08/2004, 15h51

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