Question pratique sur l'utilisation des objets recordsets, workspace et database

Le
Laurent
Bonjour / Bonsoir,

J'ai une petite question d'ordre pratique

Je définis mes accès au recordset comme suit :

Dim ws as workspace
Dim db as database
Dim rs as recordset

Set ws = dbengine.workspaces(0)
Set db = ws.databases(0)
Set rs = db.openrecordset("matable", dbopendynaset)

code en parcourant les enregistrements, puis

rs.close
db.close
ws.close

Un set ws = nothing ou null est-il utile, si je fais bien un close ?

A quoi sert ce "nothing" ? Merci d'éclairer ma pauvre lanterne.

Excellente soirée,
Laurent
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Raymond [mvp]
Le #6305381
Bonjour.

le close et la valeur Nothing sont deux choses différentes :

Close ferme un objet ouvert (ouvert par affectation à une variable d'objet).
La variable fait toujours référence à l'objet réel. Les ressources mémoire
et système ne sont pas libérées.
Une alternative à l'utilisation de la méthode Close est d'attribuer à une
variable d'objet la valeur Nothing.

Nothing est affecté à une variable faisant référence à un objet réel. On
utilise l'instruction Set pour attribuer Nothing à une variable objet.
Lorsque Nothing est attribué à une variable objet, cette dernière ne fait
plus référence à l'objet réel (Close de l'objet). Les ressources mémoire et
système associées à l'objet auquel la variable fait référence sont libérées
uniquement une fois que Nothing lui a été affecté.

on voit tout de suite que le close et le nothing se rejoignent dans le fait
que close ne fait que fermer l'objet alors que nothing ferme l'objet et
libère les ressources. ce qui veut dire dans la pratique:
1- tout objet ouvert doit être fermé lorqu'il n'est plus utilisé
2- la variable objet ne doit plus faire référence à l'objet réel lorsque
l'objet n'est plus utilisé, pour libérer les ressources.
3- Le fait d'affecter Nothing à une variable objet provoque un close
automatique de l'objet.
4- il est donc inutile de faire un close avant d'affecter Nothing.

le fait de faire:
rs.close
db.close
set rs = Nothing
set db = Nothing
ne fait pas plus f'effet que:
set rs = Nothing
set db = Nothing
mais rien n'interdit de faire le close et le Nothing, de la même façon qu'il
n'est pas interdit de porter des bretelles et une ceinture en même temps.
Le plus important restant quand même le fait que le Nothing doit être
impératif dès qu'on a terminé un travail avec un objet pour libérer les
ressources.

La lumière est-elle tombée sur toi ? si tant est que mes explications soient
claires ?
--
@+
Raymond Access MVP http://www.OfficeSystemAccess.com/
http://officesystem.access.over-blog.com/
http://officesystem.access.free.fr/wiki/
Pour débuter sur le forum: http://www.mpfa.info/


Cet été, j’en ai rien à coder, je me forme : les devoirs de vacances
http://www.comscamp.com/Tracker/Redirect.ashx?linkidJd96883-a859-4212-b4a0-bce47c8e0d99


"Laurent"
| Bonjour / Bonsoir,
|
| J'ai une petite question d'ordre pratique
|
| Je définis mes accès au recordset comme suit :
|
| Dim ws as workspace
| Dim db as database
| Dim rs as recordset
|
| Set ws = dbengine.workspaces(0)
| Set db = ws.databases(0)
| Set rs = db.openrecordset("matable", dbopendynaset)
|
| ... code en parcourant les enregistrements, puis ...
|
| rs.close
| db.close
| ws.close
|
| Un set ws = nothing ou null est-il utile, si je fais bien un close ?
|
| A quoi sert ce "nothing" ? Merci d'éclairer ma pauvre lanterne.
|
| Excellente soirée,
| Laurent
|
|
|
|
Laurent
Le #6304931
Merci Raymond pour tes conseils avertis. Je vais donc en tenir compte en
mettant mon compte à jour (oulala sacré travail en perspective :o)

Excellente fin de semaine à toi,

Cordialement
/Laurent/

"Raymond [mvp]" news:
Bonjour.

le close et la valeur Nothing sont deux choses différentes :

Close ferme un objet ouvert (ouvert par affectation à une variable
d'objet).

La variable fait toujours référence à l'objet réel. Les ressources mémoire
et système ne sont pas libérées.
Une alternative à l'utilisation de la méthode Close est d'attribuer à une
variable d'objet la valeur Nothing.

Nothing est affecté à une variable faisant référence à un objet réel. On
utilise l'instruction Set pour attribuer Nothing à une variable objet.
Lorsque Nothing est attribué à une variable objet, cette dernière ne fait
plus référence à l'objet réel (Close de l'objet). Les ressources mémoire
et

système associées à l'objet auquel la variable fait référence sont
libérées

uniquement une fois que Nothing lui a été affecté.

on voit tout de suite que le close et le nothing se rejoignent dans le
fait

que close ne fait que fermer l'objet alors que nothing ferme l'objet et
libère les ressources. ce qui veut dire dans la pratique:
1- tout objet ouvert doit être fermé lorqu'il n'est plus utilisé
2- la variable objet ne doit plus faire référence à l'objet réel lorsque
l'objet n'est plus utilisé, pour libérer les ressources.
3- Le fait d'affecter Nothing à une variable objet provoque un close
automatique de l'objet.
4- il est donc inutile de faire un close avant d'affecter Nothing.

