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

Requêtes et SQL. Discussion :

Recherche Multi-criteres Erreur 3075 [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Recherche Multi-criteres Erreur 3075
    Bonjour,

    J'ai cree une recherche multicriteres fonctionnant a merveille.
    Cependant, je voudrais trier les resultats par ordre alphabetique selon le champ "Supplier".

    Access m'affiche alors cette erreur :

    Run-time error '3075'
    Erreure de syntaxe (operateur absent) dans l'expression ??Base!ID <>0 And Category = 'Sport'Or Category2 = 'Sport' Or Category3 = 'Sport' ORDER BY Base.Supplier??.

    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
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT ID, Supplier, Category, Type, Country, Province, Turnover, Export, Status, Impression FROM Base Where Base!ID <> 0 And Category = 'Sport' Or Category2 = 'Sport' Or Category3 = 'Sport' ORDER BY Base.Supplier "
     
    If Not Me.chkCategory Then
        SQL = SQL & "And Base!Category = '" & Me.cmbRechCategory & "' "
    End If
    If Not Me.chkSupplier Then
        SQL = SQL & "And Base!Supplier like '*" & Me.txtRechSupplier & "*' "
    End If
    If Not Me.chkCountry Then
        SQL = SQL & "And Base!Country = '" & Me.cmbRechCountry & "' "
    End If
     
    If Not Me.chkType Then
        SQL = SQL & "And Base!Type = '" & Me.cmbRechType & "' "
    End If
     
    If Not Me.chkProvince Then
        SQL = SQL & "And Base!Province = '" & Me.cmbRechProvince & "' "
    End If
     
    If Not Me.chkTurnover Then
        SQL = SQL & "And Base!Turnover = '" & Me.cmbRechTurnover & "' "
    End If
     
    If Not Me.chkExport Then
        SQL = SQL & "And Base!Export = '" & Me.cmbRechExport & "' "
    End If
     
    If Not Me.chkStatus Then
        SQL = SQL & "And Base!Status = '" & Me.cmbRechStatus & "' "
    End If
     
    If Not Me.chkImpression Then
        SQL = SQL & "And Base!Impression = '" & Me.cmbRechImpression & "' "
    End If
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.lblStats.Caption = DCount("*", "Base", SQLWhere) & " / " & DCount("*", "Base")
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
     
    End Sub
    En vous remerciant par avance des reponses que vous pourrez m'apporter,

    Bonne journee

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    A mon avis il faudrait placer le ORDER BY au niveau de tes IF...

    Car là tu fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    -- Mauvaise synthaxe
    SELECT...
    FROM...
    WHERE...
    ORDER BY...
    AND... 
     
    -- Bonne synthaxe
    SELECT...
    FROM...
    WHERE...
    AND... 
    ORDER BY...


  3. #3
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Je pense comprendre ce que tu veux dire.

    Je pense que cela doit etre simple a coder mais je n'y suis pas arrive.

    Peux tu je te prie uniquement recoder un des IF pour que je puisse voir a quoi cela doit ressembler?

    Merci d'avance

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Oui monsieur,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Me.chkCategory Then
        SQL = SQL & "And Base!Category = '" & Me.cmbRechCategory & "' ORDER BY Base.Supplier "
    End If


    Ainsi ta requête complète donnera (Pense à virer la clause ORDER BY de ta première ligne) :

    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
    SELECT ID
             , Supplier
             , Category
             , Type
             , Country
             , Province
             , Turnover
             , Export
             , Status
             , Impression 
    FROM Base 
    Where Base!ID <> 0 
    -- Pense a ajouter des parenthèses
       And 
    (
             Category = 'Sport' 
         Or Category2 = 'Sport' 
         Or Category3 = 'Sport'
    )
       And Base!Category = '" & Me.cmbRechCategory & "' 
    ORDER BY Base.Supplier


  5. #5
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup, la recherche fonctionne!

    Par contre, J'avais code une petite statistique qui me donnait le nombre de contacts trouves par rapport a l'ensemble de ma base et le fait d'ajouter le classement alphabetique avec "ORDER BY" le fait buggera la troisieme ligne avant la fin "Me.lblStats.Caption = DCount("*", "Base", SQLWhere) & " / " & DCount("*", "Base")".

    En voici le code complet...

    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
    66
    67
    68
    69
    70
    71
    72
    73
    Private Sub Form_Load()
     
    Dim ctl As Control
     
    For Each ctl In Me.Controls
        Select Case Left(ctl.Name, 3)
            Case "chk"
                ctl.Value = -1
     
            Case "lbl"
                ctl.Caption = "- * - * -"
     
            Case "txt"
                ctl.Visible = False
                ctl.Value = ""
     
            Case "cmb"
                ctl.Visible = False
     
        End Select
    Next ctl
     
    Me.lstResults.RowSource = "SELECT ID, Supplier, Type, Country, Province, Turnover, Export, Status, Impression FROM Base Where ( Category = 'Sport'Or Category2 = 'Sport' Or Category3 = 'Sport' ) Order by Base.Supplier ;"
    Me.lstResults.Requery
     
    End Sub
     
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT ID, Supplier, Type, Country, Province, Turnover, Export, Status, Impression FROM Base Where Base!ID <> 0 And ( Category = 'Sport' Or Category2 = 'Sport' Or Category3 = 'Sport' ) ORDER BY Base.Supplier "
     
    If Not Me.chkSupplier Then
        SQL = "SELECT ID, Supplier, Type, Country, Province, Turnover, Export, Status, Impression FROM Base Where Base!ID <> 0 And ( Category = 'Sport' Or Category2 = 'Sport' Or Category3 = 'Sport' ) And Base!Supplier like '*" & Me.txtRechSupplier & "*' ORDER By Base.Supplier "
    End If
    If Not Me.chkCountry Then
        SQL = "SELECT ID, Supplier, Type, Country, Province, Turnover, Export, Status, Impression FROM Base Where Base!ID <> 0 And ( Category = 'Sport' Or Category2 = 'Sport' Or Category3 = 'Sport' ) And Base!Country = '" & Me.cmbRechCountry & "' ORDER BY Base.Supplier "
    End If
     
    If Not Me.chkType Then
        SQL = "SELECT ID, Supplier, Type, Country, Province, Turnover, Export, Status, Impression FROM Base Where Base!ID <> 0 And ( Category = 'Sport' Or Category2 = 'Sport' Or Category3 = 'Sport' ) And Base!Type = '" & Me.cmbRechType & "' ORDER BY Base.Supplier "
    End If
     
    If Not Me.chkProvince Then
        SQL = "SELECT ID, Supplier, Type, Country, Province, Turnover, Export, Status, Impression FROM Base Where Base!ID <> 0 And ( Category = 'Sport' Or Category2 = 'Sport' Or Category3 = 'Sport' ) And Base!Province = '" & Me.cmbRechProvince & "' ORDER BY Base.Supplier "
    End If
     
    If Not Me.chkTurnover Then
        SQL = "SELECT ID, Supplier, Type, Country, Province, Turnover, Export, Status, Impression FROM Base Where Base!ID <> 0 And ( Category = 'Sport' Or Category2 = 'Sport' Or Category3 = 'Sport' ) And Base!Turnover = '" & Me.cmbRechTurnover & "' ORDER BY Base.Supplier "
    End If
     
    If Not Me.chkExport Then
        SQL = "SELECT ID, Supplier, Type, Country, Province, Turnover, Export, Status, Impression FROM Base Where Base!ID <> 0 And ( Category = 'Sport' Or Category2 = 'Sport' Or Category3 = 'Sport' ) And Base!Export = '" & Me.cmbRechExport & "' ORDER BY Base.Supplier "
    End If
     
    If Not Me.chkStatus Then
        SQL = "SELECT ID, Supplier, Type, Country, Province, Turnover, Export, Status, Impression FROM Base Where Base!ID <> 0 And ( Category = 'Sport' Or Category2 = 'Sport' Or Category3 = 'Sport' ) And Base!Status = '" & Me.cmbRechStatus & "' ORDER BY Base.Supplier "
    End If
     
    If Not Me.chkImpression Then
        SQL = "SELECT ID, Supplier, Type, Country, Province, Turnover, Export, Status, Impression FROM Base Where Base!ID <> 0 And ( Category = 'Sport' Or Category2 = 'Sport' Or Category3 = 'Sport' ) And Base!Impression = '" & Me.cmbRechImpression & "' ORDER BY Base.Supplier "
    End If
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.lblStats.Caption = DCount("*", "Base", SQLWhere) & " / " & DCount("*", "Base")
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
     
    End Sub
    Si jamais la solution vous saute aux yeux, merci d'avance!

    Bonne journee

  6. #6
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    salut ^^

    Tu as quoi comme message d'erreur ?


  7. #7
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Message d'erreur
    Le malheureusement recurrent Run-time error '3075'

    Erreur de syntaxe (operateur absent) dans l'expression ??Base!ID <> 0 And ( Category = 'Sport' Or Category2 = 'Sport' Or Category3 = 'Sport' ) And Base!Type = " ORDER BY Base.Supplier??.

  8. #8
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Oui il te manque quelque chose...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    And Base!Type = " <== [LA] ORDER BY Base.Supplier
    Tu ne fais pas de test si "Type" est vide.... Il faudrait afficher un message !


  9. #9
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Ok, merci beaucoup!

  10. #10
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut Chtulus et bienvenu TomskyChina,

    je remarque une différence notable entre tes deux codes TomskyChina.
    tu as à l'origine comme critère en fin de traitement "A et B et C" dans le deuxième cas "A" ou "B" ou "C".

    je te conseil de construire ta requete en plusieurs étape:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    maSQL="SELECT * FROM Base"
    critere="Base!ID <> 0 And ( Category = 'Sport' Or Category2 = 'Sport' Or Category3 = 'Sport' )"
    critere=critere & iif(chkSupplier,"", " And Base!Supplier like '*" & txtRechSupplier & "*'")
    critere=critere & iif(chkCountry,"", " And Base!Country = '" & cmbRechCountry & "'")
    ...
     
    maSQL=maSQL & " WHERE " & critere & " ORDER BY Base.Supplier"
     
    ...
    si c'est le cas "A" ou "B" ou "C":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    critere2=iif(chkSupplier,"", " And Base!Supplier like '*" & txtRechSupplier & "*'")
    critere2=iif(chkCountry,"", " And Base!Country = '" & cmbRechCountry & "'")
    ...
    critere=critere & critere2
    ...
    tu peux ainsi utiliser "critere" pour le DCount.
    il est possible aussi d'obtenir le même résultat avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.lblStats.Caption = Me.Recordset.RecordCount & " / " & DCount("*", "Base")
    ou plus simplement utiliser un champ calculé en entete ou pied de page:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Compte(*) & "/" & CpteDom("*","Table1")

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. recherche multi critaire erreur 3075
    Par popofpopof dans le forum VBA Access
    Réponses: 1
    Dernier message: 02/10/2008, 10h14
  2. [formulaire] recherche multi criteres
    Par Treuze dans le forum IHM
    Réponses: 3
    Dernier message: 10/01/2006, 11h36
  3. [Collections]Implémenter une recherche multi-critère performante
    Par ppaul127 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 29/12/2005, 15h38
  4. gui pour recherche multi critere
    Par komando dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 02/12/2005, 20h08
  5. Réponses: 14
    Dernier message: 15/06/2005, 14h14

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