Ado connexion multiutilisateurs

kat40 Messages postés 38 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 19 mars 2008 - 8 juil. 2004 à 15:40
kat40 Messages postés 38 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 19 mars 2008 - 13 juil. 2004 à 00:32
J'ai vraiment besoin de votre aide. Mon application se connecte avec ADO à une base de données access. L'application est placée sur un serveur donc je ne veux pas que deux personnes rentrent des données en même temps, donc il faut que je rendre ma connexion exclusive. Et voilà mon problème, je commence en vb, je ne sais pas comment faire.

Voici mon code:


Dim quelquun As Integer 
quelquun = VerifierQqcnDepot 
' If quelquun = 1 Then 
' MsgBox "L'application est utilisée présentement par un autre utilisateur" + vbNewLine + "Veuillez réessayer dans quelques minutes" 
' recevoirUtilise5 (True) 
' Unload Me 
' Else 
' Call frmZEcrireBase.EcrireQuelquunDepot(1) 
If TestBD() = True Then 
Dim chemin As String 
chemin = chercherChemin 
adoDepot.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & chemin & ";Persist Security Info=False" 
adoDepot 
adoDepot.RecordSource = "Depot" 
adoDepot.CursorLocation = adUseClient 
adoDepot.CursorType = adOpenDynamic 
adoDepot.LockType = adLockOptimistic 
adoDepot.Refresh 
txtDepot.Enabled = False 
txtMontant.Enabled = False 
txtEncaisse.Enabled = False 
cmdAnnuler.Enabled = False 
cmdModifier.Enabled = True 
cmdAjouter.Enabled = True 
cmdAccepter.Enabled = False 
cmdSupprimer.Enabled = True 
lstMontant.Enabled = False 
lstDateDepot.Enabled = False 
lstEncaisse.Enabled = False 
RemplirListe 
If adoDepot.Recordset.RecordCount > 0 Then lstDepot.ListIndex = 0 
calendrier.Today 
Else 
MsgBox "Impossible de trouver la base de données." + vbNewLine + "Veuillez vous assurer que le chemin est valide." + vbNewLine + "Pour en changer le chemin, allez dans OUTILS --> Base de données --> Parcourir(choisir la base de données) -- > Appliquer", vbCritical, "Erreur" 
txtDepot.Enabled = False 
txtMontant.Enabled = False 
txtEncaisse.Enabled = False 
cmdAnnuler.Enabled = False 
cmdModifier.Enabled = False 
cmdAjouter.Enabled = False 
cmdAccepter.Enabled = False 
cmdSupprimer.Enabled = False 
lstMontant.Enabled = False 
lstDepot.Enabled = False 
lstDateDepot.Enabled = False 
lstEncaisse.Enabled = False 
End If 
' End If 
End Sub 




Présentement, lorsqu'UNE personne ouvre le formulaire, un 1 s'inscrit dans la base pour la bloquer et lorsqu'il quitte un 0 s'inscrit, ce qui permet de liberer l'application. Cette façon de procéder n'est pas l'idéale et je voudrais la simplifier.

Je travaille des postes XP avec Access 2002 par contre le serveur est sous NT.

N.B: J'aimerais que lorsqu'une personne essai de se connecter et que l'application est occupée, un msgbox l'avise d'attendre!!!!

Pour moi c'est compliqué mais peut-être que quelqu'un connait la solution.

Encore un gros merci de prendre le temps de me lire et surtout de m'aider

11 réponses

cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
8 juil. 2004 à 16:13
Quand une base access est ouverte un fichier plus ou moins caché se créer à coté....il s'appel : NomTable.ldb

il se supprime automatiquement quand la base est fermé...

Pourkoi dans ton cas ne pas tester la présence de ce fichier...tout simplement ????
si il existe alors plus personne ne peu enregistrer sinon ok

ce fichier si tu l'ouvre avec un editeur de text ..tu vois même
qui à ouvert la Base !!

ca te va

It@li@
0
kat40 Messages postés 38 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 19 mars 2008
8 juil. 2004 à 16:31
Oui je comprends, mais je ne sais pas comment faire en code pour vérifier si le fichier .ldb est présent et bloquer l'accès si oui!!!

