IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

[code] recherche multi critére


Sujet :

Access

  1. #21
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    @ cafeine: je crois que le 0 doit etre remplacé par "" et non "0"

    c'est une erreur que l'on fait souvent quand on commence et on a tous commencé , confondre les conditions null suivant le type de champ...
    la condition avec le 0 doit vouloir dire pour batide "si le champ est vide alors..." et non " si le champ contient 0 alors...", mais le 0 n'est pas approprié pour le champ de type Texte, sauf exceptions (il y en a toujours )

    Donc je proposerai de remplacer cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT ID_site, toponyme FROM [point d'observation] Where [point d'observation]!ID_site <> '0' "
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT ID_site, toponyme FROM [point d'observation] Where [point d'observation]!ID_site <> "" "
    voilou

  2. #22
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    je pense que tu as raisons, la formul SQL tourne correctement dans execution....
    Merci beaucoup
    J'ai plus qu'a trouver pourquoi il n'affiche pas les résultat dans la liste4 .
    Je reprend espoir...

  3. #23
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    vue que mes recherches se font sur plusieurs tables, ne faut-il pas que je lui spécifie une réponse en SQL ou l'identifiant vient de la table fils :
    Donc une réponse spécifique à chaque champs de recherche...

  4. #24
    Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 132
    Points : 68
    Points
    68
    Par défaut
    Si ta recherche se fait sur plusieurs table alors tu dois faire tes relations dans ta chaine sql. Dans le WHERE.
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "WHERE (dbo_tbProcedures.RefCateg=dbo_tbCategories.RefCateg) "

  5. #25
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    en fait je te conseille d'ecrire ta requete complete dans une vraie requête (en remplaçant les consitions sur les champs du formulaires par des conditions valables dans les Requetes SQL) et non pas dans du SQL dans du VBA, ensuite tu la testes, si elle fonctionne, tu l'utilises dans le VBA en remettant les bonnes conditions.

    à partir de là, tu sauras si c'est ton SQL qui plante ou ton SQL dans le Code VBA.

    L'assistant de requetes SQL est ton ami

  6. #26
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    j'ai pas bien compris ta proposition FabienN, c'est une sorte de jointure par la clause WHERE? (sinon trés bien le lien)

    j'ai réussi a faire des requêtes qui fonctionne pour chacun des résultats attendus mais comment faire pour les assembler ou les "compiler" en fonction des critéres selectionnés dans mon formulaire, je sais que en Xml il est possible de faire des "boucles" pour ce type de recherche (j'ai de trés vague notion, ça date ) est ce qu'on peu en faire autant en SQL ou VBA?

    en effet l'assistant requêtes est un allier non négligeable

  7. #27
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    je me lance encore dans une supposition (c'est bien de se souvenir de ses propres erreurs )

    As-tu créé des combobox avec l'assistant? si oui et bien lui par contre n'est pas toujours ton ami, car le bougre ajoute automatiquement la clef de la source dans la combobox mais ne l'affiche pas (il te le demande, mais par défaut, il le cache), donc je pense que tes combobox en colonne 0 (source par defaut s'il ya plusieurs colonne dans tes combobox) n'ont pas le critère que tu souhaites selectionner mais la clef correspondante... d'où pas de resultat dans la liste.

    Et si ça ne marche toujours pas, je te propose la demarche du pas à pas, en faisant d'abord ton code sans critere, puis test, puis ajout du bout de code avec 1 citere, puis test,... tu trouveras ainsi facilement le bout de code qui plante.

    Bonne chance

  8. #28
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    je crois que j'ai compris le but de la manipulation FabienN
    je vous tien au courant...

  9. #29
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    le plus simple je pense (pour avoir un code VBA clair) est de faire une requete intermediaire avec l'assistant qui reprend toutes les données de ton ancienne requete (ayant, elle, plusieurs sources) et qui sera ton unique source pour ton SQL dans ton code VBA.

  10. #30
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    je peense que je tiens le bon bout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Private Sub RefreshQuery()
     Dim SQL As String
     Dim SQLWhere As String
     
    SQL = "SELECT [point d'observation].ID_site,[point d'observation].toponyme FROM [point d'observation],[interpretation], [geosysteme], [période] WHERE ([point d'observation].ID_site <>'')"
     If Not Me.Cocher6 Then
        SQL = SQL & " AND [point d'observation]![type de site] like '*" & Me.type_site & "*' "
     End If
     
     If Not Me.Cocher8 Then
     
        SQL = SQL & " AND  ((([point d'observation].ID_site)=[geosysteme]![ID_site])AND ((geosysteme.type_Snat) Like '*" & Me.type_Snat & "*'))"
     End If
     
    If Not Me.Cocher12 Then
     
         SQL = SQL & " AND((([point d'observation].ID_site)=[période]![ID_site]) AND ((période.ID_perio)=[interpretation]![ID_perio]) AND ((interpretation.interpretation) Like '*" & Me.txtinterp & "*'))"
     End If
     
     
     SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     SQL = SQL & ";"
     
     Debug.Print SQL
     
     Me.Liste4.RowSource = SQL
     Me.Liste4.Requery
    j'ai encore a régler le pb de la répétition des données dans la listes réponse... Mais sinon c'est pas mal

  11. #31
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 34
    Points : 12
    Points
    12
    Par défaut

    j'ai trouver DISTINCT bien sur
    Finalement on peu tous faire avec SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT DISTINCT [point d'observation].ID_site,[point d'observation].toponyme FROM
    ça marche
    MERCI A TOUS
    ouf, quel bonheur....

  12. #32
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    heu je me suis peu étre un peu avancé....
    il met 3 plombe pour trouver les résultats...

  13. #33
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    just avant de faire une pause, LeScandinave: merci pour les combox, je n'ai plus de pb de ce côté...
    il reste à voire si je peu pas faire un procédure plus légére...sinon ça à l'aire de marcher.

  14. #34
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    slt,

    pour les lenteurs si ta table contient beaucoup de données il peut être utile de mettre un index dans la table sur les champ de ta clause Where
    Au moins sur ceux qui ont le plus de valeur distinctes

  15. #35
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    merci Arkham46
    j'ai indexé tous les champs, mais il continu a ramer au moment du Click et déclick sur les chkbox.
    j'ai plus de 1500 enregistrements dans la table [point d'observation], peut -étre la raison du temps de recherche :

  16. #36
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    alors je n'utilise pas exactement le code du tuto de cafeine comme cafeine le fait.
    Et ça peut permettre d'éviter de la lenteur. Dans mes appli, je n'ai pas besoin de voir le résultat dans la liste après chaque mise à jour des combobox et autres controles.
    Donc j'ai rajouté un bouton qui appelle le code du RefreshQuery (et donc pas à chaque choix de critères) et qui met à jour la liste. L'avantage si ça rame, ça ne rame qu'une fois.

    Mais bon, ça n'a encore jamais ramé, ouf

Discussions similaires

  1. Erreur code recherche multi-critères
    Par bétécé dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 23/11/2006, 11h14
  2. Recherche Multi critère (besoin ENCORE d'enrichir le code)
    Par lagratteCchouette dans le forum Access
    Réponses: 9
    Dernier message: 28/03/2006, 21h01
  3. problème SQL avec le tutoriel recherche multi critère
    Par qbihlmaier dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/12/2005, 19h33
  4. problème avec résultat de recherche multi-critères
    Par audrey_desgres dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 11h00
  5. Procédure stockée: recherche multi-critères
    Par biroule dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 01/09/2004, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo