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

Il était une fois Dim db As DAO.Database...

11 réponses
Avatar
Jeff
Bonjour à tous

Avant toute chose, je pense avoir déjà posé la question mais j'ai perdu les
réponses ;-)
Donc si tel est le cas, ne criez pas trop fort !!

Voici la question: à votre avis, faut-il à chaque fois que l'on en a besoin
déclarer une variable locale
Dim db As DAO.Database ou bien peut-on (est-ce conseillé ?) en déclarer une
en globale et
l'utiliser tout au long des différentes fonctions et procédures exécutées
dans une application ?

Je ne cherche a priori aucune optimisation particulière si ce n'est de
n'avoir qu'une seule fois à déclarer
ma variable et de pouvoir l'utiliser sans avoir à faire à nouveau les
déclarations.

Bien sur dans le cas d'une utilisation globale, je l'affecte au démarrage et
la cloture à la fermeture de la base
par un Set db = Nothing (db.Close ne suffisant pas, n'est-ce pas ?)

Merci d'avance pour vos réponses

Cordialement

Jeff

10 réponses

1 2
Avatar
Jeff
Oopps j'ai retrouvé...

Désolé

Cordialement

Jeff

"Jeff" a écrit dans le message de
news:ci8r0c$q73$
Bonjour à tous

Avant toute chose, je pense avoir déjà posé la question mais j'ai perdu
les

réponses ;-)
Donc si tel est le cas, ne criez pas trop fort !!

Voici la question: à votre avis, faut-il à chaque fois que l'on en a
besoin

déclarer une variable locale
Dim db As DAO.Database ou bien peut-on (est-ce conseillé ?) en déclarer
une

en globale et
l'utiliser tout au long des différentes fonctions et procédures exécutées
dans une application ?

Je ne cherche a priori aucune optimisation particulière si ce n'est de
n'avoir qu'une seule fois à déclarer
ma variable et de pouvoir l'utiliser sans avoir à faire à nouveau les
déclarations.

Bien sur dans le cas d'une utilisation globale, je l'affecte au démarrage
et

