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

VBA Access Discussion :

Transaction avec DoCmd.runsql ??? [À faire]


Sujet :

VBA Access

  1. #1
    Membre éprouvé
    Avatar de Gandalf24
    Homme Profil pro
    Integrateur Odoo
    Inscrit en
    Mai 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Integrateur Odoo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 481
    Points : 1 013
    Points
    1 013
    Par défaut Transaction avec DoCmd.runsql ???
    HUg,
    Je fais mes premiers essais de transactions, et ca ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set MonWorkspace = DBEngine.Workspaces(0)
    MonWorkspace.BeginTrans
    DoCmd.RunSQL "INSERT INTO T_DT_Essai(a) VALUES(3)"
    MonWorkspace.Rollback
    MonWorkspace.close
    => Il me met qd meme 3 dans ma table ???!!!

    Nb : Parcontre le code suivant fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MonWorkspace.BeginTrans
    Set t = CurrentDb.OpenRecordset("t_dt_essai")
    t.AddNew
         t![a] = 3
    t.Update
    t.Close
    MonWorkspace.rollback
    Alors que Dcmd.runsql prend en second argument (facultatif et initilisé à vrai) un bollean concernant l'intégration dans une transaction ???

    Merci d'avance.

  2. #2
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Billou a dit:
    Lorsque la propriété UseTransaction a la valeur Non, la seule manière d'annuler une transaction entière est d'utiliser la méthode ADO RollbackTrans ou DAO Rollback en Visual Basic.
    Et donc, il doit falloir faire un begintrans avant la requête d'insertion.

    Frank

  3. #3
    Rédacteur
    Avatar de sinarf
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 210
    Points : 493
    Points
    493
    Par défaut
    Salut,

    Je connais pas les transaction mais
    Citation Envoyé par L'aide DAO
    Certaines bases de données à méthode d'accès séquentiel indexé (ISAM) utilisant un espace de travail Microsoft Jet risquent de ne pas accepter les transactions. Dans ce cas, la propriété Transactions des objets Database ou Recordset a la valeur False. Pour vérifier qu'une base de données permet de réaliser des transactions, consultez la valeur de la propriété Transactions de l'objet Database avant d'utiliser la méthode BeginTrans. Si vous utilisez un objet Recordset basé sur plusieurs bases de données, vérifiez la propriété Transactions de l'objet Recordset. Si un objet Recordset est entièrement basé sur des tables Microsoft Jet, il est toujours possible d'effectuer des transactions. En revanche, les objets Recordset basés sur des tables créées dans d'autres SGBD peuvent ne pas accepter les transactions. Par exemple, il est impossible d'utiliser des transactions avec un objet Recordset basé sur une table Paradox. Dans ce cas, la propriété Transactions a la valeur False. Si les objets Database ou Recordset n'acceptent pas les transactions, ces méthodes ne sont pas prises en compte et aucune erreur ne survient.
    Apparement cela peut etre normal tout dépends des objets que tu utilises. J'espère que cela te donnera des pistes pour avancer.

    Mais je vois que Franc à repondu plus vite que mois

  4. #4
    Membre éprouvé
    Avatar de Gandalf24
    Homme Profil pro
    Integrateur Odoo
    Inscrit en
    Mai 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Integrateur Odoo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 481
    Points : 1 013
    Points
    1 013
    Par défaut
    Franck :
    Cf code en exemple il y a un
    MonWorkspace.begintrans

    Sinarf :
    J'utilise un db access 97...

    Franchement je comprends pas trop ....

  5. #5
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Gandalf:
    MonWorkspace.rollback
    il est où, le Trans de RollbackTrans ?

    Autrement dit, tu devrais avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonWorkspace.rollbacktrans
    Frank

  6. #6
    Rédacteur
    Avatar de sinarf
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 210
    Points : 493
    Points
    493
    Par défaut
    Citation Envoyé par Gandalf24
    J'utilise un db access 97...

    Franchement je comprends pas trop ....
    Mois non plus je dois dire...
    Je vais faire quelsques tests pour voir. Comme ça je vais apprendre quelque chose, j'en aurrais besoin un jour ou l'autre.
    mais si j'étais toi j'esssaierai quand meme de tester le propriété transaction de database pour voir. (meme si ca devrait etre ok puisque ça marche avec un recordset mais vu que la propriété existe à la fois sur les objets recordset et database...)

    Au fait petite question à part : tu n'a pas de problème avec l'aide contextuelle de Acces 97 et DAO 3.6 ? parce que chez moi elle marche bien en 3.5 mais pas en 3.6 (problème de format de fichier d'aide chm au lieu de hlp).

  7. #7
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Sinarf:
    je crois qu'on a tous le même problème au niveau de l'aide en ligne DAO 3.6. (une vraie galère avec Acces 2000)

    Frank

  8. #8
    Rédacteur
    Avatar de sinarf
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 210
    Points : 493
    Points
    493
    Par défaut
    bon on est un peu hors sujet mais ce problème me tiens à coeur...
    Sous Access 97 le problème existe aussi pour ADO voir mon premier post sur le forum
    en particulier il y a le lien (en anglais) vers la base de connaissance de Microsoft qui te donne une solution mais sous Access 2000 peut-etre que cela t'aidera.
    Voila le lien en français.
    Le problème sous Access 97 n'est pas référencé.
    Je peux pas tester leur solution en sous Access 2000 alors tiens moi au courant, merci.

  9. #9
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    je regarderai ça ce soir. (c'est sur mon ordi perso que je rencontre ce pb)
    En tout cas, merci, car j'ai déjà posé la question sur cette erreur sur plusieurs forum et je n'ai jamais eu la moindre réponse me donnant la solution.

  10. #10
    Rédacteur
    Avatar de sinarf
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 210
    Points : 493
    Points
    493
    Par défaut
    On reviens sur notre sujet de départ. J'ai testé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub testTransaction()
        Dim ws As Workspace
        Set ws = DBEngine.Workspaces(0)
        ws.BeginTrans
        DoCmd.RunSQL "INSERT INTO tblTest(Nom) VALUES('Test RunSQL Commit')" , True
        CurrentDb.Execute "INSERT INTO tblTest(Nom) VALUES('Test Execute Commit')"
        ws.CommitTrans
        ws.BeginTrans
        DoCmd.RunSQL "INSERT INTO tblTest(Nom) VALUES('Test RunSQL RollBack')", True
        CurrentDb.Execute "INSERT INTO tblTest(Nom) VALUES('test execute Rollback')"
        ws.Rollback
        ws.Close
    End Sub
    Le champs nom de tblTest est un champ Texte.
    J'ai 3 lignes insérées :
    Test RunSQL Commit
    Test Execute Commit
    Test RunSQL RollBack

    J'en deduit que la methode Docmd.RunSQL ne tiens pas compte de la transaction, malgré le paramètre Usetransaction =True (de toute facon valeur par defaut) mais cela fonctionne très bien avec Currentdb.Execute

    Désolé donc de ne pouvoir te proposer d'explication, juste une manière pour contourner le problème.

    Un de nos spécialistes aura-t-il la réponse ? Aurions nous atteins la limite de leurs connaissances ? Bidou, Caféine, ZeMenace ? Ah il font moins les malins, là
    Bon plus sérieusement, je continue les recherches de mon coté le premier qui trouve a gagné

  11. #11
    Rédacteur
    Avatar de sinarf
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 210
    Points : 493
    Points
    493
    Par défaut
    Deja une piste sur le forum microsoft.public.fr.access, ce message donne un début d'explication, masi toujours pas de solution.

  12. #12
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut

  13. #13
    Rédacteur
    Avatar de sinarf
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 210
    Points : 493
    Points
    493
    Par défaut
    Désolé Franck mais tu es hors sujet on parle de Transaction en DAO et de la méthode docmd.runSQL .
    Pas de recordset avec ADO.

  14. #14
    Membre éprouvé
    Avatar de Gandalf24
    Homme Profil pro
    Integrateur Odoo
    Inscrit en
    Mai 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Integrateur Odoo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 481
    Points : 1 013
    Points
    1 013
    Par défaut
    Merci a vous sinaf et franck por vous etre interessé au problème.
    J'ai été voir le message, mais on ne sait pas vraiment si le rollback fonctionne vu qu'il est dans une clause erreur... a-t-elle été testée???
    Sinon, je vais de ce pas essayer avec currentdb.execute (mais il me semble que j'ai déjà testé hier,enfin, je réessaye.
    Sinon concernant l'aide DAO 3.6, je peux pas vous dire, j'ai réinstallé un win98 vierge avec un access 97, et on a que DAO 3.5 (et oui, il faut se mettre en condition "Chez Clients" (Il pourrait penser à updater....)(enfin ca va il m'a dit qu'il venait de virrer leurs 486).

    Franck : Aide access 97 dit que les méthodes sont Begintrans, CommitTrans, et Rollback (sans trans) (il me semble que Rollbacktrans est utilisé pour dao3.6 ou ado, je sais plus...)
    Enfin j'essaye avec execute
    A + et déjà un gros merci

    Nb : Grosse erreur de ma part dans le titre du poste : il ne s'agit pas de dao3.6 mais dao3.5... (je sais je suis inexcusable (koi que c'était dimanche à 0:35...))

  15. #15
    Rédacteur
    Avatar de sinarf
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 210
    Points : 493
    Points
    493
    Par défaut
    Citation Envoyé par Gandalf24
    Merci a vous sinarf et franck pour vous etre interessé au problème.
    De rien
    Citation Envoyé par Gandalf24
    J'ai été voir le message, mais on ne sait pas vraiment si le rollback fonctionne vu qu'il est dans une clause erreur... a-t-elle été testée???
    Non il donne juste une piste en parlant du contexte. Le concours reste ouvert pour trouver la solution
    Citation Envoyé par Gandalf24
    (Il pourrait penser à updater....)
    Moi je le déconseillerai, j'ai DAO 3.6 sur ma machine mais j'utilise la 3.5 pour avoir l'aide contextuelle, masi bon je suis pas développeur, alors je suis peut-etre moins exigent.
    Citation Envoyé par Gandalf24
    Nb : Grosse erreur de ma part dans le titre du poste : il ne s'agit pas de dao3.6 mais dao3.5... (je sais je suis inexcusable (koi que c'était dimanche à 0:35...))
    tu es pardonné, je crois que chacun d'entre nous à dit une connerie au cours de ce post.

  16. #16
    Membre éprouvé
    Avatar de Gandalf24
    Homme Profil pro
    Integrateur Odoo
    Inscrit en
    Mai 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Integrateur Odoo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 481
    Points : 1 013
    Points
    1 013
    Par défaut
    Bon ben ca va si je suis pardonné....
    Bientot le résultat de mes tests sur le currentdb.excute...
    A tout de suite

  17. #17
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Vous faites quoi là ?
    Vous utilisez 2 bibliothèques différentes !
    Depuis tout à l'heure vous dites que vous programmez en DAO.
    Et Docmd ... ? C'est du DAO ça ?
    C'est de l'Access.
    Voilà pourquoi ca ne marche pas.
    Vous n'êtes pas dans la même bibliothèque !

  18. #18
    Membre éprouvé
    Avatar de Gandalf24
    Homme Profil pro
    Integrateur Odoo
    Inscrit en
    Mai 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Integrateur Odoo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 481
    Points : 1 013
    Points
    1 013
    Par défaut
    Il faut utiliser koi alors pour ces de transactions avec un docmd???

  19. #19
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Je ne sais pas moi...
    du DAO !

    tu pourrais essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test()
        Dim wks As DAO.Workspace
        Dim dbs As DAO.Database
        Set wks = DBEngine.CreateWorkspace("azertyuio", "admin", "", dbUseJet)
        Set dbs = wks.OpenDatabase(CurrentDb.Name)
        wks.BeginTrans
        dbs.Execute "Insert into Table1(ChampTexte) values('un test')"
        wks.Rollback
    End Sub
    Ca marche chez moi ...

  20. #20
    Membre éprouvé
    Avatar de Gandalf24
    Homme Profil pro
    Integrateur Odoo
    Inscrit en
    Mai 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Integrateur Odoo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 481
    Points : 1 013
    Points
    1 013
    Par défaut
    Ok ce que tu donnes marche a merveille...
    Fanchement c'est cool...
    Mais il y une chose que je ne comprends pas (pas perdre de temps car le pb est resolu) :
    aide sur access 97 dit sur runsql :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    utilisertransaction Utilisez True (1) pour inclure cette requête dans une transaction. Utilisez False (0) si vous ne voulez utiliser aucune transaction. Si vous laissez cet argument vierge, la valeur par défaut (True) est choisie.
    et le liens vers Transaction dit :
    qu'il faut encadrer les docmd par begintrans et rollback (pour dao)???!!!


    [/code]

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2003] DoCmd.RunSQL avec INSERT INTO
    Par Invité dans le forum IHM
    Réponses: 9
    Dernier message: 18/09/2012, 09h07
  2. [AC-2003] j'ai un pb avec docmd.runsql
    Par luc.guiavarch dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 09/12/2010, 13h50
  3. [AC-2003] Requête sql avec méthode DoCmd.Runsql bloqué dans une transaction
    Par rana dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/03/2010, 13h20
  4. probleme avec DoCmd.RunSQL
    Par Didier77 dans le forum Access
    Réponses: 5
    Dernier message: 21/07/2006, 16h09
  5. Les transactions avec Delphi & InterBase
    Par Redhouane dans le forum Bases de données
    Réponses: 5
    Dernier message: 31/12/2004, 15h34

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