le fait de faire:
rs.close
db.close
set rs = Nothing
set db = Nothing
ne fait pas plus f'effet que:
set rs = Nothing
set db = Nothing
mais rien n'interdit de faire le close et le Nothing, de la même façon
qu'il

n'est pas interdit de porter des bretelles et une ceinture en même temps.
Le plus important restant quand même le fait que le Nothing doit être
impératif dès qu'on a terminé un travail avec un objet pour libérer les
ressources.

La lumière est-elle tombée sur toi ? si tant est que mes explications
soient

claires ?
--
@+
Raymond Access MVP http://www.OfficeSystemAccess.com/
http://officesystem.access.over-blog.com/
http://officesystem.access.free.fr/wiki/
Pour débuter sur le forum: http://www.mpfa.info/


Cet été, j'en ai rien à coder, je me forme : les devoirs de vacances

http://www.comscamp.com/Tracker/Redirect.ashx?linkidJd96883-a859-4212-b4a0

-bce47c8e0d99


"Laurent"
| Bonjour / Bonsoir,
|
| J'ai une petite question d'ordre pratique
|
| Je définis mes accès au recordset comme suit :
|
| Dim ws as workspace
| Dim db as database
| Dim rs as recordset
|
| Set ws = dbengine.workspaces(0)
| Set db = ws.databases(0)
| Set rs = db.openrecordset("matable", dbopendynaset)
|
| ... code en parcourant les enregistrements, puis ...
|
| rs.close
| db.close
| ws.close
|
| Un set ws = nothing ou null est-il utile, si je fais bien un close ?
|
| A quoi sert ce "nothing" ? Merci d'éclairer ma pauvre lanterne.
|
| Excellente soirée,
| Laurent
|
|
|
|






Laurent
Le #6304921
Re,

[...]

mon compte à jour

[...]

Je voulais évidemment écrire mon ... code ... , mais le Ctrl + Enter a été
plus rapide que moi.

1000 et une excuses.

/Laurent/



"Laurent" news:#
Merci Raymond pour tes conseils avertis. Je vais donc en tenir compte en
mettant mon compte à jour (oulala sacré travail en perspective :o)

Excellente fin de semaine à toi,

Cordialement
/Laurent/

"Raymond [mvp]" news:
Bonjour.

le close et la valeur Nothing sont deux choses différentes :

Close ferme un objet ouvert (ouvert par affectation à une variable
d'objet).

La variable fait toujours référence à l'objet réel. Les ressources
mémoire


et système ne sont pas libérées.
Une alternative à l'utilisation de la méthode Close est d'attribuer à
une


variable d'objet la valeur Nothing.

Nothing est affecté à une variable faisant référence à un objet réel. On
utilise l'instruction Set pour attribuer Nothing à une variable objet.
Lorsque Nothing est attribué à une variable objet, cette dernière ne
fait


plus référence à l'objet réel (Close de l'objet). Les ressources mémoire
et

système associées à l'objet auquel la variable fait référence sont
libérées

uniquement une fois que Nothing lui a été affecté.

on voit tout de suite que le close et le nothing se rejoignent dans le
fait

que close ne fait que fermer l'objet alors que nothing ferme l'objet et
libère les ressources. ce qui veut dire dans la pratique:
1- tout objet ouvert doit être fermé lorqu'il n'est plus utilisé
2- la variable objet ne doit plus faire référence à l'objet réel lorsque
l'objet n'est plus utilisé, pour libérer les ressources.
3- Le fait d'affecter Nothing à une variable objet provoque un close
automatique de l'objet.
4- il est donc inutile de faire un close avant d'affecter Nothing.

le fait de faire:
rs.close
db.close
set rs = Nothing
set db = Nothing
ne fait pas plus f'effet que:
set rs = Nothing
set db = Nothing
mais rien n'interdit de faire le close et le Nothing, de la même façon
qu'il

n'est pas interdit de porter des bretelles et une ceinture en même
temps.


Le plus important restant quand même le fait que le Nothing doit être
impératif dès qu'on a terminé un travail avec un objet pour libérer les
ressources.

La lumière est-elle tombée sur toi ? si tant est que mes explications
soient

claires ?
--
@+
Raymond Access MVP http://www.OfficeSystemAccess.com/
http://officesystem.access.over-blog.com/
http://officesystem.access.free.fr/wiki/
Pour débuter sur le forum: http://www.mpfa.info/


Cet été, j'en ai rien à coder, je me forme : les devoirs de vacances



http://www.comscamp.com/Tracker/Redirect.ashx?linkidJd96883-a859-4212-b4a0

-bce47c8e0d99


"Laurent"
| Bonjour / Bonsoir,
|
| J'ai une petite question d'ordre pratique
|
| Je définis mes accès au recordset comme suit :
|
| Dim ws as workspace
| Dim db as database
| Dim rs as recordset
|
| Set ws = dbengine.workspaces(0)
| Set db = ws.databases(0)
| Set rs = db.openrecordset("matable", dbopendynaset)
|
| ... code en parcourant les enregistrements, puis ...
|
| rs.close
| db.close
| ws.close
|
| Un set ws = nothing ou null est-il utile, si je fais bien un close ?
|
| A quoi sert ce "nothing" ? Merci d'éclairer ma pauvre lanterne.
|
| Excellente soirée,
| Laurent
|
|
|
|










Publicité
Poster une réponse
Anonyme