OVH Cloud OVH Cloud

VBA: condition "table dèjà en cours d'utilisation"

10 réponses
Avatar
Stach
Salut =E0 tous,

encore et toujours une petite question:

Comment dire en VBA:

"Si la table "tblTEST" est d=E9j=E0 en cours d'utilisation=20
alors..."

Merci.

Stach ;-)=20
=20

10 réponses

Avatar
Raymond
Bonjour.

Tu peux savoir si la table est chargée en direct mais tu ne peux pas savoir
si elle est utilisée, à ma connaissance, surtout avec les attaches
éventuelles.
CurrentData.AllTables("table1").IsLoaded retourne True si la table est
chargé et CurrentData.AllTables("table1").CurrentView te donne le mode
d'ouverture.
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Stach" a écrit dans le message de
news:091701c39a11$94228e40$
Salut à tous,

encore et toujours une petite question:

Comment dire en VBA:

"Si la table "tblTEST" est déjà en cours d'utilisation
alors..."

Merci.

Stach ;-)
Avatar
Stach
Merci de m'avoir répondu ;-)

Dans ce cas alors, est plutot possible d'avoir un code vba
pour:

"Si la base DORSALE est déjà en cours d'utilisation
alors..."



J'ai déjà essayer avec: If dir("CheminDorsale.LDB")<> ""
Mais ça ne marche pas, car dès que la base frontale
s'ouvre, elle appelle la Dorsale et le fichier .LDB est
directement créer, donc ça ne me permet pas de vérifier si
il existait déjà avant.

Merci

Stach ;-)


Merci.

Stach ;-)




-----Message d'origine-----
Bonjour.

Tu peux savoir si la table est chargée en direct mais tu
ne peux pas savoir

si elle est utilisée, à ma connaissance, surtout avec les
attaches

éventuelles.
CurrentData.AllTables("table1").IsLoaded retourne True si
la table est

chargé et CurrentData.AllTables("table1").CurrentView te
donne le mode

d'ouverture.
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Stach" a écrit
dans le message de

news:091701c39a11$94228e40$
Salut à tous,

encore et toujours une petite question:

Comment dire en VBA:

"Si la table "tblTEST" est déjà en cours d'utilisation
alors..."

Merci.

Stach ;-)


.



Avatar
Raymond
Quel est le résultat exact que tu attends d'une table utilisée ?

--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Stach" a écrit dans le message de
news:05b101c39a39$97a67db0$
Merci de m'avoir répondu ;-)

Dans ce cas alors, est plutot possible d'avoir un code vba
pour:

"Si la base DORSALE est déjà en cours d'utilisation
alors..."



J'ai déjà essayer avec: If dir("CheminDorsale.LDB")<> ""
Mais ça ne marche pas, car dès que la base frontale
s'ouvre, elle appelle la Dorsale et le fichier .LDB est
directement créer, donc ça ne me permet pas de vérifier si
il existait déjà avant.

Merci

Stach ;-)


Merci.

Stach ;-)




-----Message d'origine-----
Bonjour.

Tu peux savoir si la table est chargée en direct mais tu
ne peux pas savoir

si elle est utilisée, à ma connaissance, surtout avec les
attaches

éventuelles.
CurrentData.AllTables("table1").IsLoaded retourne True si
la table est

chargé et CurrentData.AllTables("table1").CurrentView te
donne le mode

d'ouverture.
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Stach" a écrit
dans le message de

news:091701c39a11$94228e40$
Salut à tous,

encore et toujours une petite question:

Comment dire en VBA:

"Si la table "tblTEST" est déjà en cours d'utilisation
alors..."

Merci.

Stach ;-)


.



Avatar
Ce que je veus faire, c'est:

si un utilisateur est déjà connecter à la base Dorsale ou
est déjà en train d'accéder à une de ses tables (via la
base Frontale) alors, Exit Function

Voila et encore merci

Stach ;-)


-----Message d'origine-----
Quel est le résultat exact que tu attends d'une table
utilisée ?


