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é :
Voici la sortie :
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
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 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)
Le QSqlRecord contient donc bien les données, mais le champs "id_tx_transmission" est toujours à zéro dans la base de données.
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)
Merci d'avance pour votre aide
Partager