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

Garder un objet en vie

20 réponses
Avatar
Georges
Bonjour!

Est-ce possible de garder un objet d'Access.Application en vie même après
que la mémoire du module qui a créé cet objet soit libérée?

Parce que si db1.mdb crée un objet de type Access.Application, et aussi un
autre objet de type ADO.DataBase, ceux-ci sont automatiquement fermés dès
que db1.mdb est fermée

Merci pour toute suggestion!

10 réponses

1 2
Avatar
Michel_D
Bonjour,

Bonjour!

Est-ce possible de garder un objet d'Access.Application en vie même après
que la mémoire du module qui a créé cet objet soit libérée?

Parce que si db1.mdb crée un objet de type Access.Application, et aussi un
autre objet de type ADO.DataBase, ceux-ci sont automatiquement fermés dès
que db1.mdb est fermée

Merci pour toute suggestion!


Je ne sais pas ce que tu cherche à faire, mais tu peux créer tes objets
via un script vbs.

Avatar
Georges
et tu es sûr que le résultat de la variable ne disparaîtra pas une fois le
script terminé??


"Michel_D" a écrit dans le message de
news: %
Bonjour,

Bonjour!

Est-ce possible de garder un objet d'Access.Application en vie même après
que la mémoire du module qui a créé cet objet soit libérée?

Parce que si db1.mdb crée un objet de type Access.Application, et aussi
un autre objet de type ADO.DataBase, ceux-ci sont automatiquement fermés
dès que db1.mdb est fermée

Merci pour toute suggestion!


Je ne sais pas ce que tu cherche à faire, mais tu peux créer tes objets
via un script vbs.



Avatar
Michel_D
et tu es sûr que le résultat de la variable ne disparaîtra pas une fois le
script terminé??



Oui, mais il faut lancer Access via la méthode Run de l'objet WScript.Shell
et tu récupère l'objet Access.Application via GetObject(,"Access.Application")


"Michel_D" a écrit dans le message de
news: %
Bonjour,

Bonjour!

Est-ce possible de garder un objet d'Access.Application en vie même après
que la mémoire du module qui a créé cet objet soit libérée?

Parce que si db1.mdb crée un objet de type Access.Application, et aussi
un autre objet de type ADO.DataBase, ceux-ci sont automatiquement fermés
dès que db1.mdb est fermée

Merci pour toute suggestion!
Je ne sais pas ce que tu cherche à faire, mais tu peux créer tes objets

via un script vbs.







Avatar
Georges
Hello Michel!

Merci beaucoup pour ta réponse!
c'est exactement ce que j'ai fait en utilisant la fonction Shell.. ca marche
très bien pour l'application, mais la base de donnée qui est ouvert dans
cette nouvelle instance d'access disparait aussi tot que la variable
DataBase est supprimée de la mémoire...

Sub OpenPasswordProtectedDB()
Static acc As Access.application
Dim db As DAO.Database, pathDb As String

Shell "MsAccess", vbNormalFocus
Set acc = GetObject("", "Access.Application") 'Car je veux prendre celle
qui n'a pas de base ouverte et pas l'actuelle

acc.Visible = True
Set db = acc.DBEngine.OpenDatabase(pathDb, False, False,
";PWD=myPassword")
acc.OpenCurrentDatabase "C:Program FilesMicrosoft
OfficeOffice10SamplesNorthwind.mdb"
db.Close
Set db = Nothing
End Sub

L'application reste affichée après la fermeture du module (car lancé grâce à
Shell) mais la base est fermée!
Désolé de ne pas avoir expliqué le but de tout ca, c'était pour ne pas faire
fuir les gens..

le but est d'avoir une base sécurisé par un mot de pass (pas au niveau
workspace, car n'apparait pas quand on créé une base vide et importe les
objets de la base pseudo sécurisée)
d'avoir une autre base (ou applic vb desktop, ou n'importe..) qui se check
le login de la session Windows, et en fonction de la personne, ouvre
directement la base, ou au contraire demande le mot de pass!

Merci encore et un très bon weekend!


"Michel_D" a écrit dans le message de
news: %
et tu es sûr que le résultat de la variable ne disparaîtra pas une fois
le script terminé??



Oui, mais il faut lancer Access via la méthode Run de l'objet
WScript.Shell
et tu récupère l'objet Access.Application via
GetObject(,"Access.Application")


