Bonjour,
J'essaie de faire un programme permettant:
  • de sauvegarder une table d'une base mySQL vers une table d'une base postgreSQL,
  • de libérer ensuite la place dans la base mySQL.

la sauvegarde est périodique.

Afin de garantir qu'il n'y a pas eu de perte de données en route (pb réseau, panne serveurs etc.) je réalise un recouvrement de données.

Ce recouvrement génère évidement un message d'erreur :
le code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
if (!modelPg.submitAll())//QSqlTableModel modelPg(NULL,dbConnect);
           {
               qDebug() << modelPg.lastError().text();
               qDebug() << "Type:" << modelPg.lastError().type();
               qDebug() << "Number:"<< modelPg.lastError().number();
                }
La sortie:
ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « Base24_pkey »
QPSQL: Unable to create query"
Type: 2
Number: -1

Ce qui est tout à fait cohérent mais insatisfaisant du fait du "-1".
Je souhaite en effet supprimer les lignes incriminés.


Je peux résoudre le problème "à l'aveugle" mais l'idée de me plait pas.
C'est à dire agir sans me préoccuper qu'il s'agit de la "bonne" erreur.

L'EditStrategy est à QSqlTableModel::OnManualSubmit

J'ai cherché du coté de QSqlError::setNumber() sans grand succès
Peut-être un paramétrage de la bdd... un fichier de conf à bidouiller ?

Précision:
Si je ne fait pas de recouvrement, tout fonctionne parfaitement. Le souci est uniquement de contrôler la nature de l'erreur.


Configuration :
Debian 6.0.4
Qt Creator 2.4.0
libqt4-sql-psql 4:4.6.3-4+squeeze1
postgresql-client-8.4 8.4.10-0squeeze1

Merci d'avance.