falstuff
Messages postés40Date d'inscriptionjeudi 23 septembre 2004StatutMembreDernière intervention26 avril 2012
-
14 sept. 2005 à 15:25
tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 2011
-
23 sept. 2005 à 17:26
Bonjour,
j'ai un souci avec une base access en réseau. Sur le poste ou elle est installé la taille du mdb augmente considérablement. aprés compactage elle fait 9Mo, aprés 1 journée de travail (de saisi et traitement des utilisateurs) elle fait 2Go passé. En revanche elle stagne à 2Go. Ce que je ne comprends pas c'est que ca le fait uniquement sur leur serveur. J'ai essayé sur plusieurs postes et tout ce passe bien. aprés avoir fait des recherches dans mon code je ferme tout les recordsets (chose que je ne faissait pas forcément) mais rien à faire ca continue ... Si quelq'un peut me donner une raison de mon pb ou meme mieux me donner une solution ca serait super sympa. C'est une base de donnée access 2000 qui tourne en TSE sous windows 2000. Le pire c'est qu'il y a d'autre BD sur le serveur (bcp plus importante : des usines à gaz ;-) ) et y'a aucun probleme. Autre précision l'application est fait en access 2000 en multi-utilisateur (chaque utilisateur à une copie de l'applic) et celle ci pointant sur le mdb qui stocke les datas sur le serveur.
Merci de votre aide, ca la j'avoue que j'y comprends pas grand chose
Falstuff
tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 20119 14 sept. 2005 à 16:31
lollllllllllllllllllll passer de 9Mo à 2Go faut le faire!!!
Ya combien d'utilisateurs qui se servent de cette base!? 1000?
Tu parles de recordset, mais sous access, tu n'en as pas vraiment
besoin sauf pour la vitesse d'exécution et encore... Ca fait 3 ans que
je programme sous access tous les jours et je n'ai quasiment jamais
besoin de recordset... Access gère tout ça, il suffit de savoir s'en
servir. Seul les gens passant de VB à Access font ce genre de chose...
J'ai fait plusieurs appli local qui récupèrent les tables du
serveur pour bosser plus vite, cette copie engendre un gonflement
exponentielle de la table, mais tout redevient normal lorsque
l'utilisateur ferme et que le prog se compacte.
Sinon d'autres programmes sont sur chaque poste également et utilisent
des tables liés sur le serveur. Dans ce cas, le programme serveur ne
bouge pas des masses, il prend quelques Ko par jour mais rien de bien
méchant, pourtant un paquet de donnée y sont entrées par jour. il n'a
pas de raison de grossir vu qu'on ne copie pas de table à l'intérieur.
Il doit y avoir quelque chose qui se copie dans ton prog et qui fait gonfler là base.
J'ai remarqué que si tu insères une table dans un prog ce dernier
grossit, si tu supprimes la table, le programme conserve sa taille bien
qu'il n'est plus la table, si tu recopies la même table juste après, le
programme grossit encore... Là je comprendrais pourquoi ta table
grossit de cette façon. Essayes de voir si ce phénomène ne se produit
pas. La création de report complexe contenant des images peuvent être
aussi à l'origine, quoiqu'il en soit, c la pire des usines à gaz
que je connaisse lol
Autrement, essayes de mettre tous les utilisateurs sur le prog du
serveur. Pour voir ce que ça donne. Sinon essayes de surveiller la
taille du prog, du début à la fin pour essayer de voir ce qui pourrait
avoir changé entre temps.
TBBUIM
falstuff
Messages postés40Date d'inscriptionjeudi 23 septembre 2004StatutMembreDernière intervention26 avril 20122 14 sept. 2005 à 17:39
merci de ta réponse.
Oui je peux la compacter bon c'est un peu long tout de meme, surtout en tenant compte que je me connecte sur le serveur par un petit modem RTC 56ko mais bon...
J'suis curieux de savoir comment tu fait tes traitements sans utiliser de recordset ?!? Je parle des variables en code que tu déclares de type recordset. Personnellement ca fait 5 ans que je travail sous access pour le compte de ma boite et peut etre 5 ans autre année pour m'apprendre. Et franchement j'ai jamais vu un truc comme ca ! De plus ca le fait que sur un seul pc (le serveur TSE...). J'ai pas d'image ou trés rare dans mon applic et cette applic est toute petite. En revanche je vais verifier s'il n'y a pas de table temporaire qui se crée et supprime dans des traitements, ca pourrait etre une explication comme tu m'a parlé, mais passé de 9Mo à 2Go rien qu'avec ca c'est gros tout de meme. En principe les datas gonffle de quelques kilo par jour comme tu dis, mais pour cette applic c'est de quelques giga par jour lol. J'ai vu sur le site de microsoft de verifier la version MDAC, peut etre que ca résoudrait mon pb mais j'suis septique car comme je l'ai indiqué dans mon message précédent, c'est pas la seul applic qui tourne sur ce serveur et c'est la seule à poser ce pb. Je vais quand meme essayer (qui ne tente rien, n'a rien ;-) ) Sinon il sont peut etre 5-6 utilisateurs à l'utiliser.
tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 20119 15 sept. 2005 à 09:53
A quoi te sert concrètement tes recordsets?
Parce que je ne me sers quasiment JAMAIS sous access!
Seuleument si j'ai un affichage d'un grand nombre de données à faire dans un formulaire.
Sinon pour les traitements je me sers de requête.
Il est rare que je me serve de recordset, c'est vraiment dans le cas,
ou les données à traiter sont trop importante (+de 50 d'un coup) là ça
vaut le coup de faire un recordset...
J'ai fait tous les programmes de ma boite, gestion de stock,
facturation ,rémunération, gestion appels technique, commandes... ils
sont une 20taine à se servir de mes progs tous les jours, et tout
marche très bien...
Pour en revenir à ta base, tu peux toujours essayer de la refaire, en
utilisant une base qui marche bien (en la vidant) et en replaçant tout
par ce qu'il y a dans ton prog...
TBBUIM
Vous n’avez pas trouvé la réponse que vous recherchez ?
falstuff
Messages postés40Date d'inscriptionjeudi 23 septembre 2004StatutMembreDernière intervention26 avril 20122 15 sept. 2005 à 15:36
ca c'est une question... Ce servir des recordsets c'est devenu une habitude maintenant. Je m'en sert pour pas mal de raison. D'une part ca évite d'avoir 150000 requetes enregistrer dans la base de donnée, c'est plus facile à retracer. Ca permet de faire pas mal de traitement tout en evitant un enchainement de requete, en code tu es plus libre de faire ce que tu veux et plus facilement. Certes tu peux t'en passer mais par exemple je trouve plus simple de changer de source d'un formulaire ou d'une liste en code qu'en requete. Ca permet également d'alléger la base de donnée. si par exemple dans un formulaire tu as 50 listes déroulantes, access mettra du temps à ouvrir le formulaire. Il suffit juste d'attribuer la source de donnée de ces listes sur l'événement sur entrée.
De meme, avec les recordset tu peux utiliser plein de variable. par exemple tu fait une fonction général qui est appellé en plusieurs endroits dans ton application. Tu peux passer en parametre de la fonction des champs à selectionner, des conditions, faire des requetes imbriqué et tous ca avec le meme recordset. Imagine le nombre de requete que tu aurait pour un tel cas.
Essaye d'utiliser et t'habituer au recordset, tu verras que par la longue tu vas aussi vite pour developper, c'est moins le bordel (avec de l'organisation et de la logique), et tu es LIBRE de faire ce que tu veux.
Pour mon pb, je vais pas m'amuser à tout refaire !
tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 20119 19 sept. 2005 à 09:54
Hmmm ok ok
Mais alors moi j'ai un blem avec ces maudits recordset
A chaque fois que je veux faire une requête compliquée
il me sort une erreur en disant: trop de paramètre...
Alors jsuis obligé de copier le résultat de la rq dans une table tempo
et de faire le recorset dessus...
Par contre je vois pas le soucis au niveau de l'organisation, si tu
nommes bien tes rq, t'as pas de problème pour t'y retrouver et tu peux
passer des fonctions en paramètres également... Mais jsuis d'accord
avec toi, c'est plus lent, mais pour des petits formulaire, c mieux de
faire des requêtes, ya moins de code à écrire...
Et dernière chose, si t'as un problème dans ta requête tu peux tester
et changer des paramètres directement, tu as le résultat en feuille de
données, ça c'est appréciable aussi
falstuff
Messages postés40Date d'inscriptionjeudi 23 septembre 2004StatutMembreDernière intervention26 avril 20122 19 sept. 2005 à 11:09
Pour ton message d'erreur trop de paramètre..., je vois 2 causes possible, soit il te manque un champ dans ta requete ou un champs est mal orthographier (par exemple si tu as un espace dans un nom de champs faut le mettre entre crochet) ou soit tu fait référence à un champ dans un formulaire (=forms![NomForms]![Nomchamps]) dans ce cas, il faut le mettre entre des "et commercial" (&) en faisant attention si c une chaine de caractere ou pas. Ex : where [Champ]=" & forms![nomforms]![nomchamps] & " And...... ==> Ca c pour du numérique ou autre champs non texte. where [Champ]='" & forms![nomforms]![nomchamps] & "' and....
et ca c pour du texte.
tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 20119 21 sept. 2005 à 14:57
en fait il me dit ça que je fais un recordset sur une requête contenant des paramètres...
donc je fais slect * from rq_à_la_con et boom erreur de merde...
Bref, ça me le fait même quand j'écris la requête entière et je l'écris
nikel, en plus, avec & " et tout et tout, enfin je sais pas c
chelou, je mets la même requête sans RIEN toucher dans une table et je
fais le recordset sur la table et ça marche!
Bref, j'ai une petite question:
Je voudrais afficher une liste de résultat dans un form en mode continu.
D'habitude, je fais toujours ça avec une requête.
Mais est-ce que tu peux attribuer un recordset à la source d'un form?
falstuff
Messages postés40Date d'inscriptionjeudi 23 septembre 2004StatutMembreDernière intervention26 avril 20122 22 sept. 2005 à 13:15
salut,
Verifie si tu as toute les références que tu as besoin. Surtout microsoft DAO 3.5 ou autre version. Quand tu tapes dans le code Dim Rst as re... est ce qu'il te propose recordset. Si non ca veut dire que tu n'a pas la référence de selectionner pour ton projet.
Voici les références que tu dois avoir au minimun : Visual basic for application ; Microsoft access 9.0 ou autre version ; Microsoft DAO 3.5 ou autre version ; Microsoft form 2.0 (facultatif mais peut poser des problemes si elle n'y est pas dans certain cas)
SI tu as toute les références peut tu me donner un exemple de ton code pour que je puisse mieux t'aider.
tu peux attribuer un recordset à la source d'un forms, mais en passant une chaine de caractere et non un recordset. Soit tu met ton instruction sql entre guillemet : me.recordsource="Select * from Table where....." soit tu déclare une variable String : Dim Rst as string puis rst = select * from table where...." puis apres me.recordsource=rst