"Michel_D" a écrit dans le message
de news: %
Bonjour,

Bonjour!

Est-ce possible de garder un objet d'Access.Application en vie même
après que la mémoire du module qui a créé cet objet soit libérée?

Parce que si db1.mdb crée un objet de type Access.Application, et aussi
un autre objet de type ADO.DataBase, ceux-ci sont automatiquement
fermés dès que db1.mdb est fermée

Merci pour toute suggestion!
Je ne sais pas ce que tu cherche à faire, mais tu peux créer tes objets

via un script vbs.








Avatar
Michel_D
Bonjour,

Ben avec :
db.Close
Set db = Nothing

C'est normal que tu n'ai plus de base accessible, réfléchit calmement
à ce que tu veux obtenir (garder actif/accessible).

PS:Maintenant pour la finalité recherchée, je ne suis pas sur que ce soit
la bonne méthode (de mon point de vue).
Si j'ai un peu de temps, je me pencherai sur ce probléme de base sécurisée.


Hello Michel!

Merci beaucoup pour ta réponse!
c'est exactement ce que j'ai fait en utilisant la fonction Shell.. ca marche
très bien pour l'application, mais la base de donnée qui est ouvert dans
cette nouvelle instance d'access disparait aussi tot que la variable
DataBase est supprimée de la mémoire...

Sub OpenPasswordProtectedDB()
Static acc As Access.application
Dim db As DAO.Database, pathDb As String

Shell "MsAccess", vbNormalFocus
Set acc = GetObject("", "Access.Application") 'Car je veux prendre celle
qui n'a pas de base ouverte et pas l'actuelle

acc.Visible = True
Set db = acc.DBEngine.OpenDatabase(pathDb, False, False,
";PWD=myPassword")
acc.OpenCurrentDatabase "C:Program FilesMicrosoft
OfficeOffice10SamplesNorthwind.mdb"
db.Close
Set db = Nothing
End Sub

L'application reste affichée après la fermeture du module (car lancé grâce à
Shell) mais la base est fermée!
Désolé de ne pas avoir expliqué le but de tout ca, c'était pour ne pas faire
fuir les gens..

le but est d'avoir une base sécurisé par un mot de pass (pas au niveau
workspace, car n'apparait pas quand on créé une base vide et importe les
objets de la base pseudo sécurisée)
d'avoir une autre base (ou applic vb desktop, ou n'importe..) qui se check
le login de la session Windows, et en fonction de la personne, ouvre
directement la base, ou au contraire demande le mot de pass!

Merci encore et un très bon weekend!


"Michel_D" a écrit dans le message de
news: %
et tu es sûr que le résultat de la variable ne disparaîtra pas une fois
le script terminé??


Oui, mais il faut lancer Access via la méthode Run de l'objet
WScript.Shell
et tu récupère l'objet Access.Application via
GetObject(,"Access.Application")


"Michel_D" a écrit dans le message
de news: %
Bonjour,

Bonjour!

Est-ce possible de garder un objet d'Access.Application en vie même
après que la mémoire du module qui a créé cet objet soit libérée?

Parce que si db1.mdb crée un objet de type Access.Application, et aussi
un autre objet de type ADO.DataBase, ceux-ci sont automatiquement
fermés dès que db1.mdb est fermée

Merci pour toute suggestion!
Je ne sais pas ce que tu cherche à faire, mais tu peux créer tes objets

via un script vbs.










Avatar
Jac
Et si tu écrivais ta variable dans une table qui ne servirait qu'à ça.
Ensuite, depuis une autre mdb, tu pourrais faire un attachement sur cette
table et récupérer la valeur de la variable.


"Michel_D" a écrit dans le message de
news:
Bonjour,

Ben avec :
db.Close
Set db = Nothing

C'est normal que tu n'ai plus de base accessible, réfléchit calmement
à ce que tu veux obtenir (garder actif/accessible).

PS:Maintenant pour la finalité recherchée, je ne suis pas sur que ce soit
la bonne méthode (de mon point de vue).
Si j'ai un peu de temps, je me pencherai sur ce probléme de base
sécurisée.


Hello Michel!

Merci beaucoup pour ta réponse!
c'est exactement ce que j'ai fait en utilisant la fonction Shell.. ca
marche très bien pour l'application, mais la base de donnée qui est
ouvert dans cette nouvelle instance d'access disparait aussi tot que la
variable DataBase est supprimée de la mémoire...

