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 :

[SQL]vs[VBA] dans formulaire de recherche


Sujet :

Access

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut [SQL]vs[VBA] dans formulaire de recherche
    Bonjour a tous,

    Je fais appelle à vous car j'ai un petit souci
    Cela concerne la chaine SQL dans un formulaire de recherche multi-critère appliquée sur plusieurs tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT OPERATOR.Operator_Name, OPERATOR.Movex_Customer_Number, OPERATOR.Country_Name, OPERATOR.CivilMilitary, OPERATOR.Customer_Type, OPERATOR.Inflatable_Maintenance_Situation, OPERATOR.Cylinder_Maintenance_Situation, OPERATOR.Adress, COUNTRY.Sales_Manager, COUNTRY.Geographical_Zone, OPERATOR.WebSite, CONTACT.Contact_First_Name, CONTACT.Contact_Name FROM (COUNTRY INNER JOIN OPERATOR ON COUNTRY.Country_Name = OPERATOR.Country_Name) LEFT JOIN CONTACT ON OPERATOR.Operator_Name = CONTACT.Operator_Name Where OPERATOR.Operator_Name <> '' "
     
    If Not Me.chkMovex_Customer_Number Then
        SQL = SQL & " And OPERATOR!Movex_Customer_Number like '" & Me.txtRechMovex_Customer_Number & "' "
    End If ...
    Ce code sql fonctionne mais je me suis mis en tête de rajouter un champs dans ma listbox qui compte le nombre d'enregistrement.
    Ma requête sql fait appelle à des opérations de regroupements de champs et à un compte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL = "SELECT OPERATOR.Operator_Name, OPERATOR.Movex_Customer_Number, OPERATOR.Country_Name, OPERATOR.CivilMilitary, OPERATOR.Customer_Type, OPERATOR.Inflatable_Maintenance_Situation, OPERATOR.Cylinder_Maintenance_Situation, OPERATOR.Adress, COUNTRY.Sales_Manager, COUNTRY.Geographical_Zone, OPERATOR.WebSite, CONTACT.Contact_First_Name, CONTACT.Contact_Name, Count([HELI OPERA].Aircraft_Register) AS CompteDeAircraft_Register
    FROM ((COUNTRY INNER JOIN OPERATOR ON COUNTRY.Country_Name = OPERATOR.Country_Name) LEFT JOIN CONTACT ON OPERATOR.Operator_Name = CONTACT.Operator_Name) LEFT JOIN [HELI OPERA] ON OPERATOR.Operator_Name = [HELI OPERA].Operator_Name
    GROUP BY OPERATOR.Operator_Name, OPERATOR.Movex_Customer_Number, OPERATOR.Country_Name, OPERATOR.CivilMilitary, OPERATOR.Customer_Type, OPERATOR.Inflatable_Maintenance_Situation, OPERATOR.Cylinder_Maintenance_Situation, OPERATOR.Adress, COUNTRY.Sales_Manager, COUNTRY.Geographical_Zone, OPERATOR.WebSite, CONTACT.Contact_First_Name, CONTACT.Contact_Name;"
    Mais là ça ne marche plus.
    Je voulais savoir s'il était possible de mettre un code sql avec des opérations de regroupements et de compte dans un code vba pour une recherche multi-critère.

    Merci à vous

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    La réponse est 'oui' mais ... ça complexifie le SQL donc je te conseil :

    1) Tu génére ton SQL pour ta requète simple
    2) Tu prend le SQL généré et tu le colle dans une requète vide
    3) En mode éditeur, tu modifie ta requète jusqu'à ce que les regroupements et les tris corresponde à ce que tu attend.
    4) Tu reviens en mode SQL dans l'éditeur de requète et tu regarde ce que Access a ajouté à ton SQL initial
    5) Tu adapte ton code pour qu'il intégre les nouvelles instructions.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Ok merci marot_r pour ton aide,
    je vais chercher, les points 1,2,3,4 sont sans trop de difficulté, je vais réfléchir sur le 5.

    @+

  4. #4
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Voici la partie du code concerné: (fait sur le model du formulaire de recherche de cafeine)
    j'ai mis en gras les parties du code ou je pense que je pourais mettre le code

    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
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
    
    SQL = "SELECT OPERATOR.Operator_Name, OPERATOR.Movex_Customer_Number, OPERATOR.Country_Name, OPERATOR.CivilMilitary, OPERATOR.Customer_Type, OPERATOR.Inflatable_Maintenance_Situation, COUNTRY.Sales_Manager, COUNTRY.Geographical_Zone, CONTACT.Contact_First_Name, CONTACT.Contact_Name, OPERATOR.Comment FROM (COUNTRY INNER JOIN OPERATOR ON COUNTRY.Country_Name = OPERATOR.Country_Name) LEFT JOIN CONTACT ON OPERATOR.Operator_Name = CONTACT.Operator_Name Where OPERATOR.Operator_Name  <> '' " 'si je mets le code sql de la requête désirée cela ne fonctionne plus 
    
    If Not Me.chkMovex_Customer_Number Then
        SQL = SQL & " And OPERATOR!Movex_Customer_Number like '" & Me.txtRechMovex_Customer_Number & "' "
    End If
    
    If Not Me.chkCountry_Name Then
        SQL = SQL & " And OPERATOR!Country_Name = '" & Me.cmbRechCountry_Name & "' "
    End If
    
    If Not Me.chkOperator_Name Then
        SQL = SQL & " And OPERATOR!Operator_Name = '" & Me.cmbRechOperator_Name & "' "
    End If
    
    If Not Me.chkCivilMilitary Then
        SQL = SQL & " And OPERATOR!CivilMilitary = '" & Me.cmbRechCivilMilitary & "' "
    End If
    
    If Not Me.chkSales_Manager Then
        SQL = SQL & " And COUNTRY!Sales_Manager = '" & Me.cmbRechSales_Manager & "' "
    End If
    
    If Not Me.chkCustomer_Type Then
        SQL = SQL & " And OPERATOR!Customer_Type = '" & Me.cmbRechCustomer_Type & "' "
    End If
    
    If Not Me.chkGeographical_Zone Then
        SQL = SQL & " And COUNTRY!Geographical_Zone = '" & Me.cmbRechGeographical_Zone & "' "
    End If
    
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
    
    SQL = SQL & "ORDER BY OPERATOR.Operator_Name;"  ' j'ai pensé l'insérer ici 
    
    Me.lblStats.Caption = DCount("*", "Ro", SQLWhere) & " / " & DCount("*", "Ro")
    Me.lstResults.RowSource = SQL 'ou peut être ici 
    Me.lstResults.Requery
    
    End Sub
    La différence entre la requête sql actuelle et celle que je voudrais mettre se fait sur l'opération de compte et de regroupement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT OPERATOR.Operator_Name, OPERATOR.Movex_Customer_Number, OPERATOR.Country_Name, OPERATOR.CivilMilitary, OPERATOR.Customer_Type, OPERATOR.Inflatable_Maintenance_Situation, OPERATOR.Cylinder_Maintenance_Situation, OPERATOR.Adress, COUNTRY.Sales_Manager, COUNTRY.Geographical_Zone, OPERATOR.WebSite, Count([HELI OPERA].Operator_Name) AS CompteDeOperator_Name, CONTACT.Contact_First_Name, CONTACT.Contact_Name, OPERATOR.Comment
    FROM ((COUNTRY INNER JOIN OPERATOR ON COUNTRY.Country_Name = OPERATOR.Country_Name) LEFT JOIN CONTACT ON OPERATOR.Operator_Name = CONTACT.Operator_Name) LEFT JOIN [HELI OPERA] ON OPERATOR.Operator_Name = [HELI OPERA].Operator_Name
    GROUP BY OPERATOR.Operator_Name, OPERATOR.Movex_Customer_Number, OPERATOR.Country_Name, OPERATOR.CivilMilitary, OPERATOR.Customer_Type, OPERATOR.Inflatable_Maintenance_Situation, OPERATOR.Cylinder_Maintenance_Situation, OPERATOR.Adress, COUNTRY.Sales_Manager, COUNTRY.Geographical_Zone, OPERATOR.WebSite, CONTACT.Contact_First_Name, CONTACT.Contact_Name, OPERATOR.CommentHAVING (((OPERATOR.Operator_Name)<>''));
    Je ne sais pas comment faire pour intégrer ces modifications, si je dois faire une autre requête ou la jumeller.
    Quand je remplace la requête par celle avec les regroupements le resultat dans ma liste ne me renvoit rien et il n'y a pas d'erreur.

    Pouvez vous m'aidé.
    Merci

Discussions similaires

  1. Erreur requête SQL en VBA dans Excel
    Par Sergeith dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/06/2009, 15h06
  2. tri sql/vba dans formulaire ACCESS
    Par seb_thiery dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 13/08/2008, 13h30
  3. Zone de texte ajout dans formulaire de recherche
    Par benoit13 dans le forum IHM
    Réponses: 1
    Dernier message: 26/07/2007, 08h45
  4. Dans formulaire de recherche avancée dans Access
    Par LeSuisse1 dans le forum Access
    Réponses: 1
    Dernier message: 24/04/2006, 15h59

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