Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Modélisation
Modélisation Le forum qui vous aide à résoudre vos questions relatives à la modélisation (tables et relations) de votre base de données sous Access. Pour les états et les formulaires, postez dans le forum IHM.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/08/2007, 18h04   #1
Membre régulier
 
Avatar de petitours
 
Inscription : février 2003
Messages : 503
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : février 2003
Messages : 503
Points : 92
Points : 92
Par défaut lenteur BDD cause lecture table distante

bonjour,

j'ai une application qui part en service mais qui présente un méchant symptome de lenteur, notament à cause d'une bouche de mise à jour de l'etat d'un Treeview à partir de données contenues dans une table distante sur le réseau.

Je pensais utiliser une table temporaire, locale, dans laquelle je copierais une fois pour toute les données à utiliser pour le treeview (sachant que ces données ne changeront surement jamais).
=>Comment peut on faire une copie locale de table le plus rapidement possible ?
=>Plutot qu'une copie de table, peut on ouvrir un recordset et baser les requetes sur le recordset plutot que sur uen table distante ?


Par ailleur j'ai trouvé des astuces que je n'arrive pas à mettre en oeuvre :
http://www.developpez.net/forums/sho...hlight=lenteur

Citation:
dans les tables, passer en mode création, afficher les
propriétés des tables, et régler la propriété Sous
feuille de données (sub data sheet je crois) sur [Aucun]
([none])
chez moi ca repasse en auto directemetn, des que j'ai fait la modification ; je n'arrive pas à passer en [none]

Citation:
au lancement de la db, ouvrez ce formulaire "dummy" en premier,
avec visible=false
Je n'ai pas de propriété Visible sur mes formulaires... comment doit ont procéder pour l'astuce qui dit ensuite de l'ouvrir avec une machro en mode fenetre masquée ?

Citation:
Lance une macro au démarrage dans laquelle tu ouvres ton formulaire avec mode fenêtre = masqué
Merci par avance
__________________
Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres
petitours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2007, 18h16   #2
Membre régulier
 
Avatar de petitours
 
Inscription : février 2003
Messages : 503
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : février 2003
Messages : 503
Points : 92
Points : 92
Si un trés grand courageux a BESOIN de voir comment je mets à jour mon Treeview (surement pas le plus adroitement du monde)...voici le code

Code :
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
Public Sub remplissageTreeView(oT As Object, odb As DAO.Database, Optional intRessource As Integer = 0, Optional intRang As Integer = 0)
Dim Aaffiche As Boolean
Dim strSQL As String
Dim strSQLtestSurN2 As String
Dim strSQLConditionCaseACocher As String
Dim oRst As DAO.Recordset
Dim oRstTestSurN2 As DAO.Recordset
Dim strLibelle As String
Dim IndexCount As Integer 'numero d'index du noeud en cours
Dim NumCocheN1 As Integer 'nombre de fils qui ont une case à cocher d'activée
Dim NumCocheN2 As Integer
Dim NumCocheN0 As Integer 'pour verif si la ressouce en cours est à afficher
Dim DejaUnTruc As Boolean
Dim NumImage As Integer
 
 
'vérification que il y a au moins une case à cochée de cochée
If (Me.Coch_NonUtilise.Value = False And Me.Coch_Accessoires.Value = False And Me.Coch_SuivContrat.Value = False And Me.Coch_SuiviSecu.Value = False And Me.Coch_SuiviQ.Value = False And Me.Coch_MachineProd.Value = False) Then Me.Coch_MachineProd.Value = True
 
 
'###on determine le filtre à utiliser pour les tests d'affichage des ressources
strSQLConditionCaseACocher = "AND (" 'initialisation du filtre
DejaUnTruc = False 'on initialise le flag qui sert à la creation de ce filtre
 
If Me.Coch_MachineProd.Value = True Then
    strSQLConditionCaseACocher = strSQLConditionCaseACocher & "[C_MachineProd]= True OR [C_SuiviQ]= True"
    DejaUnTruc = True
End If
If Me.Coch_SuiviQ.Value = True Then
    If DejaUnTruc = True Then
        strSQLConditionCaseACocher = strSQLConditionCaseACocher & " OR [C_SuiviQ]= True"
    Else
        strSQLConditionCaseACocher = strSQLConditionCaseACocher & " [C_SuiviQ]= True"
        DejaUnTruc = True
    End If
End If
If Me.Coch_SuiviSecu.Value = True Then
    If DejaUnTruc = True Then
        strSQLConditionCaseACocher = strSQLConditionCaseACocher & " OR [C_SuiviSecu]= True"
    Else
        strSQLConditionCaseACocher = strSQLConditionCaseACocher & " [C_SuiviSecu]= True"
        DejaUnTruc = True
    End If
End If
If Me.Coch_SuivContrat.Value = True Then
    If DejaUnTruc = True Then
        strSQLConditionCaseACocher = strSQLConditionCaseACocher & " OR [C_suiviContrat]= True"
    Else
        strSQLConditionCaseACocher = strSQLConditionCaseACocher & " [C_suiviContrat]= True"
        DejaUnTruc = True
    End If
End If
If Me.Coch_Accessoires.Value = True Then
    If DejaUnTruc = True Then
        strSQLConditionCaseACocher = strSQLConditionCaseACocher & " OR [C_Accessoires]= True"
    Else
        strSQLConditionCaseACocher = strSQLConditionCaseACocher & " [C_Accessoires]= True"
        DejaUnTruc = True
    End If