--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Stach" a écrit
dans le message de

news:05b101c39a39$97a67db0$
Merci de m'avoir répondu ;-)

Dans ce cas alors, est plutot possible d'avoir un code vba
pour:

"Si la base DORSALE est déjà en cours d'utilisation
alors..."



J'ai déjà essayer avec: If dir("CheminDorsale.LDB")<> ""
Mais ça ne marche pas, car dès que la base frontale
s'ouvre, elle appelle la Dorsale et le fichier .LDB est
directement créer, donc ça ne me permet pas de vérifier si
il existait déjà avant.

Merci

Stach ;-)


Merci.

Stach ;-)




-----Message d'origine-----
Bonjour.

Tu peux savoir si la table est chargée en direct mais tu
ne peux pas savoir

si elle est utilisée, à ma connaissance, surtout avec les
attaches

éventuelles.
CurrentData.AllTables("table1").IsLoaded retourne True si
la table est

chargé et CurrentData.AllTables("table1").CurrentView te
donne le mode

d'ouverture.
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Stach" a écrit
dans le message de

news:091701c39a11$94228e40$
Salut à tous,

encore et toujours une petite question:

Comment dire en VBA:

"Si la table "tblTEST" est déjà en cours d'utilisation
alors..."

Merci.

Stach ;-)


.



.




Avatar
Raymond
Tu veux dire qu'un utilisateur n'a pas le droit de se connecter deux fois
sur la même base ? sur le même poste ?

--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


a écrit dans le message de
news:0b8101c39a3b$99aaee50$
Ce que je veus faire, c'est:

si un utilisateur est déjà connecter à la base Dorsale ou
est déjà en train d'accéder à une de ses tables (via la
base Frontale) alors, Exit Function

Voila et encore merci

Stach ;-)
Avatar
Stach
Non, je vais essayer d'expliquer:

J' ai dans ma base Frontale, dans une macro "autoexec",
une fonction qui force l'ouverture de la base Dorsale:

Function DémarrageFrontale()

Shell "Msaccess.exe
F:Bidonmarcdllbdcompactage_princip.mdb /cmd compactage"

End Function

Lorsque la Base Dorsale s'ouvre, il y a aussi une
macro "autoexec" qui utilise une fonction afin de Copier
une table, de supprimer la première, puis de rennomer la
copie comme la première. Cela sert à avoir des NumAuto qui
continue à se suivre même si je supprime le dernier
enregistrement. Je sais que ce n'est pas conseiller, mais
ça reste la meilleure solution à mes yeux. si ça plante,
les backups sont là pour ça ;-). Je cherche à y ajouter la
condition que si qq est déjà en train de travailler avec
la base Dorsale alors la commande "cmd compactage" ne
s'effectue afin de ne pas obtenir de message d'erreur me
disant que qq est déjà occuper à utiliser la base Dorsale
et éviter d'écraser l'enregistrement qu'il est entrain de
réaliser. Voici la fonction dans la base dorsale:

Function DemarrageDorsale()

Dim strPrincipMDB As String
Dim strPrincipLDB As String
Dim obj As AccessObject, dbs As Object

strPrincipLDB = "F:Bidonmarcdllbdcompactage_princip.mdb"
strPrincipLDB = "F:Bidonmarcdllbdcompactage_princip.ldb"

If Command() <> "Compactage" Or ***???*** Then
Exit Function
ElseIf Command() = "Compactage" Then
DoCmd.CopyObject strPrincipMDB, "tblTEST2",
acTable, "tblTEST"
DoCmd.DeleteObject acTable, "tblTEST"
DoCmd.Rename "tblTEST", acTable, "tblTEST2"
DoCmd.Quit
End If

End Function

Je sais que c'est du bricolage, mais tant qu'à présent,
même si c'est dans une base "test" tout se passe à
merveille sauf le fait d'empêcher la commande "compactage
de s'effectuer si qq travail déjà avec la base Dorsale.
comme tu peus le remarquer c'est où j'ai mis Ci-dessus
***???*** dans le code que j'ai mon soucis.

