Problème de lenteur, accès distant à base Access [Résolu]

Signaler
Messages postés
110
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
18 mai 2009
-
Messages postés
110
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
18 mai 2009
-
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.

Merci beaucoup pour votre aide !

6 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
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)
Messages postés
110
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
18 mai 2009

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 ?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
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)
Messages postés
110
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
18 mai 2009

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 !
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
"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)
Messages postés
110
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
18 mai 2009

Merci beaucoup Jack pour tes éclaircissements !