Bonjour,
Je travaille sur une application en VBA sous Access 2010, au format Accdb.
Jusqu'à présent, l'application intégrait dans un seul fichier les données (tables) et les traitements (modules, formulaires, états ...).
Je cherche à séparer les données des traitement en fractionnant la base. Désormais, les données sont dans un fichier accdb sur le serveur, et l'application dans un autre fichier accdb que l'utilisateur utilise depuis son PC. L'application contient des liens qui pointent vers les tables du fichier accdb qui est sur le serveur.
Malheureusement, j'ai un problème car depuis le fractionnement, il y a une fonctionnalité qui marchait très bien jusque là, et qui m'affiche désormais le message "Impossible d'ouvrir plus de bases de données" à chaque fois que je l'utilise, même si je viens à peine d'ouvrir mon application.
En l'occurrence, j'ai un formulaire qui m'affiche (dans un sous formulaire) une liste de conventions, et quand je clique sur une convention, elle doit s'afficher dans un nouveau formulaire. Or lorsque je clique sur la convention qui m'intéresse, elle appelle une fonction (ce qui est normal) qui provoque systématiquement l'affichage du message indiqué ci dessus (ce qui n'est pas normal).
Pour information, le code qui provoque le message est :
Le plantage a lieu sur la ligne :
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
28
29 Public Function GetListeDesSousProgrammes() As String() Dim MaBase As DAO.Database Dim MaTable As DAO.Recordset liste = "" compteur = 0 Requete = "SELECT IdSprog FROM SousProgrammes ORDER BY IIF(Libelle<> NULL,Libelle,'XXXXX') ASC" Set MaBase = CurrentDb() Set MaTable = MaBase.OpenRecordset(Requete, dbOpenSnapshot) nbSP = DCount("IdSprog", "SousProgrammes") While MaTable.EOF = False liste = liste + Nz(MaTable("IdSprog"), "") If liste <> "" And compteur <> nbSP - 1 Then liste = liste & "," End If compteur = compteur + 1 MaTable.MoveNext Wend tableauSP = Split(liste, ",") GetListeDesSousProgrammes = tableauSP MaTable.Close Set MaBase = Nothing End Function
J'ai fait le tour du reste du code pour m'assurer qu'à chaque fois que j'utilise une ligne de ce style, je termine ensuite avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Set MaBase = CurrentDb()
et que chaque fois que j'utilise un recordset, il est bien fermé à la fin.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 set MaBase = Nothing
Mais de toutes façons, le message apparait à chaque fois que j'utilise cette fonctionnalité (par contre, le reste de l'application semble fonctionner correctement).
Avez vous des suggestions sur ce qu'il faut vérifier ou corriger pour que l'application puisse fonctionner ?
(PS : Apparemment ce n'est pas la fonction présentée ci-dessus qui pose le problème, car si je la désactive dans le code, l'accès suivant à la base de données provoque le même message. Toutefois, je suis toujours intéressé par les suggestions concernant les éléments à vérifier dans la configuration où je me trouve pour éviter ce message).
Merci de vos conseils.
Partager