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

MFC Discussion :

[ADO] probleme de multi requête


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 46
    Points : 30
    Points
    30
    Par défaut [ADO] probleme de multi requête
    bonjour, j'ai un petit soucis avec les requêtes sous ADO avec Visual C++ .net sous win XP



    voila le principe simple :
    je suis connecté en arrivant dans la fonction (sinon les requêtes sont ignorées)

    je prépare une requête d'insertion (CString)
    je créé un recordset (ADODB::_RecordsetPtr)
    je lance ma requete (lancée dans un try catch, qui détruit l'instance précédente s'il y en a une, qui créé une nouvelle instance de recordset et qui lance un rec->Open(_bstr_t(req), connect.GetInterfacePtr(), ADODB::adOpenForwardOnly, ADODB::adLockReadOnly, ADODB::adCmdText); où rec est le recordset et et req la requete)

    ensuite je teste le recordset ( if(!rec->adoEOF) ou while (!rec->adoEOF) suivant si j'attend un ou plusieurs résultat. (ici j'utilise if)

    je récupère ce qu'il y a à récupérer, et je termine l'instance du recordset



    dans le cas d'une requête (un select ou autre), tout marche bien... j'ai jamais eu aucun probleme


    mais quand je remplace la requête par un INSERT INTO, ça se gate
    En requête simple, ça marche.

    mais si je couple :

    "INSERT INTO table ( ) VALUES () ; select @@identity as id"


    j'ai la requête qui réussit (ma base est bien mise à jour), mais le recordset semble avoir un probleme...

    le test IF (rec->adoEOF) génère une exception, et du coup, je peux pas récupérer l'id inséré... alors que sur le serveur lui même avec l'analyseur de requête (ah oui, c du SQL Server :p), tout marche bien...

    Y a t il des manipulations particulières lors d'un envoie de plusieurs requêtes ?

  2. #2
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    en fait, je reviens sur ce que j'ai dit... avec insert ça ne marche pas tout court...


    lancer un recordset avec un open contenant un insert into détruit le recordset et le rend inaccessible... la moindre utilisation engendre une exception :/

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    bon, a la lecture de la msdn, je me rend compte qu'une requete ne retournant pas quelque chose, renvoie au final un recordset fermé (ce qui est le cas d'un insert)


    ce qui explique que mon recodset ne soit plus accessible suite à l'insert simple


    je peux le faire marcher en lancant un Execute(req, NULL,NULL), puis un Open("select @@identity as id"...)

    mais mon but était d'avoir les 2 requêtes en une seule fois, avec le retour de l'id...


    Mais l'exécution des 2 requêtes en une instruction me donne le retour de la premiere : un recordset inutilisable... :/

  4. #4
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut Re: [ADO] probleme de multi requête
    Citation Envoyé par Grey
    ...
    je prépare une requête d'insertion (CString)
    je créé un recordset (ADODB::_RecordsetPtr)
    je lance ma requete (lancée dans un try catch, qui détruit l'instance précédente s'il y en a une, qui créé une nouvelle instance de recordset et qui lance un rec->Open(_bstr_t(req), connect.GetInterfacePtr(), ADODB::adOpenForwardOnly, ADODB::adLockReadOnly, ADODB::adCmdText); où rec est le recordset et et req la requete)
    ...
    Comme son nom l'indique ADODB::adLockReadOnly ne te permet pas l'écriture (donc INSERT), utilise adLockOptimistic à la place et tu devrai pouvoir faire des INSERT.

Discussions similaires

  1. [MySQL] probleme d'une requête SQL crée avec phpmyadmin
    Par ghita269 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/10/2005, 10h15
  2. [ADO/Access] Appel d’une requête avec des paramètres
    Par Taxenna dans le forum Bases de données
    Réponses: 1
    Dernier message: 07/12/2004, 14h58
  3. [ADO] Probleme lors de l'execution d'une requete...
    Par NoisetteProd dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/06/2004, 12h43
  4. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51
  5. [VB6] [ADO] Problème avec recordcount
    Par MASSAKA dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/01/2003, 11h45

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