1 membre
Connectés : ( personne )
- La Charte du Forum - Forum - Questions générale
Sujet n° 371 |
Fractionnement |
le 30/05/2010 : 13:59 par Kolele
visiteur |
Salut à tous,
je commence à vouloir partager mes applications et je viens de découvrir le fractionnement des bases (avec les tables sur un partage réseau et les autres objets sur la Base de chacun des utilisateurs). Problème : ça ralentit un max, alors que la base initiale ne faisait que 12 Mo (la base principale en fait maintenant 11,8 et les bases utilisateurs 1,2 Mo) et que le test ne comporte que deux utilisateurs !
Enregistrer les données prend 55 secondes contre 3 auparavant !
le compactage n'a rien arrangé. Je potasse les index, truc dont je ne me suis jamais servi jusque là.
L'équipe du père 3Stone aurait-elle une piste ?! |
|
|
Réponse n° 9 -------- le 04/06/2010 : 02:31 par 3Stone
Administrateur
|
Bonjour,
Citation :Je n'ai pas l'ouvre-boite du fichier que tu m'indiques de télécharger sur le site Access web
Ouvre un simple module (ALT + F11) et puis par le menu Fichier, Exporter un fichier... tu remarqueras que l'on te propose "nom_du_module.bas" C'est donc une méthode très pratique pour exporter (et importer) du code VBA. Dans ton cas, il suffit de choisir "Importer un fichier..." Ceci dit, ce fichier est simplement du texte... que tu peux ouvrir avec un quelconque éditeur.
Remarque, lorsque tu fais la même manoeuvre dans le module "sous" un formulaire, tu remarqueras que l'on te propose "nom_du_formulaire.cls". "cls" pour module de classe. Voir ici.
Pour ce qui est de la littérature... je n'en connais pas qui traite particulièrement le sujet. Mais le principe, qu'il ne faut jamais perdre de vue, est qu'il faut toujours minimiser le volume des données manipulées, et donc, qui transitent par le réseau. De la réflexion, des tests et... de la pratique... permet d'éviter le pire.
Selon le type de base et la qualité de la réalisation, une base Access peut être utilisée par 3 à une vingtaine d'utilisateurs simultanés. Au delà, il faut utiliser SQL Server ou autre, qui est client-serveur.
Cordialement, Pierre(3stone) |
|
|
Réponse n° 10 -------- le 06/06/2010 : 10:06 par Kolele
visiteur |
Bonjour 3Stone,
Ok, Altéfonz et le fichier basLookup.bas est bien dans le
module.
Ensuite j'ai essayé de tester dans une requête qui fonctionnait
avec DLookup, en SQL, la nouvelle fonction tLookup avec la même syntaxe (champs,
domaine, critère). J'ai repris le même critère que DLookup pour être sûr, mais ça
ne marche toujours pô ! ça donne :
SELECT [0 - BASE ELEVE 2009/10].NomPrénomElève, [1 - AVIS
d'IMPOSITION].[Revenu imposable 1], [1 - AVIS d'IMPOSITION].[Parts fiscales 1],
CLng([Revenu imposable 1]/[Parts fiscales 1]) AS [Quotient familial],
DLookUp("[Montant annuel]","1 - ADDP : taux et
barêmes",[Quotient familial] & " between [Valeur plancher] AND
[Valeur plafond]") AS montant, tLookup("[Montant
annuel]","[1 - ADDP : taux et barêmes]",[Quotient familial]
& " between [Valeur plancher]
AND [Valeur plafond]") AS
essai
FROM [0 - BASE ELEVE 2009/10] INNER JOIN [1 - AVIS
d'IMPOSITION] ON [0 - BASE ELEVE 2009/10].[Clé Elève] = [1 - AVIS
d'IMPOSITION].[Clé Elève];
J'ai dépoussiéré mes manuels de VBA une nouvelle fois, mais c'est
la 3ème tentative et je tombe au bout d'une semaine à la page 240,
sans avoir rien capitalisé vraiment.
Bien à toi, |
|
|
Réponse n° 11 -------- le 07/06/2010 : 19:16 par 3Stone
Administrateur
|
Bonjour,
Je vois encore ceci : Code :DLookUp("[Montant annuel]","1 - ADDP : taux et barêmes",[Quotient familial] & " between
sans crochets autour du nom de la table...
Ceci dit, remplacer simplement une série de DLookup() par des tLookup() ne fera pas des miracles. J'avais plutôt donné le lien pour illustrer le fait que les fonctions de domaines peuvent être très lourdes et lentes dans les requêtes.
Cela s'explique facilement: Les fonctions DLookup(), Dmax(), DMin(), etc. sont très pratique, mais, comme tu peux le voir dans les fonctions de remplacement, une telle fonction de domaine doit, pour chaque ligne, ouvrir un recordset, passer la table en revue si le champ n'est pas indexé, récupérer la valeur qui va bien et pour finir, fermer le recordset. Et j'ai bien dit, pour chaque ligne...
Selon la construction, c'est toute la base qui doit transiter par le réseau !
Pour ce qui concerne les performances, il est également important de tenter d'éliminer un maximum de réponses par le premier critère... et de terminer par celui qui à le moins de poids.
Cordialement, Pierre(3stone) |
|
|
sujet actif
sujet clos
Important!
Nouveau message -
Rectifier message
Clôturer sujet
Remonter
|