Traitement très lent

Signaler
Messages postés
50
Date d'inscription
samedi 20 avril 2002
Statut
Membre
Dernière intervention
11 mars 2010
-
Messages postés
50
Date d'inscription
samedi 20 avril 2002
Statut
Membre
Dernière intervention
11 mars 2010
-
Bonjour,

Depuis plusieurs semaines je travail à monter un logiciel de traitement d'inventaire pour une librairie. Lors de mes tests avec 5 à 10 000 produits, le traitement (recherche etc...) étaient très rapide. Cependant je fais maintenant des test avec 120 000 produits (ce qui sera le minimum de produit en tout temps) et maintenant c'est très très lent. Je mattendais à une certain ralentissement mais pas à ce point, parfois ça prend presque 30 secondes pour trouver un produit. J'utilise access comme data base, est-ce la raison? Les cinq ordi son connecté à un serveur, la data base est sur le serveur.

est-ce que je devrais utilisé MS SQL Serveur? est-ce normal ou c'est mon coding qui est mal fait. S'il est possible qe ça soit mon coding dite le moi et je vais transmttre la açon que j'ouvre la data base.

Merci d'avance

Cognac

4 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
126
Tu peux peut-être accélérer largement le traitement en utilisant des index sur les champs de recherche si ce n'est pas déjà fait. Sinon, ca peux venir de la rapidité du réseau. Essaye d'optimiser tes requêtes également en les rendant moins complexes.
_______________________________________

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer

Salut, éssaie de faire une recherche avec "FIND" :
Un exemple:
Private Sub command1_click()
Adodc1.Recordset.MoveFirst
'Recherche dans le champ "UserName" la chaine "Jean"
recherche = "Jean"
Adodc1.Recordset.Find "UserName = '" & recherche & "'", 0, adSearchForward, adBookmarkFirst
TestExistingLogin
End If
End Sub

Private Sub TestExistingLogin()
On Error GoTo 10 '(S'il ne trouve pas la recherche y a pas de focus sur le recordset donc ERREUR)
If UCase(Adodc1.Recordset("Pass")) = "MONPASS" Then '(Lit les autres champs)
MsgBox "OK", vbOKOnly, "OK"

Else
MsgBox "Mot de passe incorrect !... veuillez recommencer...", vbOKOnly, "Erreur d'identification !..."
End If
Exit Sub
10
MsgBox "Login incorrect !... veuillez recommencer...", vbOKOnly, "Erreur d'identification !..."
End Sub

Tu veras ca ira bcp plus vite

A+

A.C.I.V.E SARL
Automatismes Conception Informatique Vidéo Electronique
Messages postés
34
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
30 novembre 2004

Salut,

petite question : dans ton test la base était locale ou réseaux ?

Car il faut savoir que Access n'est pas un SGDB client/serveur. L'accès au BDD sur Access monopolise beaucoup de ressources réseaux et machines => ralentissement entre local et réseaux.
De plus ton réseaux à une vitesse limitée par rapport à celle du local : 100Mbauds (=> 12 Moctets / Secondes) contre 2Gbauds pour un disque local.

Enfin, il faut savoir qu'avec Access L'utilisation de recordset autre que Table nécessite le pré-chargement des données => temps certain pour beaucoup d'enregistrement... Même dans le cas d'une clause Where très restrictive, l'action de filtrage est effectuée sur ta machine => toutes les données passent sur le réseau !!!

Donc essaye de n'utiliser que des recordsert de type <<table>>, créer pour cela des index pour tes recherches et position la propriété "Index" de ton recordset avant d'effectuer la méthode "Seek" pour rechercher.

A+
Messages postés
50
Date d'inscription
samedi 20 avril 2002
Statut
Membre
Dernière intervention
11 mars 2010

Merci pour ces réponses. Je travail à appliquer vos conseils et vous reviens avec les résultats.

Cognac