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

Développement SQL Server Discussion :

Problème de connexion lors d'une transaction


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 43
    Points : 22
    Points
    22
    Par défaut Problème de connexion lors d'une transaction
    Bonjour,

    J'ai un problème avec SQL server lors d'une transaction, voici le message d'erreur que j'obtiens :

    Microsoft OLE DB Provider for SQL Server erreur '80004005'
    Impossible de créer une nouvelle connexion en mode de transaction manuelle ou distribuée.
    Ce message d'erreur survient lors de l'exécution du code suivant et notamment à l'execution de la ligne en rouge :

    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
    Dim Conn,nom_base
    nom_base= "registre"
     
    ouvre_connection Conn,"registre"
    Conn.beginTrans
     
    Dim intnip, intnipro, SQL01, rs_SQL01
    
    SQL01="select * from inclusion where nip='"&num_&"'"
    Set rs_SQL01=Conn.execute(SQL01)
    verifie_erreur Err.number,Err.description
    
    If not rs_SQL01.eof Then
        intnip = rs_SQL01("intnip")
    End If
    
    SQL01="select INTNIPRO from inclusion_procedure where NIP='"&num_&"' and NIPRO='"&numproc_&"'"
    Set rs_SQL01=Conn.execute(SQL01)
    verifie_erreur Err.number,Err.description
    je pense plus a un problème de paramètrage de la source de données ou autre plutot qu'un problème de code car celui a déjà tourné correctement.

    Merci d'avance pour votre aide

  2. #2
    Membre averti
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : R&D

    Informations forums :
    Inscription : Avril 2004
    Messages : 127
    Points : 406
    Points
    406
    Par défaut
    Apriori, tu ne peut pas avoir qu'un seul recordset dans une connexion lors de transaction (et readonly recordsets aussi)
    Solutions possibles :
    1. Ne pas utiliser les transaction car on est dans lecture
    2. Valider/annuler la transaction en cours avant une nouvelle requête

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    Bonjour et merci pour ta réponse,

    mais je ne pense pas que ce soit la solution, le bout de code que j'ai afficher n'ai que le début d'une longue serie de requetes de mise à jour etc

    Je ne vois en aucuns cas pourquoi je n'aurais pas le droit d'ouvrir plusieurs connexion pour faire des requetes dans une transaction.

    Ce code fonctionne sur notre version de DEV, il ne fonctionne pas chez un client qui à peut être une config particulière de son réseau.

    Le serveur de prod est un serveur 2003 et le serveur de base de données est un serveur 2008.

    Moi je pense plus à un problème d'autorisation qui fait que je suis limité à une connexion par transaction ; mais je ne vois pas où se paramètrage peut se situer...

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 810
    Points : 52 863
    Points
    52 863
    Billets dans le blog
    5
    Par défaut
    Une transaction n'est propre qu'à une et une seule connexion. En cas de transaction explicite, la déconnexion sans finalisation (COMMIT ou ROLLBACK) de la transaction provoque systématiquement son ROLLBACK.

    Si vous avez de multiples mises à jour à faire, il est TRÈS TRÈS TRÈS nettement préférable d'utiliser une procédure stockée.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre averti
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : R&D

    Informations forums :
    Inscription : Avril 2004
    Messages : 127
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par huggy49 Voir le message
    mais je ne pense pas que ce soit la solution, le bout de code que j'ai afficher n'ai que le début d'une longue serie de requetes de mise à jour etc
    Si, puisque il y a des contraintes ADO. Ton pb est reproduit parfaitement par un petit script VBS.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim cn
    Set cn = CreateObject("ADODB.Connection") 
    cn.ConnectionString = "Provider=SQLNCLI11;Server=.\;Database=AdventureWorks2012;Trusted_Connection=yes;"
    cn.Open
    cn.BeginTrans
    Dim rs1
    Set rs1 = cn.Execute("SELECT TOP 100 * FROM Person.Person")
    Dim rs2
    Set rs2 = cn.Execute("SELECT TOP 100 * FROM Person.Address") ' Erreur ici

Discussions similaires

  1. [11g] Problème de connexion lors d'une requête
    Par bernards111 dans le forum Connexions aux bases de données
    Réponses: 1
    Dernier message: 25/02/2015, 17h35
  2. Conversion du type DATETIME lors d'une transaction distribuée
    Par Erwan1978 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/01/2008, 11h06
  3. Problème d'accent lors d'une requête
    Par escape dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/12/2006, 13h48
  4. Réponses: 4
    Dernier message: 25/06/2006, 16h36
  5. [JDOM] Problème d'iterateur lors d'une suppression
    Par romuluslepunk dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 07/01/2006, 15h00

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