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

Delphi Discussion :

création des requêtes dynamique


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Points : 0
    Points
    0
    Par défaut création des requêtes dynamique
    Salut
    Je voudrais savoir comment créer une requête d'une façon dynamique comme la création des fenêtres (try...finally) . c'est à dire afin de libérer la mémoire. Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Il suffit de lancer un Close sur le TQuery.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Points : 0
    Points
    0
    Par défaut
    Merci Andnotor pour votre réponse ! close ne libère pas la mémoire. j’utilise close dans mon programme mais a un certain nombre il me déclare qu'il y a une insuffisance de mémoire où je dois fermer mon programme et de relancer.

  4. #4
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 559
    Points : 3 946
    Points
    3 946
    Par défaut
    si j'ai bien compris, c'est pas compliqué:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try
      Qry1.Open;
      //...
    finally
      Qry1.Close;
    end;
    La construction try...finally...end permet la mise en place d'un bloc de protection de ressource (au sens large) i.e. qu'on mobilise une ressource dont on on doit s'assurer la restitution après emploi.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  5. #5
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    Bonjour,

    je dirais plutôt cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try
      Qry1.Open;
      //...
    finally
      Qry1.Close;
      Qry1.Free;
    end;
    le Close ferme la requette, mais ne libère pas la place mémoire occupée par le Qry (qui si j'ai bien compris est créé dynamiquement)

    @++
    Dany

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Points : 0
    Points
    0
    Par défaut
    Merci monsieur,
    Si vous essayez ce code, vous obtenirez aucun résultat. Plus y a pas la création de la requête.merci

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par madmohamed Voir le message
    Merci monsieur,
    Si vous essayez ce code, vous obtenez aucun résultat. Plus n'y a pas la création de la requête.merci
    vous avez mal lu le code proposé , les "// ..." étaient pour indiquer la suite du traitement à faire.
    Comme vous n'en donnez aucun ce n'est pas nous qui pourront le le mettre à votre place !

    de plus étayez votre demande : version de Delphi, composants d'accès à la base de données, Type de base de données sont des éléments importants pour donner une réponse qui vous satisferait . Bref Apprenez à poser correctement un problème pour obtenir une réponse correcte (le fameux principe du G.I.G.O. informatique) cela est particulièrement frappant lorsque l'on lit par un exemple un autre de vos posts . Ne vous étonnez donc pas des et de votre nombre de points négatifs si vous ne faites pas l'effort d'une demande "construite"

    Pour reprendre complètement
    comment créer une requête d'une façon dynamique
    voici un exemple ici utilisation de BDE
    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
    17
    18
     
    // mettre à 0 les cotisations des adhérents
    procedure razcotisations;
    var UneQuery : TQuery;
    .....
    begin
    UneQuery:=TQuery.Create(nil);
    try
    // associer la requête à la connexion 
    // par exemple pour BDE 
      UneQuery.DatabaseName:=DataBase1; // database1 est un TDatabase;
      UneQuery.SQL.Text:='UPDATE ADHERENTS SET COTISATION=0';
      UneQuery.ExecSQL;
    finally
      UneQuery.Free;
    end;
    .....
    end;
    une autre manière de faire le même traitement à éviter absolument
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // mettre à 0 les cotisations des adhérents
    procedure razcotisations;
    var UneQuery : TQuery;
    .....
    begin
    UneQuery:=TQuery.Create(nil);
    try
    // associer la requête à la connexion 
    // par exemple pour BDE 
      UneQuery.DatabaseName:=DataBase1; // database1 est un TDatabase;
      UneQuery.SQL.Text:='SELECT * FROM ADHERENTS';
      UneQuery.Open;
      While not UneQuery.EOF do
        begin
           UneQuery.Edit;
           UneQuery.FieldByName('COTISATION').asFloat:=0.00;
           UneQUery.Post;
           UneQuery.Next;
        end;
    finally
      UneQuery.Close;
      UneQuery.Free;
    end;
    .....
    end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Sinon faudra apprendre à chercher
    il y a meme le code sur la pour BDE TQuery et TADOQuery

    Pour le code à ne surtout pas faire, j'ajouterais qu'il est même à bannir de modifier un résultat d'un Query dans n'importe quelle lib
    On ne maitrise pas les requêtes générées sans parler que certains composant sont conçus pour forcer le développeur à gérer la conciliation de données lors d'accès concurrentiel et cela n'a rien d'évident

    le Close dans le Free est mal placé, si lui aussi provoque une exception, cela ne libèrera jamais l'objet
    il manque le Next cela ne risque pas de fonctionner
    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

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    le Close dans le Free est mal placé, si lui aussi provoque une exception, cela ne libèrera jamais l'objet
    là je plaide à moitié coupable, j'ai repris le code de Skywaukers sans chercher midi à 14 heures
    il manque un try except si l'on veut blinder le truc
    il manque le Next cela ne risque pas de fonctionner
    méa culpa c'est corrigé (ainsi que les balises manquantes)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Points : 0
    Points
    0
    Par défaut
    Bonjour, merci pour les réponses.
    et pour toi monsieur SergioMaster, si je suis un illettré tu dois me respecter et ne m'envoyer pas un , si tu es un grand développeur n'oublie pas que tu étais comme moi ou plus. moi j'ai dit dans un forum " pas de réponse " , tu m'as envoyé un avertissement et toi m'as donné !!!, qui te donnez un avertissement ou vous appliquer la règle (oui pour nouset non pour vous!!!???)
    1- pour cette question http://www.developpez.net/forums/d15...e/#post8367612 . vas y et essayer si tu peux faire ce qui je voudrais par les réponses postés.
    2- pour ma question que je l'ai posté dans ce forum. j'ai dis une requête : n’importe quel version de delphi il existe Tquery et TadoQuery, elle ne mérite pas de détails !!! plus de ça ta réponse elle est pas juste !!! on veut liberer les ressources de la memoire, et par ton code tu libère le composant et pas les ressources allouées. exécuter ton code avant de répondre !!!?
    3- la réponse est trés clair (on utilise prepare unprepare pour Tquery et prepared pour TadoQuery ) et merci pour les gens qui sont m'aider sans m'insulter.
    4- j'ai laissé le nombre de points pour toi SergioMaster.
    j'ai regardé que les anglophones malgré j'ai un problème de la langue pure que le français et j'ai posté des question qui semblent bêtes pour toi mais toujours des réponses et des helps sur place sans ..........
    pardonnez moi les autres

  11. #11
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par madmohamed Voir le message
    pardonnez moi les autres
    non
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    À votre susceptibilité :
    où vous ai-je traité d'illettré ou indiqué que la question était bête ?
    je vous ai simplement fait remarquer que plus vous nous fournissez d'informations plus vous aurez une réponse exacte.

    si je vous ai fait remontrance c'est que je me mets à la place de e-ric et de skywaukers à qui vous répondez
    Merci monsieur,
    Si vous essayez ce code, vous obtenirez aucun résultat. Plus y a pas la création de la requête.merci
    sans autres explications et c'est dans ce but que j'ai répondu.

    Oui, je "moinse" voire même mets des avertissements sur des posts comme "pas de réponse" ou tout autres "up" du même genre et je l'assume et si je corrige certaines fautes d'orthographe c'est simplement que je n'aime pas voir des vaguelettes rouges ou bleues sous les mots (intégrateur orthographique et grammatical inclus dans mon navigateur)

    pour le point 1 - je vous ferais remarquer qu'en fait , j'y ai répondu, de manière détourné je l'avoue en ajoutant un lien sur le post de Gaby277 : avec SQL

    pour le point 2- ce sujet j'aimerais une explication de ce que vous affirmez par
    plus de ça ta réponse elle est pas juste !!! on veut libérer les ressources de la mémoire, et par ton code tu libères le composant et pas les ressources allouées. exécuter ton code avant de répondre !!!?
    Qu'entendez vous exactement par ressources allouées ? la TQuery est bien créée dynamiquement et détruite après ! oui celle de la connexion non mais ce n'était pas le but principal et il est toujours possible de faire la même chose pour le TConnection . Ce type de code, je l'utilise fréquemment (du moins le premier) et je vous garanti qu'il n'y a pas de fuites de mémoire.

    n’importe quel version de delphi il existe Tquery et TadoQuery, elle ne mérite pas de détails !
    [Edit] hé bien non n'importe quelle version n'a pas , je pense aux versions perso qui n'avaient pas toujours les composants de connexion aux base de données à ma version de delphi 3 (oui je l'utilise encore) qui n'a pas ADO et je pourrais citer d'autres installations personnalisées où ces composants ne sont même pas installés par choix. Donc cela mérite détails quant on veut une réponse circonstanciée
    3- la réponse est très claire (on utilise prepare unprepare pour Tquery et prepared pour TadoQuery )
    s'agit-il de la solution ? car noyée dans vos invectives je n'en suis pas certain .
    en tout cas cela prouve qu'indiquer le type de composant est important et méritait détail.
    Et pour moi il ne s'agit pas de requête dynamique (où alors on ne parle pas le même langage) mais d'une libération des ressources de la base de données ( pour résumé le TQuery posé sur une form , dans le cadre d'une application client/serveur) ce qui encore une fois aurait mérité ces fameux "détails"
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. [Débutant] Création des liens dynamiques
    Par zanoubya dans le forum SharePoint
    Réponses: 2
    Dernier message: 11/07/2013, 12h45
  2. Réponses: 2
    Dernier message: 19/01/2012, 21h55
  3. [WD15] Création de requêtes dynamiques
    Par thierrybatlle dans le forum WinDev
    Réponses: 5
    Dernier message: 23/10/2010, 02h36
  4. Réponses: 3
    Dernier message: 04/08/2008, 15h35
  5. Réponses: 1
    Dernier message: 01/08/2008, 17h25

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