Sub OpenPasswordProtectedDB()
Static acc As Access.application
Dim db As DAO.Database, pathDb As String

Shell "MsAccess", vbNormalFocus
Set acc = GetObject("", "Access.Application") 'Car je veux prendre
celle qui n'a pas de base ouverte et pas l'actuelle

acc.Visible = True
Set db = acc.DBEngine.OpenDatabase(pathDb, False, False,
";PWD=myPassword")
acc.OpenCurrentDatabase "C:Program FilesMicrosoft
OfficeOffice10SamplesNorthwind.mdb"
db.Close
Set db = Nothing
End Sub

L'application reste affichée après la fermeture du module (car lancé
grâce à Shell) mais la base est fermée!
Désolé de ne pas avoir expliqué le but de tout ca, c'était pour ne pas
faire fuir les gens..

le but est d'avoir une base sécurisé par un mot de pass (pas au niveau
workspace, car n'apparait pas quand on créé une base vide et importe les
objets de la base pseudo sécurisée)
d'avoir une autre base (ou applic vb desktop, ou n'importe..) qui se
check le login de la session Windows, et en fonction de la personne,
ouvre directement la base, ou au contraire demande le mot de pass!

Merci encore et un très bon weekend!


"Michel_D" a écrit dans le message
de news: %
et tu es sûr que le résultat de la variable ne disparaîtra pas une fois
le script terminé??


Oui, mais il faut lancer Access via la méthode Run de l'objet
WScript.Shell
et tu récupère l'objet Access.Application via
GetObject(,"Access.Application")


"Michel_D" a écrit dans le
message de news: %
Bonjour,

Bonjour!

Est-ce possible de garder un objet d'Access.Application en vie même
après que la mémoire du module qui a créé cet objet soit libérée?

Parce que si db1.mdb crée un objet de type Access.Application, et
aussi un autre objet de type ADO.DataBase, ceux-ci sont
automatiquement fermés dès que db1.mdb est fermée

Merci pour toute suggestion!
Je ne sais pas ce que tu cherche à faire, mais tu peux créer tes

objets
via un script vbs.












Avatar
Georges
Hello, Merci encore pour ta réponse!

Meme si je ne faisais pas de db.Close et SET db=Nothing, je dois fermer la
première base, et Access s'occupera de vider la place allouée par les
variables..

Une solution serait de garder en la base de départ ouverte mais en mode
caché, seulement ce n'est pas propre de faire ca comme ca.



"Michel_D" a écrit dans le message de
news:
Bonjour,

Ben avec :
db.Close
Set db = Nothing

C'est normal que tu n'ai plus de base accessible, réfléchit calmement
à ce que tu veux obtenir (garder actif/accessible).

PS:Maintenant pour la finalité recherchée, je ne suis pas sur que ce soit
la bonne méthode (de mon point de vue).
Si j'ai un peu de temps, je me pencherai sur ce probléme de base
sécurisée.


Hello Michel!

Merci beaucoup pour ta réponse!
c'est exactement ce que j'ai fait en utilisant la fonction Shell.. ca
marche très bien pour l'application, mais la base de donnée qui est
ouvert dans cette nouvelle instance d'access disparait aussi tot que la
variable DataBase est supprimée de la mémoire...

Sub OpenPasswordProtectedDB()
Static acc As Access.application
Dim db As DAO.Database, pathDb As String

Shell "MsAccess", vbNormalFocus
Set acc = GetObject("", "Access.Application") 'Car je veux prendre
celle qui n'a pas de base ouverte et pas l'actuelle

acc.Visible = True
Set db = acc.DBEngine.OpenDatabase(pathDb, False, False,
";PWD=myPassword")
acc.OpenCurrentDatabase "C:Program FilesMicrosoft
OfficeOffice10SamplesNorthwind.mdb"
db.Close
Set db = Nothing
End Sub

L'application reste affichée après la fermeture du module (car lancé
grâce à Shell) mais la base est fermée!
Désolé de ne pas avoir expliqué le but de tout ca, c'était pour ne pas
faire fuir les gens..

le but est d'avoir une base sécurisé par un mot de pass (pas au niveau
workspace, car n'apparait pas quand on créé une base vide et importe les
objets de la base pseudo sécurisée)
d'avoir une autre base (ou applic vb desktop, ou n'importe..) qui se
check le login de la session Windows, et en fonction de la personne,
ouvre directement la base, ou au contraire demande le mot de pass!

