none
comment savoir si un handle de statement est déjà en cours d'utilisation ? (se fait fetcher par exemple) RRS feed

  • Discussion générale

  • Bonjour,

    je fais

      SQLRETURN sqlReturn;
      sqlReturn=SQLExecute(*lphSqlStmt);

    mais le handle est déjà en cours d'utilisation ce qui me créé une erreur "[Microsoft][ODBC Driver Manager] Invalid cursor state".

    Y-a-t-il un moyen pour poser la question sur ce handle : "est-il "busy" ?"

    merci

    lundi 17 décembre 2012 11:39

Toutes les réponses

  • Bonjour,

    Pas spécialement familier avec ODBC mais plus généralement pour les "handles", le principe est souvent d'allouer à chaque objet son propre handle. Par exemple si on ouvre plusieurs fichiers en même temps avec des handles on va plutôt concevoir l'application de telle façon que chaque fichier utilise son propre handle (ou alors si l'ouverture/fermeture se produit dans une même fonction, utiliser un handle local à cette fonction) plutôt que d'esssayer d'utiliser un même handle global à l'application pour plusieurs fichiers.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    lundi 17 décembre 2012 12:56
  • Bonjour et merci pour la réponse.

    Le problème étant ici que c'est justement un cas où il faut utiliser le même HANDLE.

    Puisque c'est le moyen d'avoir un cache de statements... en fait on prepare un statement, on l'exécute. Ensuite, on le ferme ( SQLCloseCursor( hStmt ) ) au lieu de le libérer ( SQLFreeStmt(hStmt, SQL_CLOSE) ).

    lundi 17 décembre 2012 16:37
  • Même avec un cache, la logique de l'application devrait garantir que l'on n'essaye pas d'utiliser le handle alors qu'il est déjà en cours d'utilisation ailleurs. L'utilisation précédente est-elle effectivement terminée ? Si on veut le gérer, je ne pense pas qu'il existe grand chose au niveau d'ODBC lui-même, ce serait plutôt à l'application de maintenir une liste des handles avec leur usage pour pouvoir les réutiliser ou éventuellement en créer un nouveau si besoin au niveau de ce fameux cache.

    J'ai essayé de voir si il existe un forum ODBC sans succès. Espérons que qq de plus compétent que moi sur ODBC prendra la suite (mais à priori je vois peu de questions sur ODBC dans ce forum).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mardi 18 décembre 2012 09:35
  • Bonjour,

    Peut-etre http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/threads mais il est en anglais avec obligation d'ecrire en anglais ( vu le nombre de "posters" pour qui l'anglais n'est pas la langue maternelle, ceux qui repondent ne sont pas trop regardant sur quelques fautes d'orthographe )

    Pour faciliter toute recherche concernant votre probleme, pourriez-vous donner quelques informations complementaires ?

    - la version et fournisseur du driver ODBC

    - la version du SQL Server a laquelle vous vous connectez

    - le langage que vous utilisez ( je suppose VC++ mais quelle version VC++ 6,2005,2008,2010,2012 ?)

    Toutes ces informations sont toujours utiles a fournir des le 1er post ( cela fait gagner du temps et evite de donner des reponses ne correspondant pas au vrai probleme )

    PS : Je suis desole pour les accents manquants , mais avec mon Windows 7 en-US et un clavier QWERTY, je n'ai pa encore trouve comment les generer

    Bonne journee


    Mark Post as helpful if it provides any help.Otherwise,leave it as it is.

    samedi 12 janvier 2013 10:53