Pourrais-tu me donner un exemple, je suis débutante et j'ai encore de la difficulté
0
kat40 Messages postés 38 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 19 mars 2008
8 juil. 2004 à 16:39
Je voulais te demander aussi si c'est possible de vérifier si une table est utilisée. Le fichier .ldb est pour la base de données mais si c'est une table que je désire bloquée comment avec vb vérifier si elle est utilisée????
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
8 juil. 2004 à 17:22
voici une fonction pour verifier l'existence d'un fichier ( qqsoit l'extension")

Public Function ExistFile(strPath As String) As Boolean

Dim fs As Object
Dim blnFExiste As Boolean
Set fs = CreateObject("Scripting.FileSystemObject")
If Not (fs.FileExists(strPath)) Then
blnFExiste = False
Else
blnFExiste = True
End If
ExistFile = blnFExiste

End Function

elle te renvoie true si il existe et false si il n'existe pas
tu verifie comme ca :

if ExistFile("C:\MonRepertoire\MaBase.mdb)= False
'Ok
then
'Ton Message d'Alerte !!
end if

It@li@
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
8 juil. 2004 à 17:23
Pour la table Non je ne sais pas désolé...juste la BAse

je reviens que Lundi...laisse moi un message si t'as un souci

It@li@
0
kat40 Messages postés 38 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 19 mars 2008
8 juil. 2004 à 20:48
Pourquoi que même si je mets la ligne de code suivante:

  
adoDepot.LockType = adLockOptimistic


Deux utilisteurs sont capables de se connecter à la base en même temps???

Est-ce que je l'utilise mal....
0
kat40 Messages postés 38 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 19 mars 2008
9 juil. 2004 à 16:18
Bonjour je viens de trouver le code pour comment ouvrir une table en mode exclusif.

Est-ce que quelqu'un peut m'aider à l'utiliser???

Voici mon code pour mon application, j'ouvre la table Depot dans ma base de données Depot avec lors du load du formulaire par l'utilisateur.

Code:


If TestBD() = True Then 
            Dim chemin As String 
            chemin = chercherChemin 
            adoDepot.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & chemin & ";Persist Security Info=False" 
            adoDepot.RecordSource = "Depot" 
            OuvrirTableExclusif 
            adoDepot.Refresh 
            txtDepot.Enabled = False 
            txtMontant.Enabled = False 
            txtEncaisse.Enabled = False 
            cmdAnnuler.Enabled = False 
            cmdModifier.Enabled = True 
            cmdAjouter.Enabled = True 
            cmdAccepter.Enabled = False 
            cmdSupprimer.Enabled = True 
            lstMontant.Enabled = False 
            lstDateDepot.Enabled = False 
            lstEncaisse.Enabled = False 
            RemplirListe 
            If adoDepot.Recordset.RecordCount > 0 Then lstDepot.ListIndex = 0 
            calendrier.Today 
        Else 
            MsgBox "Impossible de trouver la base de données." + vbNewLine + "Veuillez vous assurer que le chemin est valide." + vbNewLine + "Pour en changer le chemin, allez dans OUTILS --> Base de données --> Parcourir(choisir la base de données) -- > Appliquer", vbCritical, "Erreur" 
            txtDepot.Enabled = False 
            txtMontant.Enabled = False 
            txtEncaisse.Enabled = False 
            cmdAnnuler.Enabled = False 
            cmdModifier.Enabled = False 
            cmdAjouter.Enabled = False 
            cmdAccepter.Enabled = False 
            cmdSupprimer.Enabled = False 
            lstMontant.Enabled = False 
            lstDepot.Enabled = False 
            lstDateDepot.Enabled = False 
            lstEncaisse.Enabled = False 
        End If 

 


Dans les trucs j'ai trouvé ce code qui me permetterait d'ouvrir ma table Depot en mode exclusif:

Code:


Function Ouvrir_Table_Exclusif (Bd As Database, Ma_Table As String) As Integer 
Dim rcd As DAO.Recordset 
On Error GoTo Erreur 
Set rcd = Bd.OpenRecordset(Ma_Table, dbOpenTable, dbDenyRead) 
' -- Mes traitemens en mode exclusif 
Rcd.Close 
Set rcd = Nothing 
Exit Function 
Erreur: 
Msgbox Err.Number & vbcrlf & Err.Description 
End Function 
 


Si je mets ce code dans mon formulaire et que j'appelle la fonction Ouvrir_Table_Exclusif après adoDepot.RecordSource = "Depot"
j'ai un message d'erreur:Argument not optical...

Pouvez-vous m'aider S.V.P
0
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
10 juil. 2004 à 12:22
Essayes un "Select * From Depot"
0
kat40 Messages postés 38 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 19 mars 2008
12 juil. 2004 à 22:10
Non ça fonctionne pas???

Dans un premier temps ce code est fait pour Access, probablement qu'il faut le modifier pour l'exécuter en VB6!
0
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
13 juil. 2004 à 00:06
Je viens juste de percuter ... tu ne mélangerais pas des accès ADO et DAO par hasard ?
adoDepot est un contrôle data ADO je suppose ?
Mais dans ton code tu utilises des objets DAO ...

A mon avis il te faut choisir une des 2 méthodes d'accès (ADO me semble la plus judicieuse).
0
kat40 Messages postés 38 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 19 mars 2008
13 juil. 2004 à 00:32
Tu as raison, je travaille en ADO et puisque je ne connais rien à DAO donc c'est probable que je mêle les deux.

Peux-tu m'aider pour adapter mon code en ADO?
0
Rejoignez-nous