Merci encore et un très bon weekend!


"Michel_D" a écrit dans le message
de news: %
et tu es sûr que le résultat de la variable ne disparaîtra pas une fois
le script terminé??


Oui, mais il faut lancer Access via la méthode Run de l'objet
WScript.Shell
et tu récupère l'objet Access.Application via
GetObject(,"Access.Application")


"Michel_D" a écrit dans le
message de news: %
Bonjour,

Bonjour!

Est-ce possible de garder un objet d'Access.Application en vie même
après que la mémoire du module qui a créé cet objet soit libérée?

Parce que si db1.mdb crée un objet de type Access.Application, et
aussi un autre objet de type ADO.DataBase, ceux-ci sont
automatiquement fermés dès que db1.mdb est fermée

Merci pour toute suggestion!
Je ne sais pas ce que tu cherche à faire, mais tu peux créer tes

objets
via un script vbs.












Avatar
Jac
... qu'est-ce qui t'empêche d'écrire les variables dans une table ?
Tu pourrais même avoir cette table dans ta deuxième db et écrire tes
variables dans l'attachement que tu aurais fait dans ta première table.

Je t'explique + si nécessaire.

Jac


"Georges" a écrit dans le message de news:
47a72ccf$0$21469$
Hello, Merci encore pour ta réponse!

Meme si je ne faisais pas de db.Close et SET db=Nothing, je dois fermer la
première base, et Access s'occupera de vider la place allouée par les
variables..

Une solution serait de garder en la base de départ ouverte mais en mode
caché, seulement ce n'est pas propre de faire ca comme ca.


Avatar
Georges
Salut Jac,

Merci pour ta suggestion.. Je n'ai pas essayé de faire passer la variable
dans une table, car je ne vois pas la vrai finalité de ton idée..
je peux faire le code nécessaire pour enregistrer le contenu de la variable
qui doit être de type Integer ou Long dans une table Access, mais après j'en
fais quoi une fois que je l'ai récupéré? ce n'est pas pour autant que la
base restera ouverte... Si tu pouvais etre plus clair, cela m'aidera à
comprendre ta suggestion.

Merci d'avance


"Jac" a écrit dans le message de news:
eZ$v4V%
... qu'est-ce qui t'empêche d'écrire les variables dans une table ?
Tu pourrais même avoir cette table dans ta deuxième db et écrire tes
variables dans l'attachement que tu aurais fait dans ta première table.

Je t'explique + si nécessaire.

Jac


"Georges" a écrit dans le message de news:
47a72ccf$0$21469$
Hello, Merci encore pour ta réponse!

Meme si je ne faisais pas de db.Close et SET db=Nothing, je dois fermer
la première base, et Access s'occupera de vider la place allouée par les
variables..

Une solution serait de garder en la base de départ ouverte mais en mode
caché, seulement ce n'est pas propre de faire ca comme ca.






Avatar
Jac
Donc tu saurais écrire ta variable dans une table de la mdb1.

Reste à la récupérer dans une autre instance d'Access, mdb2.
Dans mdb2, tu vas dans les objets "table", bouton droit, "Lier des tables"
et là, tu vas dans la mdb1, pointer sur la table qui contient la variable
que tu as besoin.
Ensuite, il s'agit d'en faire ce que tu as besoin.

C'est clair ?


"Georges" a écrit dans le message de news:
47a886be$0$21469$
Salut Jac,

Merci pour ta suggestion.. Je n'ai pas essayé de faire passer la variable
dans une table, car je ne vois pas la vrai finalité de ton idée..
je peux faire le code nécessaire pour enregistrer le contenu de la
variable qui doit être de type Integer ou Long dans une table Access, mais
après j'en fais quoi une fois que je l'ai récupéré? ce n'est pas pour
autant que la base restera ouverte... Si tu pouvais etre plus clair, cela
m'aidera à comprendre ta suggestion.

Merci d'avance


"Jac" a écrit dans le message de news:
eZ$v4V%
... qu'est-ce qui t'empêche d'écrire les variables dans une table ?
Tu pourrais même avoir cette table dans ta deuxième db et écrire tes
variables dans l'attachement que tu aurais fait dans ta première table.

Je t'explique + si nécessaire.

Jac




1 2