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

Bases de données Delphi Discussion :

Pb de threads / query et ADO


Sujet :

Bases de données Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Pb de threads / query et ADO
    Bonjour,

    sous delphi 7 / sql server 2005 j'ai le problème suivant :

    j'ai dans mon application un TADOConnection.

    je créé une table temporaire (#temptable) dans un ADOquery créé dans un thread et connecté à ma TADOConnection (composant TADOConnection de l'application passée en paramètre dans le constructeur du thread).

    je veux ensuite faire un select dans un autre ADOQuery, également rattaché à la même TADOConnection mais ce query-ci est un composant de l'application.

    => PB : cette dernière requête ne connait pas ma table temporaire #TempTable, alors que tout cela marchait en BDE, (j'ai remplacé ma TDatabase par un TADOConnection et mes Tquery par des ADOQuery, je n'ai rien touché aux requêtes). Que se passe-t-il? Mes deux query ne sont-ils pas dans la même session alors qu'ils pointent sur le même objet ADOConnection?

    Avec des tables temporaires globales (en ##), cela fonctionne mais cette solution ne me convient pas...

    Avez-vous des idées pour m'aider?

    Merci d'avance!

  2. #2
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Citation Envoyé par Toto41 Voir le message
    Que se passe-t-il? Mes deux query ne sont-ils pas dans la même session alors qu'ils pointent sur le même objet ADOConnection?
    C'est malheureusement souvent le cas avec ADO. Lance SQL Server Profiler et regarde les ouverture/fermeture de connexion qui se font en même temps que tu exécutes tes requêtes.

    Tu verras qu'il est assez fréquent que ADO ouvre plusieurs connexions à la base de façon transparente. C'est même plus ou moins systématiquement le cas si tu ouvres plusieurs recordset sur la base de données en même temps.

    Jusqu'à SQL Server 2005 et MARS, il n'était pas possible d'avoir plusieurs recordset actifs en même temps. Pour contourner ce problème, ADO ouvre une autre connexion de façon transparente... Je ne sais pas si ce comportement a changé depuis que MARS est disponible, mais d'après ce que tu décris, ce n'est pas le cas.

    Pour éviter ce comportement, il faut faire attention à bien fermer chaque recordset avant d'en ouvrir un autre.

    Autre remarque : Tu arrives à utiliser le même objet ADO dans deux threads différents (l'appli et le thread secondaire) ? Chaque fois que j'ai essayé, je me suis toujours choppé une exception de marshaling indiquant que l'objet COM n'a pas été instancié pour ce thread...

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse.

    mes 2 recordsets ne sont même pas actifs en même temps, je lance le query de l'appli seulement quand celui du thread est terminé. Dans le query du thread je fais un execsql, il y a besoin de fermer le recordset quand même?

  4. #4
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Normalement ce n'est pas nécessaire sur un Exec, puisque l'Exec ne retourne rien. Cependant, je ne sais pas exactement ce qui est fait dans la couche dbGO.

    Maintenant, ça peut-être n'importe quel recordset ouvert précédemment sur la même connexion qui provoque le problème...

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci.

    je vais voir... enfin bon, tout ça me parait bien compliqué et surtout aléatoire!!

Discussions similaires

  1. [ADO] Query et Parameters
    Par surfer2k dans le forum Bases de données
    Réponses: 12
    Dernier message: 02/03/2010, 13h20
  2. datetime query ado datetimetostr
    Par ouiouioui dans le forum Bases de données
    Réponses: 7
    Dernier message: 29/06/2009, 11h27
  3. Ou je trouve l'erreuer dans ce code[ADO Query]
    Par aliwassem dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/04/2007, 14h07
  4. ADO et Query
    Par care dans le forum Bases de données
    Réponses: 7
    Dernier message: 06/02/2007, 14h04
  5. Réponses: 5
    Dernier message: 09/10/2006, 16h20

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