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 :

Problème lors d'une insertion avec QSqlRelationalTableModel


Sujet :

Bases de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 29
    Par défaut Problème lors d'une insertion avec QSqlRelationalTableModel
    Bonjour,

    J'ai un QTableView relié à un QSqlRelationalTableModel.

    Pour l'affichage des données déjà présente dans la base, il n'y a aucun soucis.
    Par contre, lors de l'insertion, le champs qui est une clé étrangère est systématiquement à 0.

    Je n'ai aucune erreur retournée après l'insertion

    Voici le code incriminé :

    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
     
        QSqlRelationalTableModel m_model = new QSqlRelationalTableModel(0,baseMySql);
     
       m_model->setTable("Parametres_Com");
        m_model->setRelation(PARAMCOM_ID_TX_TRANSMISSION,QSqlRelation("Taux_Transmission","id_tx_transmission","taux_transmission"));
        m_model->setSort(PARAMCOM_ID, Qt::AscendingOrder);
        m_model->select();
     
        QSqlRecord enregistrement = m_model.data()->record();
     
        enregistrement.setValue(PARAMCOM_ID_TX_TRANSMISSION,this->m_idTxTransmission);
        enregistrement.setValue(PARAMCOM_ADRESSE,this->ui->lineEdit_Adresse->text());
        enregistrement.setValue(PARAMCOM_NB_BITS_TRANSMISSION,this->ui->cb_Nb_Bits_Transmission->currentIndex());
        enregistrement.setValue(PARAMCOM_NB_BITS_STOP,this->ui->cb_Nb_Bits_Stop->currentIndex());
        enregistrement.setValue(PARAMCOM_CONTROLE_FLUX,this->ui->cb_Type_Controle_Flux->currentIndex());
        enregistrement.setValue(PARAMCOM_PARITE,this->ui->cb_Type_Parite->currentIndex());
     
     
        for(int i=0;i<enregistrement.count();i++)
            qDebug()<<enregistrement.fieldName(i)<<" : "<<enregistrement.value(i);
     
        bool ok = m_model->insertRecord(-1,enregistrement); // Tjrs == true
    Voici la sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Connexion effectuee 
    "id_parametres_com"  :  QVariant(, )  // Id auto-incrémenté
    "taux_transmission"  :  QVariant(int, 13) // Champs qui sera à zéro même s'il contient une valeur
    "adresse"  :  QVariant(QString, "0303")
    // Le reste sont des valeurs par défaut 
    "nb_bits_transmission"  :  QVariant(int, 0) 
    "nb_bits_stop"  :  QVariant(int, 0) 
    "controle_flux"  :  QVariant(int, 0) 
    "type_parite"  :  QVariant(int, 0)
    Et la structure de la table :

    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
     
    CREATE  TABLE IF NOT EXISTS `TAM_V3`.`Parametres_Com` (
      `id_parametres_com` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT ,
      `id_tx_transmission` TINYINT UNSIGNED NOT NULL ,
      `adresse` VARCHAR(10) NULL ,
      `nb_bits_transmission` TINYINT UNSIGNED NULL DEFAULT 0 ,
      `nb_bits_stop` TINYINT NULL DEFAULT 0 ,
      `controle_flux` TINYINT NULL DEFAULT 0 ,
      `type_parite` TINYINT NULL DEFAULT 0 ,
      PRIMARY KEY (`id_parametres_com`) ,
      CONSTRAINT `fk_param_com_tx_trans`
        FOREIGN KEY (`id_tx_transmission` )
        REFERENCES `TAM_V3`.`Taux_Transmission` (`id_tx_transmission` )
        ON DELETE RESTRICT
        ON UPDATE CASCADE)
    Le QSqlRecord contient donc bien les données, mais le champs "id_tx_transmission" est toujours à zéro dans la base de données.

    Merci d'avance pour votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 111
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    QSqlRecord enregistrement = m_model.data()->record();
     
        enregistrement.setValue(PARAMCOM_ID_TX_TRANSMISSION,this->m_idTxTransmission);
        enregistrement.setValue(PARAMCOM_ADRESSE,this->ui->lineEdit_Adresse->text());
        enregistrement.setValue(PARAMCOM_NB_BITS_TRANSMISSION,this->ui->cb_Nb_Bits_Transmission->currentIndex());
        enregistrement.setValue(PARAMCOM_NB_BITS_STOP,this->ui->cb_Nb_Bits_Stop->currentIndex());
        enregistrement.setValue(PARAMCOM_CONTROLE_FLUX,this->ui->cb_Type_Controle_Flux->currentIndex());
        enregistrement.setValue(PARAMCOM_PARITE,this->ui->cb_Type_Parite->currentIndex());
    je pense qu'il faut d'abord insérer une ligne et la mettre à jour ensuite, donc remplacer le code précédent par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int row = m_model.rowCount();
    m_model.insertRow(row-1);
     
    m_model.setData(....) // pour chaque field
     
    m_model.submitAll();

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 29
    Par défaut
    Désolé pour la lenteur de ma réponse.

    Merci beaucoup, cela fonctionne parfaitement.

    Ceci dit, je ne comprends toujours pas pourquoi ma méthode ne fonctionne pas...

    Je marque "Résolu" mais si quelqu'un a une réponse à me fournir il est le bienvenu.

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

Discussions similaires

  1. [XL-2010] Problème lors d'une insertion dans une table
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/06/2015, 09h53
  2. Problème lors d'une insertion
    Par konate mohamadou dans le forum JDBC
    Réponses: 7
    Dernier message: 03/03/2014, 18h37
  3. Problème lors d'une insertion de page
    Par tomividad dans le forum VBA Word
    Réponses: 1
    Dernier message: 20/03/2009, 16h43
  4. Réponses: 2
    Dernier message: 20/10/2005, 10h50
  5. [JDesktopPane] Problème lors de l'insertion d'une JInternalFrame
    Par Invité dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 21/09/2005, 01h38

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