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

IHM Discussion :

recherche multi-critères(15) complexe


Sujet :

IHM

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 34
    Points : 19
    Points
    19
    Par défaut recherche multi-critères(15) complexe
    Bonjour,
    Je commence à faire mon formulaire de recherche à partir d'un des tutoriel:
    http://cafeine.developpez.com/access...echerchemulti/

    Mon début de code pourtant simple ne fonctionne pas:
    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
    Dim SQL As String
     
     SQL = "SELECT Articles.FERT, Articles.FlexivacNum, Articles.Structure, Customers.CustomerName, Customers.DeliveryCountry FROM TestStructures INNER JOIN (Structures INNER JOIN (ComponentsProperties RIGHT JOIN (Customers INNER JOIN (Articles LEFT JOIN FERT_Components ON Articles.FERT = FERT_Components.Fert) ON Customers.CustomerNum = Articles.CustomerNum) ON ComponentsProperties.ComponentName = FERT_Components.ComponentName) ON Structures.Structure = Articles.Structure) ON TestStructures.TestStructure = Structures.TestStructure WHERE ((Customers.CustomerNum<>0) "
     
    If optCustomer.Value = 3 Then
        SQL = SQL & "And ((Customers.DeliveryCountry) = '" & Me.cboCustomerCountry & "') "
    End If
     If optCustomer.Value = 1 And Me.cboCustomerNum.Value <> "" Then
        SQL = SQL & "And ((Customers.CustomerNum) = '" & Me.cboCustomerNum & "') "
    End If
     If optCustomer.Value = 2 And Me.txtCustomerName.Value <> "" Then
        SQL = SQL & "And ((Customers.CustomerName) like '*" & Me.txtCustomerName & "*') "
    End If
     
    If optStructure.Value = 1 Then
        SQL = SQL & "And ((Articles.FlexivacNum) = '" & Me.cboFlexivacNum & "') "
    End If
    If optStructure.Value = 2 Then
        SQL = SQL & "And ((Articles.Structure) = '" & Me.cboStructure & "') "
    End If
    If optStructure.Value = 3 Then
        SQL = SQL & "And ((Structures.TestStructure) = '" & Me.cboTestStructure & "') "
    End If
    SQL = SQL & ")GROUP BY Articles.FERT, Articles.FlexivacNum, Articles.Structure, Customers.CustomerName, Customers.DeliveryCountry;"
    Me.lstresults.RowSource = SQL
     Me.lstresults.Requery
    End Sub

    Une idée?
    Merci

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,

    "ne fonctionne pas" ... c'est vague !

    Tu as un message d'erreur? le comportement n'est pas celui attendu?...

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    aucun résultat ne s'affiche dans la zone de liste.

  4. #4
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    fais une exécution pas à pas pour voir ce que vaut la variable SQL obtenue...

    Tu la copies (via la fenêtre d'exécution) et tu la places dans une nouvelle requête pour voir ce que cela donne...

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Comment faire une execution pas à pas?


    Voici ce à quoi devrait ressembler mon code entier:
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Private Sub RefreshQuery()
     Dim SQL As String
     
     SQL = "SELECT Articles.FERT, Articles.FlexivacNum, Articles.Structure, Customers.CustomerName, Customers.DeliveryCountry FROM (TestStructures INNER JOIN (Structures INNER JOIN (ComponentsProperties RIGHT JOIN (Customers INNER JOIN (Articles LEFT JOIN FERT_Components ON Articles.FERT = FERT_Components.Fert) ON Customers.CustomerNum = Articles.CustomerNum) ON ComponentsProperties.ComponentName = FERT_Components.ComponentName) ON Structures.Structure = Articles.Structure) ON TestStructures.TestStructure = Structures.TestStructure) INNER JOIN UsingTemperature ON Articles.FERT = UsingTemperature.Fert WHERE ((Customers.CustomerNum<>0) "
     
     
    If optCustomer.Value = 3 Then
        SQL = SQL & "And ((Customers.DeliveryCountry) = '" & Me.cboCustomerCountry & "') "
    End If
     If optCustomer.Value = 1 And Me.cboCustomerNum.Value <> "" Then
        SQL = SQL & "And ((Customers.CustomerNum) = '" & Me.cboCustomerNum & "') "
    End If
     If optCustomer.Value = 2 And Me.txtCustomerName.Value <> "" Then
        SQL = SQL & "And ((Customers.CustomerName) like '*" & Me.txtCustomerName & "*') "
    End If
     
     
    If optStructure.Value = 1 Then
        SQL = SQL & "And ((Articles.FlexivacNum) = '" & Me.cboFlexivacNum & "') "
    End If
    If optStructure.Value = 2 Then
        SQL = SQL & "And ((Articles.Structure) = '" & Me.cboStructure & "') "
    End If
    If optStructure.Value = 3 Then
        SQL = SQL & "And ((Structures.TestStructure) = '" & Me.cboTestStructure & "') "
    End If
     
     
    If chkProperties.Value = -1 Then
        If cboUsingTemp <> 0 Then
            SQL = SQL & "And ((UsingTemperature.UsingTemp) = '" & Me.cboUsingTemp & "') "
        End If
        If cboFoodContact <> 0 Then
            SQL = SQL & "And ((Articles.FoodContact) = '" & Me.cboFoodContact & "') "
        End If
        If cboPackedProductType <> 0 Then
            SQL = SQL & "And ((Articles.PackedProductType) = '" & Me.cboPackedProductType & "') "
        End If
        If cboSite <> 0 Then
            SQL = SQL & "And ((Articles.Site) = '" & Me.cboSite & "') "
        End If
        If chkUsed = -1 Then
            SQL = SQL & "And ((Articles.Used) = '" & Me.cboUsed & "') "
        End If
        If chkBabyProduct = -1 Then
            SQL = SQL & "And ((Articles.BabyProduct) = '" & Me.cboBabyProduct & "') "
        End If
    End If
     
    If chkComponents = -1 Then
            If cboComponentType <> 0 Then
                SQL = SQL & "And ((ComponentsProperties.ComponentType) = '" & Me.cboComponentType & "') "
            End If
            If cboComponentNum <> 0 Then
                SQL = SQL & "And ((ComponentsProperties.ComponentName) = '" & Me.cboComponentNum & "') "
            End If
            If txtLMS <> "" Then
                SQL = SQL & "And ((ComponentsProperties.LMS) = '" & Me.txtLMS & "') "
            End If
    End If
    SQL = SQL & ")GROUP BY Articles.FERT, Articles.FlexivacNum, Articles.Structure, Customers.CustomerName, Customers.DeliveryCountry;"
    Me.lstresults.RowSource = SQL
     Me.lstresults.Requery
     
    End Sub
    La seule chose que j'ai remarqué c'est que dans certaine condition l'entête de colonne de ma zone de liste s'affiche ou ne s'affiche pas.
    Petit problème: je n'ai pas de résultat.

  6. #6
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour.

    Pour le pas à pas.

    Au début de la procédure, cliquer à gauche de la ligne. Normalement un gros point marron doit apparaître, c'est un point d'arrête. Ensuite cliquer sur le bouton "Pas à pas" de la barre d'outils "Debug"

    ( Débogage des requêtes écrites en VBA


    D'autre part, je pense que l'erreur vient de la prise en compte des valeur des listes déroulante, comme

    SQL = SQL & "And ((Customers.DeliveryCountry) = '" & Me.cboCustomerCountry & "') "
    Me.cboCustomerCountry étant numérique, il ne me semble pas nécessaire de mettre des quotes (').

    Essayer quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = SQL & "And ((Customers.DeliveryCountry) = " & Me.cboCustomerCountry & ") "
    Pierre

  7. #7
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Merci,
    L'erreur venait de la première condition where. VBA interprete les nombre comme il veut et interprète les textes comme des paramettres. J'ai donc mis une variable différrente d'une autre.

    Pour les pas à pas, le problème est qu'il n'y avait pas de bug pour VBA.

    non non, un pays n'est pas un nombre.

    Merci beaucoup

    Il me reste encore beaucoup de chose à pofiner mais le principe est là.

    Dans le code de l'exemple il y a une étiquette pour compter les enregistrement trouvé. Je ne comprends pas le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim SQLWhere As String
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
    Me.lblStats.Caption = DCount("*", "Aticles", SQLWhere) & " / " & DCount("*", "Articles")

Discussions similaires

  1. [MySQL] Recherche multi-critères ou un seul
    Par jack1234 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/12/2005, 08h56
  2. Recherche multi-critères
    Par PAUL87 dans le forum Access
    Réponses: 66
    Dernier message: 13/12/2005, 12h12
  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