Comment optimiser une requette

Résolu
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 - 6 août 2009 à 06:51
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 - 6 août 2009 à 19:34
bonjour
mes connaissances en base de données etant plus que rudimentaires j'aurais besoin d'un peu d'aide
j'ai dans une table un champ qui contient des "Name" qui se présentent ainsi:
ADA.01 ; HYBR.01 ; ADA.02 ; MTX.01 ; MXR.01 ; SW.01 ; etc...
ce sont les acronymes désignant des appareils avec leur indice d'ordre dans un plan autocad
j'aimerais pouvoir ne récupérer que les enregistrements dont le "Name" contient un acronyme donné
par exemple récupérer dans recordset tous les enregistrements qui dans le champ "name" contiendraient ADA
pour l'instant je fais ceci mais ça ne me semble pas tres optimisé
    RecSet.Open "SELECT * FROM Matos WHERE NumZone ='" & sNumZone & "' ORDER BY Name ", CMain, adOpenDynamic
    Do Until RecSet.EOF
        If InStr(RecSet!Name, acronyme) <> 0 Then
           'ici mon code de traitement
        End If
        RecSet.MoveNext
    Loop


Dans la foulée si quelqu'un connaissait un tuto "pour les nuls" ça m'éviterais de poser des question aussi basiques
Merci d'avance

6 réponses

lesdis Messages postés 403 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 7 août 2020
6 août 2009 à 14:01
Bonjour,

Voir aussi la clause LIKE

"SELECT * FROM Matos WHERE NumZone ='" & sNumZone & "'
AND type_piece LIKE "%ADA%"
ORDER BY Name "

Te renverra tous les enregistrements dont type_piece contient le mot ADA.

Bonne Prog
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
6 août 2009 à 08:11
Salut

Utilise le IN
et evite le *

SELECT * FROM Matos WHERE NumZone ='" & sNumZone & "'
AND type piece in ('ADA.01,'.......)
ORDER BY Name "

Bon sql
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
6 août 2009 à 14:08
C'est pas beau le like %mot%

C'est imperformant au possible d'ou mon IN qui est plus performant

Pour info, on SQL on evite le plus possible les like et les OR
Quand on peut transformer en ensemble fini les conditions.
0
lesdis Messages postés 403 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 7 août 2020
6 août 2009 à 14:19
Ha je ne savais pas, merci du tuyaux :)

Bonne Prog
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
6 août 2009 à 15:11
C'est logique quand y pense.

Il faut une réflexion ensembliste dans les bases de données.

Et il faut eviter les NOT au passage.

Et éviter les left join ou right join si un inner join fait l'affaire.
Ne pas mettre les clauses de jointure dans le where mais en join.
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
6 août 2009 à 19:34
c'est peut être pas beau mais ça marche parfaitement
0
Rejoignez-nous