End If
If Me.Coch_NonUtilise.Value = True Then
    If DejaUnTruc = True Then
        strSQLConditionCaseACocher = strSQLConditionCaseACocher & " OR [C_NonUtilise]= True"
    Else
        strSQLConditionCaseACocher = strSQLConditionCaseACocher & " [C_NonUtilise]= True"
        DejaUnTruc = True
    End If
End If
strSQLConditionCaseACocher = strSQLConditionCaseACocher & ")" 'fin du filtre
'###FIN on determine le filtre à utiliser pour les tests d'affichage des ressources
 
 
strSQL = "SELECT NumRessource,CODERESS,NumImage,NumImageSelected,OrdreAffichage,C_MachineProd,C_SuiviQ,C_SuiviSecu,C_suiviContrat,C_Accessoires,C_NonUtilise FROM Ress WHERE NumParent=" & intRessource & " ORDER BY OrdreAffichage"
Set oRst = odb.OpenRecordset(strSQL)
 
With oRst
    While Not oRst.EOF
      IndexCount = oT.Nodes.Count
      strLibelle = .Fields(1).Value
 
 
      ' ##### test s'il faut afficher
       Aaffiche = False 'par défaut il ne faut pas afficher
       ' si NumCocheN0 N1 ou N2 >0 alors il faut afficher car presence d'une ressource à afficher dans l'arborescence inférieure
            'on regarde s'il y a des cases à cocher pour cette ressource
            NumCocheN0 = DCount("*", "Ress", "[NumRessource]= " & oRst.Fields(0).Value & strSQLConditionCaseACocher)
            If NumCocheN0 > 0 Then
                Aaffiche = True
                NumImage = oRst.Fields(2).Value
                GoTo fin1
            End If
            'on regarde s'il y a des cases à cocher dans les n-1 de cette ressource
            NumCocheN1 = DCount("*", "Ress", "[NumParent]= " & oRst.Fields(0).Value & strSQLConditionCaseACocher)
            If NumCocheN1 > 0 Then
                Aaffiche = True
                NumImage = 2
                GoTo fin1
            End If
            'on regarde pour le niveau n-2 de tous les niveaux n-1 de l'objet
            strSQLtestSurN2 = "SELECT NumRessource FROM Ress WHERE NumParent=" & oRst.Fields(0).Value
            Set oRstTestSurN2 = odb.OpenRecordset(strSQLtestSurN2) ' dans ce recorset on va voir s'il y a une case à cocher d'active
                While Not oRstTestSurN2.EOF
                    NumCocheN2 = DCount("*", "Ress", "[NumParent]= " & oRstTestSurN2.Fields(0).Value & strSQLConditionCaseACocher)
 
                    If NumCocheN2 > 0 Then
                        Aaffiche = True
                        NumImage = 2
                        GoTo fin2
                    End If
 
                    oRstTestSurN2.MoveNext    'Passe à l'enregistrement suivant
                Wend
fin2:
                oRstTestSurN2.Close: Set oRstTestSurN2 = Nothing 'fermeture du recorset et libération mémoire
 
fin1:
      ' ##### FIN test s'il faut afficher
 
   If Aaffiche = True Then
       If intRessource = 0 Then
            oT.Nodes.Add , , "Atel_" & oRst.Fields(0).Value, strLibelle, NumImage, oRst.Fields(3).Value
 
            ' test si on déploie ou pas le treeview pour les noeuds de premier niveau (la racine)
            If Me.ExpandN1.Value = True Then
                oT.Nodes("Atel_" & oRst.Fields(0).Value).Expanded = True
            End If
 
            remplissageTreeView oT, odb, oRst.Fields(0).Value, 1
 
       Else
          If intRang = 1 Then
            oT.Nodes.Add "Atel_" & intRessource, tvwChild, "Ress_" & oRst.Fields(0).Value, strLibelle, NumImage, oRst.Fields(3).Value
 
            'test si on déploie ou pas le treeview pour les noeuds de niveau 2 et plus
            If Me.ExpandN2.Value = True Then
               oT.Nodes("Ress_" & oRst.Fields(0).Value).Expanded = True
            End If
 
            remplissageTreeView oT, odb, oRst.Fields(0).Value, 2
 
          Else
            oT.Nodes.Add "Ress_" & intRessource, tvwChild, "Part_" & oRst.Fields(0).Value, strLibelle, NumImage, oRst.Fields(3).Value
 
          End If
 
       End If
    End If
 
    oRst.MoveNext 'Passe à l'enregistrement suivant
    Wend
End With
 
oRst.Close: Set oRst = Nothing 'Ferme le recordset
End Sub
__________________
Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres
petitours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 06h57   #3
Membre régulier
 
Avatar de petitours
 
Inscription : février 2003
Messages : 503
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : février 2003
Messages : 503
Points : 92
Points : 92
Je m'en suis sorti en faisant

Code :
1
2
3
4
strSQL = "SELECT RessSource.* INTO Ress FROM RessSource"
    DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True
je ne sais pas si c'est le plus performant pour faire une copie...
__________________
Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres
petitours est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h58.


 
 
 
 
Partenaires

Hébergement Web