Bonjour à tous
je conçois une base de données qui va servir à plusieurs utilisateurs en même temps, je sais que Acces le gère mais il se trouve que je viens de rencontrer un problème inattendu et pourtant évident, je vous explique.
J'ai un formulaire qui permet de rechercher des informations en fonction du nom d'une salle, donc j'écris le nom de ma salle, je clique sur rechercher et ça m'ouvre un formulaire contenant un élément "controle de navigation" qui contient X états qui vont m'afficher toutes les informations lié à cette salle.
Le problème c'est que si deux personnes font une recherche sur une salle différentes en même temps alors les informations affichées seront celle de la dernière recherche et ça sur les deux recherches.
Ça c'est mon problème actuelle.
Ma façon de faire est mauvaise mais je ne sais pas faire autrement, je vous explique :
Donc mon formulaire la où j'entre le nom de la salle contient juste le petit code suivant :
donc on vois que je fais un OpenForm qui m'ouvre le formulaire contenant toutes les informations, dans ce formulaire j'ai juste l'élément "Controle de navigation" auquel j'ai lié tous les états qui affiche les différentes informations, bien sur les états sont liés à des requêtes, le problème c'est que chaque requête est mise à jour au moment de la recherche et donc c'est la dernière recherche qui va s'afficher pour tout le monde.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Dim rst As DAO.Recordset Dim strLocal As String Dim idlocal As Integer If Texte0.Value <> "" And Not IsEmpty(Texte0.Value) Then strLocal = "SELECT id_local FROM Local WHERE local = '" & Texte0.Value & "'" Set rst = CurrentDb.OpenRecordset(strLocal, dbOpenForwardOnly, dbReadOnly) If Not rst.EOF Then idlocal = rst.Fields("id_local") DoCmd.OpenForm "Informations du local", acNormal, "", "", acFormPropertySettings, acWindowNormal, idlocal Else MsgBox "Local introuvable !" End If Else MsgBox "Le champ doit être rempli" End If
Je vous mets le code qui mets à jour, on sais jamais ça peux vous servir pour m'aider qui sais :
Information du local :
Toutes les fonctions update sont les mêmes (avec très peu de différences) donc je ne vous les mets pas toutes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 Private Sub Form_Open(Cancel As Integer) Dim strSQL As String Dim rst As DAO.Recordset If OpenArgs <> 0 And Not IsEmpty(OpenArgs) Then strSQL = "SELECT local,nomination FROM Local WHERE id_local = " & OpenArgs Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenForwardOnly, dbReadOnly) Me.Étiquette4.Caption = "Informations du local " & rst.Fields("local") Me.Étiquette49.Caption = Replace(rst.Fields("nomination"), ";", ", ") Call updateEquipement(OpenArgs) Call updateActivite(OpenArgs) Call updateConsigne(OpenArgs) Call updateEPI(OpenArgs) Call updateProcedure(OpenArgs) Call updateRisque(OpenArgs) Call updateFormation(OpenArgs) Else MsgBox "Une erreur est survenue !" End If Me.SousFormulaireNavigation.Requery End Sub Public Function updateEquipement(idlocal As Integer) Dim strSQL As String strSQL = "SELECT id_equip, libelle FROM Equipement WHERE id_equip in (SELECT id_equipement FROM Equipement_local WHERE id_local = " & idlocal & ")" CurrentDb.QueryDefs("Liste des équipements").SQL = strSQL End Function
Je pense qu'ici, je viens de vous exposer tout mon problème.
Ce que je veux exactement c'est que quand j'écris le nom de ma salle et que je clic sur recherche ça m'affiche toute les informations que je veux proprement, c'est pour ça que j'ai utiliser les états et le "controle de navigation", sinon j'aurais très bien pu tous mettre dans des zone de textes et ça aurais fonctionné mais malheureusement cette méthode est franchement laide.
Je me tourne vers vous pour savoir si vous avez une solution à mon problème, je suis ouvert à toutes proposition qui pourrais me dépanner, je me débrouille en VBA mais je ne suis pas un expert donc n'hésitez pas à m'expliquer votre code si vous m'en laissez :p
PS : Une des solutions auquel j'avais pensé serait d'injecter ma requête directement dans les onglets du "controle de navigation" mais d'après mes recherches ce n'est pas possible
Merci de m'avoir lut et de votre aide le cas échéant
Partager