Encore merci de t'interresser autant à mon problème.

Stach ;-)
Avatar
Raymond
Il faut que ton ouverture soit en exclusif sur la dorsale, sinon rien ne
s'exécute parce que toi tu es déjà connecté.
à l'ouverture de la dorsale teste les utilisateur et s'il y en a fait ton
choix.
lis la page: http://access.seneque.free.fr/utilisateurs_en_cours.htm qui te
donnera des idées pour récupérer la liste des connectés.
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Stach" a écrit dans le message de
news:0c3301c39a41$c83fec10$
Non, je vais essayer d'expliquer:

J' ai dans ma base Frontale, dans une macro "autoexec",
une fonction qui force l'ouverture de la base Dorsale:

Function DémarrageFrontale()

Shell "Msaccess.exe
F:Bidonmarcdllbdcompactage_princip.mdb /cmd compactage"

End Function

Lorsque la Base Dorsale s'ouvre, il y a aussi une
macro "autoexec" qui utilise une fonction afin de Copier
une table, de supprimer la première, puis de rennomer la
copie comme la première. Cela sert à avoir des NumAuto qui
continue à se suivre même si je supprime le dernier
enregistrement. Je sais que ce n'est pas conseiller, mais
ça reste la meilleure solution à mes yeux. si ça plante,
les backups sont là pour ça ;-). Je cherche à y ajouter la
condition que si qq est déjà en train de travailler avec
la base Dorsale alors la commande "cmd compactage" ne
s'effectue afin de ne pas obtenir de message d'erreur me
disant que qq est déjà occuper à utiliser la base Dorsale
et éviter d'écraser l'enregistrement qu'il est entrain de
réaliser. Voici la fonction dans la base dorsale:

Function DemarrageDorsale()

Dim strPrincipMDB As String
Dim strPrincipLDB As String
Dim obj As AccessObject, dbs As Object

strPrincipLDB = "F:Bidonmarcdllbdcompactage_princip.mdb"
strPrincipLDB = "F:Bidonmarcdllbdcompactage_princip.ldb"

If Command() <> "Compactage" Or ***???*** Then
Exit Function
ElseIf Command() = "Compactage" Then
DoCmd.CopyObject strPrincipMDB, "tblTEST2",
acTable, "tblTEST"
DoCmd.DeleteObject acTable, "tblTEST"
DoCmd.Rename "tblTEST", acTable, "tblTEST2"
DoCmd.Quit
End If

End Function

Je sais que c'est du bricolage, mais tant qu'à présent,
même si c'est dans une base "test" tout se passe à
merveille sauf le fait d'empêcher la commande "compactage
de s'effectuer si qq travail déjà avec la base Dorsale.
comme tu peus le remarquer c'est où j'ai mis Ci-dessus
***???*** dans le code que j'ai mon soucis.

Encore merci de t'interresser autant à mon problème.

Stach ;-)
Avatar
Stach
Mon but n'est pas de savoir QUI est connecté, mais
d'ajouter à ma fonction: SI qq est connecter alors Exit
Function.

Si tu as une proposition, dans le genre, même si je sais
que la suivante n'est pas correcte:

If."BaseDorsale".IsLoaded= True them...

C'est comment exprimer cela que je recherche.

Thank a lot de te décarcasser autant .

Stach ;-)


-----Message d'origine-----
Il faut que ton ouverture soit en exclusif sur la
dorsale, sinon rien ne

s'exécute parce que toi tu es déjà connecté.
à l'ouverture de la dorsale teste les utilisateur et s'il
y en a fait ton

choix.
lis la page:
http://access.seneque.free.fr/utilisateurs_en_cours.htm

qui te
donnera des idées pour récupérer la liste des connectés.
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Stach" a écrit
dans le message de

news:0c3301c39a41$c83fec10$
Non, je vais essayer d'expliquer:

J' ai dans ma base Frontale, dans une macro "autoexec",
une fonction qui force l'ouverture de la base Dorsale:

Function DémarrageFrontale()