la cloture à la fermeture de la base
par un Set db = Nothing (db.Close ne suffisant pas, n'est-ce pas ?)

Merci d'avance pour vos réponses

Cordialement

Jeff




Avatar
Jeff
Rebonjour,

Petit complément à ma question :

Que pensez de la méthode suivante :

Au lieu de :

Dim db As DAO.Database, rst As DAO.Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("...")

Faire :

Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("...")

Est-ce conseillé ?

Pour information, je suis sous Access 2002 (j'avais omis de le précisé).

Merci

Cordialement

"Jeff" a écrit dans le message de
news:ci8r0c$q73$
Bonjour à tous

Avant toute chose, je pense avoir déjà posé la question mais j'ai perdu
les

réponses ;-)
Donc si tel est le cas, ne criez pas trop fort !!

Voici la question: à votre avis, faut-il à chaque fois que l'on en a
besoin

déclarer une variable locale
Dim db As DAO.Database ou bien peut-on (est-ce conseillé ?) en déclarer
une

en globale et
l'utiliser tout au long des différentes fonctions et procédures exécutées
dans une application ?

Je ne cherche a priori aucune optimisation particulière si ce n'est de
n'avoir qu'une seule fois à déclarer
ma variable et de pouvoir l'utiliser sans avoir à faire à nouveau les
déclarations.

Bien sur dans le cas d'une utilisation globale, je l'affecte au démarrage
et

la cloture à la fermeture de la base
par un Set db = Nothing (db.Close ne suffisant pas, n'est-ce pas ?)

Merci d'avance pour vos réponses

Cordialement

Jeff




Avatar
Pierre CFI [mvp]
bonjour
justement à partir de access 2000 il y a risque de conflit (de bordel) entre ADO et DAO, donc il est plus mieux de préciser
DAO.Recordset
et il est préferable de mettre currentdb dans une variable
donc ton premier jet était bien

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Jeff" a écrit dans le message de news:ci8sil$tjn$
Rebonjour,

Petit complément à ma question :

Que pensez de la méthode suivante :

Au lieu de :

Dim db As DAO.Database, rst As DAO.Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("...")

Faire :

Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("...")

Est-ce conseillé ?

Pour information, je suis sous Access 2002 (j'avais omis de le précisé).

Merci

Cordialement

"Jeff" a écrit dans le message de
news:ci8r0c$q73$
Bonjour à tous

Avant toute chose, je pense avoir déjà posé la question mais j'ai perdu
les

réponses ;-)
Donc si tel est le cas, ne criez pas trop fort !!

Voici la question: à votre avis, faut-il à chaque fois que l'on en a
besoin

déclarer une variable locale
Dim db As DAO.Database ou bien peut-on (est-ce conseillé ?) en déclarer
une

en globale et
l'utiliser tout au long des différentes fonctions et procédures exécutées
dans une application ?

Je ne cherche a priori aucune optimisation particulière si ce n'est de
n'avoir qu'une seule fois à déclarer
ma variable et de pouvoir l'utiliser sans avoir à faire à nouveau les
déclarations.

Bien sur dans le cas d'une utilisation globale, je l'affecte au démarrage
et

la cloture à la fermeture de la base
par un Set db = Nothing (db.Close ne suffisant pas, n'est-ce pas ?)

Merci d'avance pour vos réponses

Cordialement

Jeff








Avatar
Raymond [mvp]
Bonjour jeff.

comme on dit, tu peux le faire !

Sauf qu'il ne faut pas oublier que:
- CurrentDb n'est pas un objet unique
- Currentdb ouvre obligatoirement un autre objet database chaque fois qu'on
l'utilise
- Il faut fermer le currentdb par CurrentDb.Close quand on a terminé.
- Nothing ne peut pas s'appliquer à currentdb
quand on applique ça, il n'y a aucun avantage à partir directement sur le
currentdb.

Dim Db As DAO.Database
Dim Rst As DAO.Recordset
Dim Tdf As DAO.TableDef
doivent être placés dans les déclaratives du formulaire et non dans la
procédure pour éviter de le déclarer plusieurs fois (sauf exception).
Dans la procédure Form_Load tu places cette ligne :
Set db = CurrentDb
Dans la procédure Form_UnLoad tu places cette ligne :
Set db = Nothing
de cette façon tu n'oublieras pas de déclarer et fermer ton objet Db.

ça va mieux ?
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jeff" a écrit dans le message de
news:ci8sil$tjn$
Rebonjour,

Petit complément à ma question :

Que pensez de la méthode suivante :

Au lieu de :

Dim db As DAO.Database, rst As DAO.Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("...")

Faire :

Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("...")

Est-ce conseillé ?

Pour information, je suis sous Access 2002 (j'avais omis de le précisé).

Merci

Cordialement

"Jeff" a écrit dans le message de
news:ci8r0c$q73$
Bonjour à tous

Avant toute chose, je pense avoir déjà posé la question mais j'ai perdu
les

réponses ;-)
Donc si tel est le cas, ne criez pas trop fort !!

Voici la question: à votre avis, faut-il à chaque fois que l'on en a
besoin

déclarer une variable locale
Dim db As DAO.Database ou bien peut-on (est-ce conseillé ?) en déclarer
une

en globale et
l'utiliser tout au long des différentes fonctions et procédures
exécutées


dans une application ?

Je ne cherche a priori aucune optimisation particulière si ce n'est de
n'avoir qu'une seule fois à déclarer
ma variable et de pouvoir l'utiliser sans avoir à faire à nouveau les
déclarations.

Bien sur dans le cas d'une utilisation globale, je l'affecte au
démarrage


et
la cloture à la fermeture de la base
par un Set db = Nothing (db.Close ne suffisant pas, n'est-ce pas ?)

Merci d'avance pour vos réponses

Cordialement

Jeff








Avatar
Jeff
Merci pour la réponse

Cordialement

Jeff

"Pierre CFI [mvp]" a écrit dans le message de
news:
bonjour
justement à partir de access 2000 il y a risque de conflit (de bordel)
entre ADO et DAO, donc il est plus mieux de préciser

DAO.Recordset
et il est préferable de mettre currentdb dans une variable
donc ton premier jet était bien

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Jeff" a écrit dans le message de
news:ci8sil$tjn$

Rebonjour,

Petit complément à ma question :

Que pensez de la méthode suivante :

Au lieu de :

Dim db As DAO.Database, rst As DAO.Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("...")

Faire :

Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("...")

Est-ce conseillé ?

Pour information, je suis sous Access 2002 (j'avais omis de le précisé).

Merci

Cordialement

"Jeff" a écrit dans le message de
news:ci8r0c$q73$
Bonjour à tous

Avant toute chose, je pense avoir déjà posé la question mais j'ai
perdu



les
réponses ;-)
Donc si tel est le cas, ne criez pas trop fort !!

Voici la question: à votre avis, faut-il à chaque fois que l'on en a
besoin

déclarer une variable locale
Dim db As DAO.Database ou bien peut-on (est-ce conseillé ?) en
déclarer



une
en globale et
l'utiliser tout au long des différentes fonctions et procédures
exécutées



dans une application ?

Je ne cherche a priori aucune optimisation particulière si ce n'est de
n'avoir qu'une seule fois à déclarer
ma variable et de pouvoir l'utiliser sans avoir à faire à nouveau les
déclarations.

Bien sur dans le cas d'une utilisation globale, je l'affecte au
démarrage



et
la cloture à la fermeture de la base
par un Set db = Nothing (db.Close ne suffisant pas, n'est-ce pas ?)

Merci d'avance pour vos réponses

Cordialement

Jeff












Avatar
Jeff
Merci Raymond pour tes explications.

Petite précision :

Set db = CurrentDb
...
Set db = Nothing

Ici pas de db.Close donc ? ce n'est pas nécessaire ?

Pour un objet recordset (ou autre), faut-il obligatoirement un Set rst Nothing ou dans ce cas le .Close suffit ?

Merci

Cordialement

"Raymond [mvp]" a écrit dans le message de
news:
Bonjour jeff.

comme on dit, tu peux le faire !

Sauf qu'il ne faut pas oublier que:
- CurrentDb n'est pas un objet unique
- Currentdb ouvre obligatoirement un autre objet database chaque fois
qu'on

l'utilise
- Il faut fermer le currentdb par CurrentDb.Close quand on a terminé.
- Nothing ne peut pas s'appliquer à currentdb
quand on applique ça, il n'y a aucun avantage à partir directement sur le
currentdb.

Dim Db As DAO.Database
Dim Rst As DAO.Recordset
Dim Tdf As DAO.TableDef
doivent être placés dans les déclaratives du formulaire et non dans la
procédure pour éviter de le déclarer plusieurs fois (sauf exception).
Dans la procédure Form_Load tu places cette ligne :
Set db = CurrentDb
Dans la procédure Form_UnLoad tu places cette ligne :
Set db = Nothing
de cette façon tu n'oublieras pas de déclarer et fermer ton objet Db.

ça va mieux ?
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jeff" a écrit dans le message de
news:ci8sil$tjn$
Rebonjour,

Petit complément à ma question :

Que pensez de la méthode suivante :

Au lieu de :

Dim db As DAO.Database, rst As DAO.Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("...")

Faire :

Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("...")

Est-ce conseillé ?

Pour information, je suis sous Access 2002 (j'avais omis de le précisé).

Merci

Cordialement

"Jeff" a écrit dans le message de
news:ci8r0c$q73$
Bonjour à tous

Avant toute chose, je pense avoir déjà posé la question mais j'ai
perdu



les
réponses ;-)
Donc si tel est le cas, ne criez pas trop fort !!

Voici la question: à votre avis, faut-il à chaque fois que l'on en a
besoin

déclarer une variable locale
Dim db As DAO.Database ou bien peut-on (est-ce conseillé ?) en
déclarer



une
en globale et
l'utiliser tout au long des différentes fonctions et procédures
exécutées


dans une application ?

Je ne cherche a priori aucune optimisation particulière si ce n'est de
n'avoir qu'une seule fois à déclarer
ma variable et de pouvoir l'utiliser sans avoir à faire à nouveau les
déclarations.

Bien sur dans le cas d'une utilisation globale, je l'affecte au
démarrage


et
la cloture à la fermeture de la base
par un Set db = Nothing (db.Close ne suffisant pas, n'est-ce pas ?)

Merci d'avance pour vos réponses

Cordialement

Jeff












Avatar
Pierre CFI [mvp]
Merci pour la réponse
qui est un peu plus concréte que celle de mon corrélégionnaire :o)))


--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Jeff" a écrit dans le message de news:ci8tki$ke$
Merci pour la réponse

Cordialement

Jeff

"Pierre CFI [mvp]" a écrit dans le message de
news:
bonjour
justement à partir de access 2000 il y a risque de conflit (de bordel)
entre ADO et DAO, donc il est plus mieux de préciser

DAO.Recordset
et il est préferable de mettre currentdb dans une variable
donc ton premier jet était bien

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Jeff" a écrit dans le message de
news:ci8sil$tjn$

Rebonjour,

Petit complément à ma question :

Que pensez de la méthode suivante :

Au lieu de :

Dim db As DAO.Database, rst As DAO.Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("...")

Faire :

Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("...")

Est-ce conseillé ?

Pour information, je suis sous Access 2002 (j'avais omis de le précisé).

Merci

Cordialement

"Jeff" a écrit dans le message de
news:ci8r0c$q73$
Bonjour à tous

Avant toute chose, je pense avoir déjà posé la question mais j'ai
perdu



les
réponses ;-)
Donc si tel est le cas, ne criez pas trop fort !!

Voici la question: à votre avis, faut-il à chaque fois que l'on en a
besoin

déclarer une variable locale
Dim db As DAO.Database ou bien peut-on (est-ce conseillé ?) en
déclarer



une
en globale et
l'utiliser tout au long des différentes fonctions et procédures
exécutées



dans une application ?

Je ne cherche a priori aucune optimisation particulière si ce n'est de
n'avoir qu'une seule fois à déclarer
ma variable et de pouvoir l'utiliser sans avoir à faire à nouveau les
déclarations.

Bien sur dans le cas d'une utilisation globale, je l'affecte au
démarrage



et
la cloture à la fermeture de la base
par un Set db = Nothing (db.Close ne suffisant pas, n'est-ce pas ?)

Merci d'avance pour vos réponses

Cordialement

Jeff
















Avatar
Raymond [mvp]
L'utilisation de Nothing évite d'utiliser Close.
l'utilisation de close n'évite pas de faire un Nothing.
donc faire un nothing obligatoirement et on peut se passer du close. si on
veut faire un close bien le mettre avant le nothing.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jeff" a écrit dans le message de
news:ci8trl$970$
Merci Raymond pour tes explications.

Petite précision :

Set db = CurrentDb
...
Set db = Nothing

Ici pas de db.Close donc ? ce n'est pas nécessaire ?

Pour un objet recordset (ou autre), faut-il obligatoirement un Set rst > Nothing ou dans ce cas le .Close suffit ?

Merci

Cordialement


Avatar
Jeff
Merci une fois de plus pour ta réponse.

Donc je peux remplacer mes "anciens" .Close par Set db = Nothing ou Set rst
= Nothing, n'est-ce pas ?

Dernière question (aprés j'arrête et je bosse ;-)) :

Si un recordset est fermé (rst.Close non maintenant Set rst = Nothing) mais
pas db, y a-t-il un risque de
corruption de donnée bien que le Recordset soit fermé ?

Merci

Cordialement

Jeff

"Raymond [mvp]" a écrit dans le message de
news:OnOeq$
L'utilisation de Nothing évite d'utiliser Close.
l'utilisation de close n'évite pas de faire un Nothing.
donc faire un nothing obligatoirement et on peut se passer du close. si on
veut faire un close bien le mettre avant le nothing.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jeff" a écrit dans le message de
news:ci8trl$970$
Merci Raymond pour tes explications.

Petite précision :

Set db = CurrentDb
...
Set db = Nothing

Ici pas de db.Close donc ? ce n'est pas nécessaire ?

Pour un objet recordset (ou autre), faut-il obligatoirement un Set rst > > Nothing ou dans ce cas le .Close suffit ?

Merci

Cordialement






Avatar
Raymond [mvp]
Le fait que ton recordset soit fermé , c'est bon, sauf que ton objet n'est
pas supprimé et qu'il prend de la place mémoire et que s'il est dans une
base appelée par automation la session access ouverte risque de ne pas se
fermer par le Quit parce que des objets sont ouverts.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jeff" a écrit dans le message de
news:ci8vu0$ucv$
Merci une fois de plus pour ta réponse.

Donc je peux remplacer mes "anciens" .Close par Set db = Nothing ou Set
rst

= Nothing, n'est-ce pas ?

Dernière question (aprés j'arrête et je bosse ;-)) :

Si un recordset est fermé (rst.Close non maintenant Set rst = Nothing)
mais

pas db, y a-t-il un risque de
corruption de donnée bien que le Recordset soit fermé ?

Merci

Cordialement

Jeff


1 2