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

Access Discussion :

Problème de Transactions


Sujet :

Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Problème de Transactions
    Bonjour,
    et merci pour ce forum, bible d'informations !!!
    J'ai un souci avec les transactions et plus précisément la méthode BeginTrans

    Mon problème :
    - je veux faire plusieurs traitements sur une table temporaire (après import d'une feuille Excel)
    - je souhaiterais ne faire un COMMIT qu'à la fin du traitement (méthode CommitTrans) ou un ROLLBACK si des problèmes sont survenus (le traitement est assez long, et une interruption entrainerait des problèmes dans ma base)

    apres avoir défini
    Set wrkDefault = DBEngine.Workspaces(0)
    Set dbsNorthwind = OpenDatabase("mabase.mdb")

    et mon recordset
    Set rst = dbsNorthwind.OpenRecordset("matabletemporaire")

    je commence la transaction
    wrkDefault.BeginTrans

    et aucun moyen d'utiliser
    mabase.CreateQueryDef
    pour faire mes INSERT ou UPDATE...

    est ce que la transaction ne fonctionne qu'avec des Recordset ???
    en utilisant QueryDef, il n'ya pas moyen de retarder le COMMIT jusqu'a la fin du traitement ???

    Merci d'avance...

  2. #2
    Invité
    Invité(e)
    Par défaut


    Pour les transactions j'ai trouvé un Thread il y'a pas mal de temps dont je me suis servi !

    Voilà l'adresse :
    http://groups.google.com/group/micro...7924661dba5c0e

    C'est Michel WALSH qui à donné la soluce

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci pour le lien, c'est effectivement une technique très utile que je vais garder précieusement !!!
    Malheureusement pour moi, ce n'est pas utile pour le cas précis dont je parlais :
    - je dois utiliser plusieurs Recordset dans un traitement donné qui n'est pas lié à la RowSource d'un formulaire.
    - je ne comprends toujours pas pourquoi le QueryDef n'est pas reconnu après avoir exécuté la méthode BeginTrans...

    je cherche un autre moyen peut-etre sans transaction ???

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour blaspalles,

    Si tu veux une aide, tu devrais nous donner tout ou partie du code.
    Sinon, en te lisant, je me perds en hypothèse sur ce que tu as vraiment tenté...

    Par ailleurs, en ce qui concerne la bibliothèque DAO, j'ai bien l'impression que tu n'as pas assimilé plusieurs points fondamentaux.

    (1) Un objet Workspace permet d'ouvrir une, voire plusieurs bases de données. Chacune de ces BD est manipulable au moyen d'un objet de type Database qui est répertorié par la collection Databases de l'objet Workspace

    (2) Une transaction est exécutée dans le cadre d'un objet Workspace. Seuls les objets Database qui "appartiennent" au Workspace sont concernés par la Transaction de leur Workspace "parent".

    Mon conseil:
    ==> Ouvrir une base de données en référençant explicitement son Workspace "parent". Donc, pour reprendre ton exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim wrkDefault  As DAO.Workspace, dbsNorthwind As DAO.Database
     
    Set wrkDefault = DBEngine.Workspaces(0)
    Set dbsNorthwind = wrkDefault.OpenDatabase("mabase.mdb")
    (3) Un objet DAO QueryDef est une définition stockée d'une requête dans une base de données Microsoft Jet (dixit l'aide en ligne).
    Autrement dit, c'est une requête SQL qui est enregistrée dans une Database afin d'être exécutée ultérieurement.
    Apparemment, ton problème c'est juste de pouvoir exécuter une requête SQL produite "à la volée"... tu confirmes ?
    Pour exécuter une requête SQL INSERT, UPDATE... dont tu fournis le code, tu dois simplement utiliser la méthode Execute de l'objet Database.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ' Affecter la valeur 5 au champ ReportsTo
    ' de tous les enregistrements de la table Employees
    ' dont le champ ReportsTo vaut actuellement 2.
    ' (cf. exemple Northwind)
     
    Dim SQL As String
     
    SQL = "UPDATE Employees SET ReportsTo = 5 WHERE ReportsTo = 2"
    dbsNorthwind.Execute SQL
    L'exécution de cette requête SQL est réalisée au sein du Workspace parent de la BD désignée par dbsNorthwind.
    Si une transaction est en cours, alors les modifications apportées par cette requête ne seront définitives qu'après avoir exécuté la méthode CommitTrans de l'objet Workspace.


    Maintenant, pour répondre clairement à tes interrogations...

    Citation Envoyé par blaspalles
    est ce que la transaction ne fonctionne qu'avec des Recordset ???
    La transaction démarrée sur un Workspace s'applique à tous les objets qui dépendent de ce Workspace.
    Donc, les Databases, les Recordsets, les TableDefs, les Relations et les Querydefs.

    Citation Envoyé par blaspalles
    en utilisant QueryDef, il n'ya pas moyen de retarder le COMMIT jusqu'a la fin du traitement ???
    Je ne comprends pas la question... reporte toi au point (3) ci-dessus.

    Citation Envoyé par blaspalles
    - je ne comprends toujours pas pourquoi le QueryDef n'est pas reconnu après avoir exécuté la méthode BeginTrans...
    ... probablement parce qu'il n'existe pas dans ta BD... tu fais une confusion entre:
    * l'utilisation d'un objet QueryDef,
    * et l'exécution d'une requête SQL au moyen de la méthode Execute
    (cf. le point 3 ci-dessus ).

    Citation Envoyé par blaspalles
    je cherche un autre moyen peut-etre sans transaction ???
    Ben oui... faut peut être commencer par là...

    L'utilisation d'une transaction n'est pas obligatoire.
    C'est un moyen pour contrôler la mise à jour des données, notamment dans le but de garantir la cohérence des données.

    Bon courage et n'oublie pas de lire (et d'apprendre par coeur ) le super tutoriel DAO: http://warin.developpez.com/access/dao/.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci pour toutes ces précisions, et c'ets clair que pour moi l'utilisation du "Execute" pour exéxuter mes requetes a la volée était nettement plus efficace que la crétion d'objet QueryDef.
    En tout cas, j'ai trouvé une autre méthode pour éviter l'utilisation des transactions et celle ci me permet de gérer exactement l'insertion et modification des données dont j'ai besoin.
    En tout cas, merci pour le lien sur le thread, et sur le tuto DAO, le fait d'y jetter un oeil m'a remis certaines idées en place !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [BCK]Problème dump transaction
    Par Daniel.gil dans le forum Sybase
    Réponses: 13
    Dernier message: 01/03/2007, 12h27
  2. [delphi][interbase]problème de transaction
    Par daheda dans le forum Bases de données
    Réponses: 4
    Dernier message: 26/10/2006, 09h12
  3. problème de transaction et load data
    Par jccanut dans le forum Installation
    Réponses: 6
    Dernier message: 14/09/2006, 11h38
  4. [SQL 2k] Problème de transaction choisie comme victime
    Par Actarion dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 04/07/2006, 17h17
  5. Encore un petit problème de transaction
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/03/2005, 16h13

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