Shell "Msaccess.exe
F:Bidonmarcdllbdcompactage_princip.mdb /cmd compactage"

End Function

Lorsque la Base Dorsale s'ouvre, il y a aussi une
macro "autoexec" qui utilise une fonction afin de Copier
une table, de supprimer la première, puis de rennomer la
copie comme la première. Cela sert à avoir des NumAuto qui
continue à se suivre même si je supprime le dernier
enregistrement. Je sais que ce n'est pas conseiller, mais
ça reste la meilleure solution à mes yeux. si ça plante,
les backups sont là pour ça ;-). Je cherche à y ajouter la
condition que si qq est déjà en train de travailler avec
la base Dorsale alors la commande "cmd compactage" ne
s'effectue afin de ne pas obtenir de message d'erreur me
disant que qq est déjà occuper à utiliser la base Dorsale
et éviter d'écraser l'enregistrement qu'il est entrain de
réaliser. Voici la fonction dans la base dorsale:

Function DemarrageDorsale()

Dim strPrincipMDB As String
Dim strPrincipLDB As String
Dim obj As AccessObject, dbs As Object

strPrincipLDB
= "F:Bidonmarcdllbdcompactage_princip.mdb"

strPrincipLDB
= "F:Bidonmarcdllbdcompactage_princip.ldb"


If Command() <> "Compactage" Or ***???*** Then
Exit Function
ElseIf Command() = "Compactage" Then
DoCmd.CopyObject strPrincipMDB, "tblTEST2",
acTable, "tblTEST"
DoCmd.DeleteObject acTable, "tblTEST"
DoCmd.Rename "tblTEST", acTable, "tblTEST2"
DoCmd.Quit
End If

End Function

Je sais que c'est du bricolage, mais tant qu'à présent,
même si c'est dans une base "test" tout se passe à
merveille sauf le fait d'empêcher la commande "compactage
de s'effectuer si qq travail déjà avec la base Dorsale.
comme tu peus le remarquer c'est où j'ai mis Ci-dessus
***???*** dans le code que j'ai mon soucis.

Encore merci de t'interresser autant à mon problème.

Stach ;-)

.



Avatar
Raymond
Bonjour.

si tu sais qui est connecté donc tu sais que quelqu'un est connecté ?
tu peux tester aussi la présence du .ldb qui n'existe pas s'il n'y a
personne (sauf peut-être en exclusif).

--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Stach" a écrit dans le message de
news:05cd01c39a7b$fee9b590$
Mon but n'est pas de savoir QUI est connecté, mais
d'ajouter à ma fonction: SI qq est connecter alors Exit
Function.

Si tu as une proposition, dans le genre, même si je sais
que la suivante n'est pas correcte:

If."BaseDorsale".IsLoaded= True them...

C'est comment exprimer cela que je recherche.

Thank a lot de te décarcasser autant .

Stach ;-)
Avatar
Stach
Salut Raymond,

J'avais déjà envisagé la solution de chercher la présence
du fichier .ldb de la base Dorsale. ça ne fonctionnait pas
tous simplement parceque je faisait chercher sa présence à
partir de la fonction se trouvant dans la macro "autoexec"
de la base Dorsale!!!

Par contre, si je mets dans ma base Frontale la fonction:

Function DémarrageFrontale()

Dim strDorsLDB As String

strDorsLDB = "D:Bidonbdcompactage_princip.ldb"

If Dir(strDorsLDB) = "" Then
Shell "Msaccess.exe D:Bidonbdcompactage_princip.mdb /cmd
compactage"
End If

End Function

Mais là, c'est en voyant ton message que j'ai percuté. Le
repérage de l'utilisation de la base Dorsale fonctionne au
poil!

Encore merci ;-)

Stach ;-)))

-----Message d'origine-----
Bonjour.

si tu sais qui est connecté donc tu sais que quelqu'un
est connecté ?

tu peux tester aussi la présence du .ldb qui n'existe pas
s'il n'y a

personne (sauf peut-être en exclusif).