pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009
-
15 mai 2009 à 21:21
pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009
-
18 mai 2009 à 00:49
Bonjour,
J'ai fait un programme de base de données. Le programme est lancé depuis le disque dur de l'ordinateur client, et la base de données (Access) se trouve sur un serveur dans un disque dur partagé (j'ai pas eu le choix).
Or, je rencontre de nombreux problèmes de ralentissements, notamment sur les ordinateurs qui accèdent à ce disque dur via un réseau privé mais basé sur de l'internet classique (mais abonnement "Pro"), du genre 10 Méga assurés. Parfois, il faut attendre de plusieurs secondes à une minute afin de pouvoir envoyer ses enregistrements.
Je pense que je me débrouille bien en tant que base de données mono-utilisateur, et je pensais que le multi-utilisateur allait être pareil... ce qui ne semble pas être le cas.
Est-ce qu'une âme charitable pourrait me faire une check-list de choses à faire (ou ne pas faire) pour optimiser le tout et faire en sorte que la bande passante soit le moins sollicitée ?
Pour info, j'utilise bien sûr des requêtes les plus ciblées possibles : "Select * FROM MaTable WHERE Truc = 'Machin'".
Enfin, si quelqu'un peut me dire comment faire pour envoyer une série d'enregistrements en utilisant le moins de bande passante possible (et donc sans monopoliser la base de données), ça me rendrait grand service. J'ai pensé à UpdateBatch(), mais visiblement je dois mal m'en servir. Le principe serait d'envoyer un tableau d'une centaine de lignes comportant chacune 3 colonnes à remplir dans la base.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 16 mai 2009 à 04:40
Salut
Access n'est pas l'outil rêvé pour faire du réseau ni du multi-utilisateurs.
SQL Server serait mieux approprié.
Sinon, quand tu as une série de données à transmettre et que tu crains des erreurs ou interruptions, il y a les transactions.
L'avantage, c'est que si tu veux abandonner alors que tu as envoyé 90% des données, tu peux revenir en arrière et ainsi être sûr de ne pas avoir vérolé ta base, pratique quand tu dois faire des mises à jour sur plusieurs tables.
Avant de commencer tes requètes, tu commences par un
maConnexion.BeginTrans
Tu fais tes requètes.
Si tout c'est bien passé, tu valides les requètes avec
maConnexion.CommitTrans
Si tu as besoin d'annuler
maConnexion.RollbackTrans
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009 16 mai 2009 à 10:45
Merci beaucoup pour ta réponse ! Juste pour savoir si j'ai bien compris :
le BeginTrans fait une sorte de cache des données à envoyer, et CommitTrans les envoie toutes d'un coup (à partir du cache).
Sinon, penses-tu que j'aie pu faire des erreurs ou oublier de paramétrer quelque chose de basique pour optimiser ma base de données ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 16 mai 2009 à 16:39
Re
Je ne sais pas si c'est un cache côté serveur ou client.
PS : Je ne sais pas non plus si la syntaxe proposée à exactement cette forme sous VB.Net, mais au moins tu as les mots clé pour faire la recherche dans la doc.
Côté paramétrage, je ne connais pas ton projet, imlpossible de te dire si tu as pensé à tout.
Le principal étant de prendre un moteur d'interface moderne, genre ADODB en version 2.8 (.Net a peut-être une version différente et adaptée)
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009 17 mai 2009 à 01:31
Les syntaxes sont bien les mêmes en VB.Net
J'utilise l'ADODB fourni par le .Net Framework, qui est la version 7.0 (mais c'est pas ADO.Net).
Concernant l'optimisation, je pensais plutôt du côté du fichier de la base de données à proprement parler : y aurait-il quelque chose à activer pour faciliter le multi-utilisateur ou pour réduire la bande passante utilisée ?
Merci encore pour ton aide !
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 17 mai 2009 à 20:35
"quelque chose à activer " Je ne pense pas, non.
Eventuellement, si tu envoies des données en rafale, ajoute une tempo de 1 sec tous les 5 ou 10 envois.
Côté machine serveur, est-elle adaptée : mémoire, rapidité, qualité disque ?
Les bases Access ont la facheuses tendance à grossir au fur et à mesure de leur utilisation : Une petite compression de temps en temps n'est pas du luxe.
Sinon, pense sérieusement à passer sur SQL Server, même en version gratuite Express, c'est une merveille.
Seule limite de cette version Express : la taille maxi de la DB (1Go je crois)
Et là, SQL Server est vraiment fait pour le multi-connexions.
Passer ta DB de Access à SQL Server est simple.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)