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 :

Transactions avec MySQL/SQLite/OCI


Sujet :

Bases de données

  1. #1
    Membre actif
    Profil pro
    Consultant
    Inscrit en
    Janvier 2011
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 82
    Par défaut Transactions avec MySQL/SQLite/OCI
    Bonjour tout le monde.

    J'assaye de construire une application qui use les possibilites transactionnelles des sgdb et qt (4.7.1)

    En gros :

    Je fais :

    Db.transaction()

    J'insère 10.000 records

    Db.rollback()

    Les 10.000 records sont toujours là.

    Je crois que j'ai tout éssayé, mais sans succès.

    J'ai tout reduit a un seul programme, j'espère avoir réussi a le télécharger.

    Merci pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 23
    Par défaut
    Si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    		if (Db.transaction())
    		{
    			qDebug() << ::QString("Transaction started normally");
    		}
    		else
    		{
    			qDebug() << ::QString("Cannot start transaction");
    			exit(-1);
    		}
                    QSqlQuery					sqIn(Db);
    Ce te donne quoi ?

  3. #3
    Membre actif
    Profil pro
    Consultant
    Inscrit en
    Janvier 2011
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 82
    Par défaut
    Voici le log :

    createConnections Host: "michuka"
    createConnections Driver: "QMYSQL"
    createConnections DbName: "manu"
    createConnections User: "manu"
    createConnections Passwd: "manu"
    createconn: valid: true
    createconn: DriverName: "QMYSQL"
    createconn: Driver's: ("QSQLITE", "QMYSQL3", "QMYSQL", "QODBC3", "QODBC", "QPSQL7", "QPSQL")
    createconn: trans: transactions supported
    createconn: trans: PreparedQueries supported
    createconn: trans: BLOB supported
    main: DriverName: "QMYSQL"
    main: Driver's: ("QSQLITE", "QMYSQL3", "QMYSQL", "QODBC3", "QODBC", "QPSQL7", "QPSQL")
    main: Database: "manu"
    main: Hostname: "michuka"
    main: Records: 10000

    -->"Transaction started normally"

    5000

    -->"Normal rollback"

    La transaction est lancée normalement, le rollback aussi, et les tuples restent dans la Bd...

    Je dois dire que j'obtients le même résultat avec Oracle, je suis perplexe...

  4. #4
    Membre actif
    Profil pro
    Consultant
    Inscrit en
    Janvier 2011
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 82
    Par défaut
    Bon, j'ai trouvé une erreur (qui est mienne), la base de données MySQL, estait configurée avec le moteur MyISAM, donc pas de transactions, j'ai modifié le moteur et ça marche...

    Mais avec Oracle, c'est autre chose, j'ai pas transactions, je regarde le driver QOCI.

    Dès que je trouve, je dis quelque chose.

  5. #5
    Membre actif
    Profil pro
    Consultant
    Inscrit en
    Janvier 2011
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 82
    Par défaut
    Désolé, j'étais en voyage et pas moyen de travailler sur ce problème.

    Je crois qu'il y a un bug dans le driver Oracle qsql_oci.cpp.

    Lorsque l'on demande un nouvel identificateur de query, un partie des données du driver sont copiées sur l'identificateur, dont le flag de transaction, lorsque l'on demande une transaction (ceci se fait au niveau du driver), l'identificateur n'est pas mis a jour, j'ai remplacé la copie du flag de transaction dans la structure de l'identificateur par un pointeur au flag du driver, et ça marche.

    Voici le patche :

    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
    diff qsql_oci.cpp /tmp/work/qt-everywhere-opensource-src-4.7.2/src/sql/drivers/oci/qsql_oci.cpp
    175c175
    <     const bool *transaction;
    ---
    >     bool transaction;
    1534c1534
    <                        *d->transaction ? OCI_DEFAULT : OCI_COMMIT_ON_SUCCESS);
    ---
    >                        d->transaction ? OCI_DEFAULT : OCI_COMMIT_ON_SUCCESS);
    1770c1770
    <       sql(0), transaction(&driver->transaction), serverVersion(driver->serverVersion),
    ---
    >       sql(0), transaction(driver->transaction), serverVersion(driver->serverVersion),
    1970c1970
    <         mode = *d->transaction ? OCI_DEFAULT : OCI_COMMIT_ON_SUCCESS;
    ---
    >         mode = d->transaction ? OCI_DEFAULT : OCI_COMMIT_ON_SUCCESS;

Discussions similaires

  1. Transactions imbriquées avec MySQL
    Par sheepolata dans le forum Requêtes
    Réponses: 0
    Dernier message: 18/03/2010, 11h40
  2. Help ODBC avec Mysql
    Par Ashura75013 dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/02/2004, 08h11
  3. Probleme avec Mysql
    Par kevinss dans le forum Administration
    Réponses: 5
    Dernier message: 31/10/2003, 10h43
  4. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 13h52
  5. Transaction avec DoCmd.runsql ???
    Par Gandalf24 dans le forum VBA Access
    Réponses: 29
    Dernier message: 11/02/2003, 20h35

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