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