Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

3 réponses
Avatar
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

3 réponses

Avatar
Raymond [mvp]
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" a écrit dans le message de news:

| 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
|
|
|
|
Avatar
Laurent
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]" wrote in message
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" a écrit dans le message de news:

| 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
|
|
|
|






Avatar
Laurent
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" wrote in message
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]" wrote in message
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" a écrit dans le message de news:

| 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
|
|
|
|