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 :

Query qui ne se détruisent pas


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 145
    Points
    145
    Par défaut Query qui ne se détruisent pas
    Bonjour,

    J'ai un souci, et j'ai beau chercher sur le forum, je ne trouve pas la solution. Je m'explique. Dans une procédure, j'effectue une requête "Update". Cette procédure est appelée de très nombreuses fois et après chaque appel, je constate que la connexion qui a servi pour effectuer cette procédure est encore là (je regarde dans mysql le nombre de connexion avec show processlist).

    Or, le nombre de connection étant limité, j'arrive rapidement à l'exception 'too many connections' (qui est logique). Sachant que je ne veux pas augmenter le nombre de connections max, comment dois je faire pour détruire la connection ayant servi pour la requête ? J'ai essayé Free, FreeAndNil, Close, Destroy et aucun résultat.

    Voici le code de la fonction qui engendre l'ajout d'une connexion supplémentaire après chaque appel :

    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
    procedure LierFluxHacheFluxOriginal(IdFluxHache: integer);
    var
      Query: TSQLQuery;
    begin
      Query := TSQLQuery.Create(nil);
      try
        Query.SQLConnection := TConnection.GetConnection;
        Query.SQL.Add('UPDATE info');
        Query.SQL.Add('SET fk_id_info_deux = ' + intToStr(Id));
        Query.SQL.Add('WHERE id_info  = ' + intToStr(IdOriginal) + ';');
        Query.ExecSQL;
      finally
        FreeAndNil(Query);
      end;
    end;
    Si quelqu'un a une piste, je suis preneur. Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    bonsoir,
    essaye de faire un close avant de libérer la query:
    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
    procedure LierFluxHacheFluxOriginal(IdFluxHache: integer);
    var
      Query: TSQLQuery;
    begin
      Query := TSQLQuery.Create(nil);
      try
        Query.SQLConnection := TConnection.GetConnection;
        Query.SQL.Add('UPDATE info');
        Query.SQL.Add('SET fk_id_info_deux = ' + intToStr(Id));
        Query.SQL.Add('WHERE id_info  = ' + intToStr(IdOriginal) + ';');
        Query.ExecSQL;
      finally
        Query.Close;
        FreeAndNil(Query);
      end;
    end;
    a+

    NABIL74

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par NABIL74 Voir le message
    bonsoir,
    essaye de faire un close avant de libérer la query
    Salut,

    Je viens d'essayer mais toujours le même problème... Merci quand même.

  4. #4
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    salut,
    keul85 dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query.SQLConnection := TConnection.GetConnection;
    ici tu ouvres la connexion à ta query et puis avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     .
    FreeAndNil(Query);
    tu fermes et libère ta query mais la connexion reste toujours "ouverte"!
    il faut fermer la connexion juste après la fermeture de la query.

    a+

    NABIL74

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 145
    Points
    145
    Par défaut
    C'est bon, je viens de résoudre le problème. En fait, il s'agissait de mettre ExecSQL(true) et non ExecSQL tout seul.

    Par contre, je ne trouve nulle part la signification de ce paramètre. Si quelqu'un pouvait éclairer ma lanterne, ça serait cool. Résoudre un problème c'est bien mais avoir compris ce qui clochait c'est encore mieux !

  6. #6
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    que fait exactement TConnection.GetConnection;???
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 460
    Points : 24 874
    Points
    24 874
    Par défaut
    On peut espérer un Singleton, sinon, il est évident vu le problème que cela créé une nouvelle instance à chaque fois !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. [FLASH MX2004] Clip qui ne s'arrête pas
    Par romain starck dans le forum ActionScript 1 & ActionScript 2
    Réponses: 8
    Dernier message: 10/05/2006, 19h43
  2. [debutant][Tomcat]Images qui ne s'affichent pas
    Par omega dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/04/2004, 09h44
  3. [trigger] ... qui ne se déclenche pas
    Par bozo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/01/2004, 11h31
  4. [MFC] Ces fenêtres qui ne s'affichent pas..
    Par Davide dans le forum MFC
    Réponses: 3
    Dernier message: 19/11/2003, 11h30
  5. [D7-EXCEL2000] Formule dans cellule Excel qui ne se calcule pas
    Par Albertolino dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 09/09/2003, 14h18

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