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 Discussion :

QList de QList d'une structure


Sujet :

Bases de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut QList de QList d'une structure
    Bonjour, depuis quelques jours je bloque sur un partie dont je ne peux pas me passer pour la suite de mon projet. Je vous explique. Je souhaite faire une fonction qui renvoie les plusieurs colonnes de ma base de données pour pouvoir le comparer avec une autre.

    Je me suis penché sur sur des QList<QList<Structure> pour pouvoir faire un tableau mulitidimensionnel puisque par la suite j'aurais des tableaux encore plus grand.

    Jusque la, j'obtiens en resultat par par champ mais le probléme est que je les recupere tous mais s'ecrive à la suite, je ne peux pas les recuperer un par un.
    puisque ça recrit tout la liste à chaque appel avec juste le dernier ajout.

    Exemple d'affichage:
    "1" ID
    "Administration " NAME
    "12" ID
    "Administration FAE " NAME
    "123" ID
    "Administration FAE Development Team " NAME
    "1234" ID
    "Administration FAE Development Team Marketing " NAME
    "12348" ID
    "Administration FAE Development Team Marketing Customer " NAME
    "1234813" ID
    "Administration FAE Development Team Marketing Customer

    Ou chaque affichage est separer par ID et NAME pour indication

    Donc voici mon code:
    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
     
    QList<QList<sListUserGroup> > DbTTP::selectIdUserGroup()
    {
     
     QSqlQuery query(d_dbTTP);
        query.prepare("SELECT * FROM USERGRP");
        query.exec();
     
        int champId=query.record().indexOf("IDRECORD");
        int champFct= query.record().indexOf("NAME");
     
        QList<QList<sListUserGroup> > listUserGroup;
        QList<sListUserGroup> tmpList;
        sListUserGroup str;
     
     
     
        while(query.next())
        {
     
            str.idUserGroup.append(query.value(champId).toString());
            str.fonction.append(query.value(champFct).toString());
     
            tmpList.append(str);
     
            listUserGroup.append(tmpList);
     
        }
     
     
        for(int i=0;i<listUserGroup.size();++i)
        {
            qDebug() << listUserGroup.at(i).at(i).idUserGroup << "ID";
            qDebug() << listUserGroup.at(i).at(i).fonction << "NAME";
     
        }
     
     
       return listUserGroup;
     
     
    }
    avec comme structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     struct sListUserGroup
             {
                   QString idUserGroup;
                   QString fonction;
              };
    Merci d'avance pour votre aide.

  2. #2
    Membre actif Avatar de Jerome S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2011
    Messages : 62
    Par défaut
    Tu as écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    str.idUserGroup.append(query.value(champId).toString());
    str.fonction.append(query.value(champFct).toString());
    Or, idUserGroup est un QString. Donc, à moins que je ne me trompe, tu ajoute à la fin du QString les valeurs de l'élément suivant.
    Je pense que ton append tu souhaitais le mettre pour un nouvel élément de la liste et non pas comme une concaténation à la suite d'un string.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while(query.next())
        {
     
            str.idUserGroup = query.value(champId).toString();
            str.fonction = query.value(champFct).toString();
     
            tmpList.append(str);
     
            listUserGroup.append(tmpList);
     
        }

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut
    Oui voila, je ne veux pas le concatener mais comment faire pour une QList de structure d'indiquer un indice comme pour les tableaux à deux dimensions habituels?
    Ou même avec un QString à la place de la strucuture, si je lui ajoute un indice comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     tmpList[x].append(query.value(champId).toString());
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmpList.at(x).append(query.value(champId).toString());
    le compilateur me renvoie une erreur " Index out range " et plante le programme. Cela est due au fait qu'il ne soit initialisé ?

  4. #4
    Membre actif Avatar de Jerome S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2011
    Messages : 62
    Par défaut
    J'ai édité mon message précédent après que tu l'ai lu (je pense).
    Donc, tu n'a pas besoin de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmpList[x].append(query.value(champId).toString());
    mais simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmpList.append(query.value(champId).toString());
    Dans ce cas la, tes données s'empileront dans l'ordre d'arrivée dans ta liste

    Si jamais tu souhaite les mettre à un endroit bien précis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmpList.insert(x, query.value(champId).toString());
    x est ton index

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut
    Merci, donc j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmpList.append(query.value(champId).toString());
    ça s'ajoute bien à la suite. Mais maintenant je voudrais récupérer un élément d'une colonne spéciale pour pouvoir comparer avec une autres base de données quand j'appelle ma fonction.

    Lorsque je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     for(int i=0;i<listUserGroup.size();++i)
        {
            qDebug() << listUserGroup.at(i).at(i) << "ID";
     
        }
    Il m'affiche les elements de toute la liste l'un après l'autre en ne prennant pas en compte la colonne.

    Aurais-tu une idée ?

    En tout cas merci de ton aide.

  6. #6
    Membre actif Avatar de Jerome S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2011
    Messages : 62
    Par défaut
    Je ne m'étais pas penché sur le problème avant, mais d'après ce que je crois comprendre, tu n'a pas besoin d'une liste de liste de structure mais plutot d'une liste de structure.

    Donc au lieu d'avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QList<QList<sListUserGroup>>
    je pense que
    est suffisant.

    D'après ton exemple, tu n'a qu'une liste de ID et de NAME à stocker. Pourquoi faire une liste de liste ?

    Cela n'est-il pas plus judicieux ?
    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
    QList<sListUserGroup>  DbTTP::selectIdUserGroup()
    {
     
     QSqlQuery query(d_dbTTP);
        query.prepare("SELECT * FROM USERGRP");
        query.exec();
     
        int champId=query.record().indexOf("IDRECORD");
        int champFct= query.record().indexOf("NAME");
     
        QList<sListUserGroup> tmpList;
        sListUserGroup str;
     
     
     
        while(query.next())
        {
     
            str.idUserGroup = query.value(champId).toString();
            str.fonction = query.value(champFct).toString();
     
            tmpList.append(str);
     
        }
     
     
        for(int i=0;i<tmpList.size();++i)
        {
            qDebug() << tmpList.at(i).idUserGroup << "ID";
            qDebug() << tmpList.at(i).fonction << "NAME";
     
        }
     
       return tempList;
     
    }
    A moins que je n'ai pas bien cerné ton problème...
    Dans tous les cas, ta ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qDebug() << listUserGroup.at(i).at(i) << "ID";
    n'est pas logique du fait que tu fasse : .at(i).at(i).

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut
    Au départ j'etais parti sur une QList de QList de QString c'est pour ça, du coup j’étais resté sur ça.

    Grâce à ce que tu m'as filé juste avant ça marche niquel. Merci beaucoup!

    J'ai une autre question, est-ce que je peux utiliser la même forme si j'ai plus de colonnes à recuperer de ma base de données. J'ai juste à indiquer les colonnes dans ma structure comme ici ?

    La forme .at(i).at(i) me paraissait aussi assez bizarre.

  8. #8
    Membre actif Avatar de Jerome S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2011
    Messages : 62
    Par défaut
    Exact
    Si tu as un champ "DATE" par exemple, tu n'a qu'a ajouter un QDateTime date dans ta structure.
    Du coup, tu aura quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct sListUserGroup
    {
                   QString idUserGroup;
                   QString fonction;
                   QDateTime date;
    };
    Et ensuite, il faudra évidemment que tu le remplisse à la manière des autres.

    Si tu as besoin d'autre chose, n'hésite pas.
    Bon courage

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut
    Impeccable! Merci de m'avoir aidé.
    Je débute en C++ QT alors j'aurais surement encore l'occasion de faire appel à ton aide

    Bonne journée

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

Discussions similaires

  1. Ajout dans une QList de QList de structure
    Par zworg dans le forum Débuter
    Réponses: 9
    Dernier message: 31/07/2012, 16h38
  2. sizeof() d'une structure
    Par tut dans le forum MFC
    Réponses: 12
    Dernier message: 29/08/2006, 18h21
  3. Comment mettre en place une structure 3 tiers.
    Par WOLO Laurent dans le forum Débats sur le développement - Le Best Of
    Réponses: 13
    Dernier message: 27/07/2003, 22h01
  4. [toFAQ][socket] Envoi d'une structure
    Par julien20vt dans le forum C++
    Réponses: 15
    Dernier message: 23/04/2003, 15h47
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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