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

ASP Discussion :

Command.Execute laisse le recordset ouvert


Sujet :

ASP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut Command.Execute laisse le recordset ouvert
    Salut,

    Je ne tiens pas à faire de multipost, je préfère isoler ce pb.

    Deux fonctions appelées l'une après l'autre mettent à jour différents champs d'un enregistrement (je ne peux pas les rassembler).

    En utilisant la methode command.execute(SQL) pour mettre à jour un enregistrement, je reçois ce message d'erreur:
    Microsoft OLE DB Provider for ODBC Drivers error '80004005'

    [Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine stopped the process because you and another user are attempting to change the same data at the same time.

    /cfm_test/proc/procforstatus.asp, line 81
    Comment terminer cette commande proprement sans faire pour ne pas recevoir d'erreur?

    Merci.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    367
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 367
    Par défaut
    Il faut toujours fermer l'objet connexion, pourquoi veut tu le laisser ouvert ?

    Lorsque tu fais Objectconnexion.Execute, tu n'instancie pas de recordset

  3. #3
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Comment faut-il conprendre cela alors?
    Citation Envoyé par msdn.microsoft.com
    Using the Execute method on a Command object executes the query specified in the CommandText property or CommandStream property of the object.

    Results are returned in a Recordset (by default) or as a stream of binary information. To obtain a binary stream, specify adExecuteStream in Options, then supply a stream by setting Command.Properties("Output Stream"). An ADO Stream object can be specified to receive the results, or another stream object such as the IIS Response object can be specified. If no stream was specified before calling Execute with adExecuteStream, an error occurs. The position of the stream on return from Execute is provider specific.

    If the command is not intended to return results (for example, an SQL UPDATE query) the provider returns Nothing as long as the option adExecuteNoRecords is specified; otherwise Execute returns a closed Recordset. Some application languages allow you to ignore this return value if no Recordset is desired.
    http://msdn.microsoft.com/library/de...cmdexecute.asp
    Citation Envoyé par Gwenn
    Il faut toujours fermer l'objet connexion
    Par le set cm = nothing?
    Mon objet cm est ouvert et fermé dans des procedures appelées systematiquement au début et à la fin de ma page. Je ne tiens pas particulièrement à le fermer entre-temps.

    Merci de ton aide
    "Winter is coming" (ma nouvelle page d'accueil)

  4. #4
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    En faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set cmd = Server.CreateObject("ADODB.Command")
    cmd.ActiveConnection = objConn
    (traitement)
    set cmd = nothing
    Je reçois tjrs le mm message d'erreur.

    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    367
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 367
    Par défaut
    En effet, si ta chaine SQL est une instruction SELECT, Objetconnexion.Execute te retourne un recordset. Pour update ou Insert, non

    Comme on en parlé dans l'autre post, l'asp permet un travail en mode connecté, exactement comme tu le fais (tu ouvres au debut de page, tu fermes a la fin). Ca présente des facilités, mais je me demande si tu te heuretes pas aux inconvénients.

    comme je te le disais, avec .net tu n'a pas besoin de les fermer, il te ferme a ta place

    En général, tous mes acces aux bases, dont dans des fonctions ou procedures, et a chaque fois, je créé, j'ouvre, je ferme, je détruis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set oConn = Server.CreateObjet("ADODB.connexion)
    oConn = mabd
    oconn.Execute(strSQL)
    oConn.Close
    Set oConn=Nothing

  6. #6
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Toi tu fais :
    Set oConn = Server.CreateObjet("ADODB.connexion")
    Mais moi :
    set cmd = Server.CreateObject("ADODB.Command")
    Ca fait une grosse difference ou pas?
    "Winter is coming" (ma nouvelle page d'accueil)

  7. #7
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Bah c'est pas le même objet! Command est plus complet.
    Mon site préféré :Command vs Connection (on pourrait même le confronter à Recordset)

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    367
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 367
    Par défaut
    Bin c'est pas le meme objet qui est declare

    Mon raisonnement est le suivant :

    J'ai besoin d'acceder a la bdd donc je crée un objet connexion
    J'utilise la Methode execute de l'objet connexion pour executer une chaine sql (s'il s'agit d'update ou insert, il n'y pas de recordset généré)
    Cette methode execute, va créer implicitement un objet command et le detruire apres execution, on a pas a se preoccuper de sa creation, fermeture, destruction (c'est l'interet)
    Je ferme donc l'ojet connexion, puis je le detruis

  9. #9
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par franculo_caoulene
    Bah c'est pas le même objet! Command est plus complet.
    Mon pb t'inspire-t-il une solutions :



    Merci parce que je nage un peu.
    "Winter is coming" (ma nouvelle page d'accueil)

  10. #10
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Pour des requêtes ne retournant pas de valeur (insert, update, delete) la méthode de Gwenn est bonne.
    Si tu veux exécuter plusieurs requêtes tu peux juste fermer l'objet sans le détruire. Tu le détruiras après toutes les exécutions que tu souhaites faire.

  11. #11
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    OK,

    La methode de Gwenn fonctionne.



    Merci

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

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

Discussions similaires

  1. [TSQL] commande EXECUTE
    Par dav24 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/07/2007, 13h28
  2. memoire des commandes executées
    Par pierre2410 dans le forum Oracle
    Réponses: 1
    Dernier message: 13/06/2007, 15h12
  3. commande execute ne compile pas
    Par Peter57 dans le forum C++Builder
    Réponses: 7
    Dernier message: 26/02/2007, 21h12
  4. Problème : Fonctions et commande Execute
    Par bubi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/11/2005, 11h01
  5. La commande Find d'un recordset
    Par christel1982 dans le forum ASP
    Réponses: 22
    Dernier message: 14/11/2005, 20h36

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