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 :

Éditer QSqTableModel et QTableView


Sujet :

Bases de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 59
    Par défaut Éditer QSqTableModel et QTableView
    Bonjour.

    J'ai créée une grille pour afficher le contenu de ma base de données. Je désire y ajouter quelques fonctionnallités: un utilisateur clique sur une ligne et le progamme récupère le contenue des cellules. J'ai trouvé une solution mais elle n'est pas satisfesantes car elle oblige à ce que le numéro id et le numéro de ligne soit égaux , ce qui est bien sùr impossible après quelques ajouts/supps.
    Voici la fonction :
    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
    void FenPrincipale::on_tabless_clicked(QModelIndex index)
    {
        int a = index.row();
        QString ch = QString::number(a, 10);
        QSqlQuery query;
        query.exec("select numeroStation from StationStationnee  where id = "+ch);
     
        QString nim="",nom="";
        while (query.next()) {
               nim  = query.value(0).toString();
          }
        query.exec("select indiceStationnement from StationStationnee  where id = "+ch);
     
     
        while (query.next()) {
               nom  = query.value(0).toString();
          }
     
     
     
        query.exec("select id from mesures where numeroStation = "+nim+" AND indiceStationnement = "+nom);
     
                int b= 0;
                int i=0;
     
       while (query.next() & i<1)
       {
          b  = query.value(0).toInt();
          i=i+1;
       }
     
         ui->tablemesures->selectRow(b);
     
    }
    Je pense que c'est très clair. Le programme récupere le numéro de ligne correspondant à la selection de l'utilisateur.Puis il fait une requète sql pour connaitre le contenue de la ligne en utilisant le numéro de ligne comme id.

    Je cherche plutôt un moyen de récuper directement les données de la grille avec l'index seulement et me passer de l'id.
    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 159
    Par défaut
    Bonjour,

    Houla! compliquée ta fonction. Il y a moyen de faire plus simple, et surtout moins lourd.
    En fait ta fonction simule (si j'ai bien compris) une relation maitre/détail. Je me permets de te renvoyer aux tutos pour une implémentation précise. Ce que je te donne par la suite en est une compilation pas forcément exempte d'erreur. Il s'agît simplement de donner le principe. C'est ainsi que je fais quand je me trouve face à une vue maitre/détail.

    Dans ton cas la vue maitresse est le tableView ui->tabless.
    La vue détail est un deuxième tableview ui->tableMesures.

    Je te propose de remplacer par ce qui suit.
    Partons du principe que
    - tabless est associé à un QSqlRelationalTable nommé stationModel, auquel tu auras assigné "StationStationnee" comme tableName
    - tableMesure est associé à un QSqlTableModel nommé mesureModel auquel tu auras assigné "mesures" comme tableName

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void FenPrincipale::on_tabless_clicked(QModelIndex index)
    {
        int a = index.row();
        QSqlRecord rec = stationModel->record(a);
        QString nim = rec.field("numeroStation").toString();
        QString nom = rec.field("indiceStationnement").toString();
        QString filtre = "numeroStation = '" + nim + "' AND indiceStationnement = '" + nom + "'";
        tableMesure->setFilter(filtre);
    }
    Voila le principe.
    Je n'ai pas vérifié que le code est juste. Un tuto donne des détails sur les relations maître/détail : L'accès aux données avec QT

    Espérant avoir pu t'aider,

    Cordialement,
    M.P.

Discussions similaires

  1. Éditer un QTableView avec QStandardItemModel
    Par HadJack dans le forum Qt
    Réponses: 5
    Dernier message: 04/05/2010, 15h43
  2. [Interbase 5] impossible d'éditer les données
    Par inconu dans le forum InterBase
    Réponses: 4
    Dernier message: 18/08/2005, 13h10
  3. Réponses: 13
    Dernier message: 22/07/2005, 18h25
  4. éditer un longblob
    Par themis121 dans le forum Outils
    Réponses: 2
    Dernier message: 15/07/2005, 20h28
  5. kel langage pour éditer la mémoire ?
    Par zemaster666 dans le forum Windows
    Réponses: 5
    Dernier message: 11/05/2004, 18h39

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