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
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
Il suffit de lancer un Close sur le TQuery.
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.
si j'ai bien compris, c'est pas compliqué:
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 try Qry1.Open; //... finally Qry1.Close; end;
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."
Bonjour,
je dirais plutôt cela :
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)
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;
@++
Dany
Mon Tutoriel sur le développement Intraweb
N'oubliez pas de consulter les FAQ Delphi ainsi que les Cours et tutoriels sur la programmation Delphi
Merci monsieur,
Si vous essayez ce code, vous obtenirez aucun résultat. Plus y a pas la création de la requête.merci
Bonjour,
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
voici un exemple ici utilisation de BDEcomment créer une requête d'une façon dynamique
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 // 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;
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
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
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
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
À 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
sans autres explications et c'est dans ce but que j'ai répondu.Merci monsieur,
Si vous essayez ce code, vous obtenirez aucun résultat. Plus y a pas la création de la requête.merci
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
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.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 !!!?
[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éen’importe quel version de delphi il existe Tquery et TadoQuery, elle ne mérite pas de détails !
s'agit-il de la solution ? car noyée dans vos invectives je n'en suis pas certain .3- la réponse est très claire (on utilise prepare unprepare pour Tquery et prepared pour TadoQuery )
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager