Gestion concurrentielle - multi utilisateurs
Résolu
rEVOLV3r
Messages postés
232
Statut
Membre
-
rEVOLV3r Messages postés 232 Statut Membre -
rEVOLV3r Messages postés 232 Statut Membre -
Bonjour,
J'ai une base de donnée sous Excel car je n'ai pas accès à un serveur SQL malheureusement. Je dois donc, avant que vous me disiez que ce n'est pas optimal d'utiliser Excel comme BDD, vous dire que je n'ai malheureusement pas le choix :-( (pas d'Acess non plus).
En gros j'ai un Userform qui sera ouvert sur plusieurs pc qui lancera des requetes SQL à la base (lecture et écriture).
Pour commencer à faire la gestion concurrentielle, j'ai fais le bout de code suivant :
Je viens en gros regarder si je peux renommer la base avec le meme nom (pour éviter de la renommer). Si elle est ouverte, j'ai l'erreur 70 permission denied. j'attends donc avant de relancer la procédure do while. SI je peux renommer la base, je l'ouvre et inscris un numéro incrémental suivi de "procédure 1" puis je l'enregistre.
Le but étant que pour tester cette gestion, 2 utilisateurs pour commencer, lancent la macro1 et la macro 2 (meme macro mais avec procédure 2 écrit a coté du i, afin de voir quand les utilisateurs ont eu accès à la BDD. Si tout ce passe correctement on devrait avoir ca dans la BDD :
1 procédure1
1 procédure2
2 procédure1
3 procédure1
2 procédure 2
etc..
Ceci est assez aléatoire vu les delay appliqués. Mais le but étant de voir qui a écrit quoi et avant qui.
Voila seulement, ca fonctionne peu souvent, mais quand meme certaine fois. Le problème est qu'un message me demandant d'enregistrer la base car celle-si est ouverte ou introuvable. Cela veut dire que l'autre utilisateur avec la macro 2 a réussi a entrer dans la BDD alors que j'y étais déjà.
La macro 1 est lancé depuis le fichier1 et la macro 2 depuis le fichier1(copie) pour éviter la gestion de la lecture seule (dont je m'occuperai plus tard).
Avez-vous une idée de ce bug là dedans ?
Merci beaucoup pour vos avis d'experts ;-) mais j'ai rien trouvé sur la gestion concurrentiel sous excel malheureusement.
Bonne fin de journée
PS : Je ne pourrai que vous répondre demain matin
J'ai une base de donnée sous Excel car je n'ai pas accès à un serveur SQL malheureusement. Je dois donc, avant que vous me disiez que ce n'est pas optimal d'utiliser Excel comme BDD, vous dire que je n'ai malheureusement pas le choix :-( (pas d'Acess non plus).
En gros j'ai un Userform qui sera ouvert sur plusieurs pc qui lancera des requetes SQL à la base (lecture et écriture).
Pour commencer à faire la gestion concurrentielle, j'ai fais le bout de code suivant :
Sub test_connection()
Dim wb_source As Workbook
Dim wb_bdd As Workbook
Dim link_bdd As String
Dim objOFS As Variant
Set objOFS = CreateObject("Scripting.FileSystemObject")
Set wb_source = ThisWorkbook
link_bdd = wb_source.Sheets(1).Range("B2").Value
i = 1
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Do While Not i = 11
On Error Resume Next
objOFS.MoveFile link_bdd & "\BDD.xlsx", link_bdd & "\BDD.xlsx"
If Err = 70 Then
Application.Wait (1000)
Else
Workbooks.Open (link_bdd & "\BDD.xlsx")
Set wb_bdd = ActiveWorkbook
Sheets(1).Range("A10000").End(xlUp).Offset(1, 0).Value = i & " procedure 1"
i = i + 1
wb_bdd.Close True
Application.Wait (1000)
'Exit Do
End If
Loop
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Je viens en gros regarder si je peux renommer la base avec le meme nom (pour éviter de la renommer). Si elle est ouverte, j'ai l'erreur 70 permission denied. j'attends donc avant de relancer la procédure do while. SI je peux renommer la base, je l'ouvre et inscris un numéro incrémental suivi de "procédure 1" puis je l'enregistre.
Le but étant que pour tester cette gestion, 2 utilisateurs pour commencer, lancent la macro1 et la macro 2 (meme macro mais avec procédure 2 écrit a coté du i, afin de voir quand les utilisateurs ont eu accès à la BDD. Si tout ce passe correctement on devrait avoir ca dans la BDD :
1 procédure1
1 procédure2
2 procédure1
3 procédure1
2 procédure 2
etc..
Ceci est assez aléatoire vu les delay appliqués. Mais le but étant de voir qui a écrit quoi et avant qui.
Voila seulement, ca fonctionne peu souvent, mais quand meme certaine fois. Le problème est qu'un message me demandant d'enregistrer la base car celle-si est ouverte ou introuvable. Cela veut dire que l'autre utilisateur avec la macro 2 a réussi a entrer dans la BDD alors que j'y étais déjà.
La macro 1 est lancé depuis le fichier1 et la macro 2 depuis le fichier1(copie) pour éviter la gestion de la lecture seule (dont je m'occuperai plus tard).
Avez-vous une idée de ce bug là dedans ?
Merci beaucoup pour vos avis d'experts ;-) mais j'ai rien trouvé sur la gestion concurrentiel sous excel malheureusement.
Bonne fin de journée
PS : Je ne pourrai que vous répondre demain matin
A voir également:
- Gestion concurrentielle - multi utilisateurs
- Logiciel gestion locative gratuit excel - Télécharger - Comptabilité & Facturation
- Logiciel gestion photo gratuit - Guide
- Gestion de fichiers - Télécharger - Gestion de fichiers
- Youtube multi downloader - Télécharger - Conversion & Codecs
- Sfr multi - Accueil - Opérateurs & Forfaits
1 réponse
Bonjour
Tu peux très bien utiliser la technologie ADO-SQL (on laisse la database fermée) avec un accès "optimist" (par défaut) sur une base Excel (posssédant plusieurs plusieurs tables au besoin relées entre elles)
On arrive ainsi à construire un vrai-faux système client-serveur front end -back end
Tu peux m^me construire une database au format Access sans posséder Access avec ADOX dérivé de ADO
Avant de pleurer d'^tre obligé d'utiliser Excel , logiciel indigne, peut-^tre faudrait il connaitre ses possibilités au besoin en lisant la documentation de Microsoft
Bonne continuation
Michel
Tu peux très bien utiliser la technologie ADO-SQL (on laisse la database fermée) avec un accès "optimist" (par défaut) sur une base Excel (posssédant plusieurs plusieurs tables au besoin relées entre elles)
On arrive ainsi à construire un vrai-faux système client-serveur front end -back end
Tu peux m^me construire une database au format Access sans posséder Access avec ADOX dérivé de ADO
Avant de pleurer d'^tre obligé d'utiliser Excel , logiciel indigne, peut-^tre faudrait il connaitre ses possibilités au besoin en lisant la documentation de Microsoft
Bonne continuation
Michel
Merci pour votre réponse, j'utilise déjà la technologie ADO-SQL pour communiquer avec ma base de donnée Excel, cependant lorsque deux personnes font des requetes en meme temps, il arrive de temps en temps des erreurs d'écriture dans la base à ce que j'ai pu constater.
J'ai également lu la documentation hier sur le ADOX pour access, cependant comme je n'ai pas le logiciel au bureau je ne peux pas transposer ma base de donnée dans cette feuille. Il faudrait que j'aie l'autoristation de prendre la bdd chez moi pour la mettre dans le document access...et ca, je crois que c'est malheureusement impossible.
Donc je ne pleure pas pour finir sur Excel, j'essaie jsute de trouver un moyen pour éviter que deux personnes se connectent en meme temps sur la base de donnée, meme avec des requetes SQL. J'essaie ce matin de faire une procédure qui renomme la base avec le nom du user et la renomme a son nom initiale une fois les requetes terminées cependant cela ne fonctionne pas encore.
Il faudrait arriver à faire une "liste d'attente" ou vraiment empecher toutes autres connexions à la base durant son utilisation.
Petite question pour vous :
SI j'arrivais a transposer la base dans un fichier access, aurais-je encore des soucis avec des requetes SQL ? Ou access gère bien la liste d'attente de requete ?
Merci beaucoup en tout ca pour votre réponse !
Meilleures salutations,
revovl3r
J'attendais que quelqu'un de bien plus calé que moi réponde à ce sujet. C'est le cas avec Michel.
Mais j'allais te mettre sur la piste d'évolutions en parallèle sur des bases/fichiers dédiés et dès qu'on détecte qu'on est le seul en écriture on assemble le tout. Il suffit d'avoir un horodatage (je pensais à l'écriture d'un fichier csv - si applicable - nommé 'utilisateur_horodatage.csv') permettant de mettre les petits dans le bon ordre.
A+
Je vous écris pour vous dire que j'ai résolu le problème.
J'utilise un on error go to errorandler qui crée une file d'attente car je copie ma base de donnée dans un fichier TEMP sur le réseau et la déplace dans mon fichier c.\Temp afin d'appliquer les requetes dessus. Cela empêche les autres utilisateurs de se connecter dessus le temps de la requete. elle est ainsi redéplacé après finalisation des requetes.
Si jamias, le fait de tester de la renommer pour voir si elles est en lecture seule avec un error go to ne fonctionne pas bien avec les requetes au meme instant. Des bugs arrivent.
Il faut donc préconiser de déplacer la base.
Merci a vous.
bonne soirée