![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Qt Forum d'entraide technique sur la bibliothèque Qt. Avant de poster -> F.A.Q Qt |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Invité de passage
![]() Date d'inscription: novembre 2008
Messages: 2
|
Bonjour tout le monde
Quelqu'un a-t-il deja gere des bases de donnees avec Qt ? Connaissez-vous alors les QDataTable qui permettent d'afficher le contenu d'une table ? J'ai une classe myTable qui herite de QDataTable. Elle me permet de recuperer les donnees d'une table d'une base de donnees MySql. J'utilise un QSqlCursor sur une table de la base nommee "staff" : je peux alors inserer/modifier/supprimer des elements de la table tres simplement. Une colonne de myTable contient des identifiants "id_staff", qui font reference a une autre table nommee "personnel". Ensuite, c'est la methode paintField() qui est appelee automatiquement pour dessiner le contenu de chaque champ de myTable. J'ai surcharge cette methode pour les "id_staff" : ainsi, on n'affiche pas ces identifiants tels quels mais on va chercher dans la table "personnel" le nom qui correspond, et c'est lui que l'on affiche. Voici un exemple avec les tables "staff" et "personnel" suivantes : //staff// ----------------------------------- || id_staff (int) || ----------------------------------- || 12 || || 23 || || 37 || ------------------------------------ //personnel// ----------------------------------------------------------------- || id(int) || name (varchar) || ----------------------------------------------------------------- || 12 || Ringo || || 23 || John || || 37 || Paul || ------------------------------------------------------------------ myTable sera affichee de la maniere suivante (Le tri des elements est definie par une colonne non mentionnee ici. C'est la colonne initiale de tri pour la table) (myTable) Name -------------------------------------- || Ringo || || Paul || || John || Si je clique sur le header de la colonne, elle se trie selon les id_staff (qui est la reelle valeur que contiennent les champs) (myTable after header click) Name -------------------------------------- || Ringo || || John || || Paul || Mais je prefererais trier la colonne selon le nom qu'affiche les elements. La colonne serait triee par ordre alphabetique, cela serait plus parlant pour l'utilisateur. ( myTable after header click) Name -------------------------------------- || John || || Paul || || Ringo || Mais voila, je suis a court d'idees. - Un QSqlCursor est efficace si l'on veut avoir acces a et modifier les champs d'une seule table, mais comment faire si l'on veut lier deux tables entre elles ? C'est quand meme une pratique assez courante quand on manipule des bases de donnees. - Existe-t-il une methode pour comparer les items d'une QDataTable ? Ou pour trier une colonne donnee ? Je n'ai pas trouve. Voici un resume du code. Code :
# //***********************************************************************// # myTable::myTable(...) # { # ... # QSqlCursor* cursor = new QSqlCursor ("staff"); # setSqlCursor(cursor); # # //Je recupere cinq colonnes de la table, mais voici celle qui m'interesse ici # addColumn("id_staff", "Name"); # ..... # # setSorting( true ); # # .... # } # # myTable::paintField(QPainter *p, const QSqlField *field, # const QRect& cr, bool selected) # { # if( ! field ) # return; # # .... # if ( field->name() == "id_staff" ) # { # int id = field->value().toInt(); # # //A partir du id_staff, je recupere le nom correspondant dans la table "personnel" # QString name = recupereNom(id); # # p->drawText( 2, 2, cr.width() - 4, cr.height() - 4, Qt::AlignLeft, name); # } # } # //***********************************************************************// |
|
|
|
|
|
#2 (permalink) |
|
Membre Confirmé
![]() Date d'inscription: mai 2007
Localisation: Brest
Âge: 21
Messages: 291
|
Salut,
Bon, je n'ai jamais bidouillé le module QtSql, et Qt3 me semble un peu obsolète aujourd'hui, cependant, je pense pouvoir répondre à ta question : Au lieu à chaque itération de : -récupérer le id_staff(int) -chercher la correspondance(QString) -afficher le résultat tu devrais : -récupérer le id_staff(int) -chercher la correspondance(QString) -ajouter ton QString dans une QStringList une fois que toute ta table est parcourue -ma QStringList.sort() -tu parcours ta QStringList et tu "peins" le résultat avec chaque string. Enfin, je pense qu'il y'a des solutions prévues pour ça, mais pour les raisons citées plus hauts, je suis incapable de te les donner. Bonne chance, G. |
|
|
|
|
![]() |
![]() |
||
[Qt3-Linux] QDataTable - Tri personnalise d'une colonne
|
||
| Outils de la discussion | |
|
|