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 :

Alternative à la commande "IN" dans une requête ?


Sujet :

Requêtes et SQL.

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut Alternative à la commande "IN" dans une requête ?
    Bonjour à tous

    Dans le code ci-dessous qui sert à créer une chaine string de requête dont certains critères sont contenus dans un listbox l'argument "IN" est utilisé pour concaténer toutes les valeurs sélectionnées dans la listbox, cependant, cela provoque une grande lenteur si beaucoup de valeurs sont sélectionnées, connaissez vous une alternative qui pourrait remplacer le dit argument qui est réputé être inadapté dans Access ?

    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
    Public Sub FiltreFeuillesDeRoute()
     
    Dim i As Integer
    Dim rs As DAO.Recordset
    Dim ctl As Control
    Dim varItem As Variant
    Dim strEtatProspection As String
    Dim EtatProspection As String
    Dim nbResultat As Integer
     
    Set ctl = Me.LstEtatsProspection
     
    For Each varItem In ctl.ItemsSelected
     
       strEtatProspection = strEtatProspection & "'" & ctl.Column(1, varItem) & "'" & ","
     
    Next varItem
     
    'Constitution de la chaine de filtre suivant sélection dans la listbox
    'on retire la virgule
    strEtatProspection = Left(strEtatProspection, Len(strEtatProspection) - 1)
     
    'Debug.Print strEtatProspection
     
    sqlFDR = "select * from rqmairies " & _
    " where idcommercial='" & Me.cboEVTSCommercial & "'" & _
    " and dateecheanceevt between #" & Format(Me.EVTSCommercialDU, "mm/dd/yyyy 00:00:00") & "# and #" & Format(Me.EVTSCommercialAU, "mm/dd/yyyy 23:59:00") & "#" & _
    " and etatprospection in(" & strEtatProspection & ")"
     
     
    Me.ListeMairies.RowSource = "select idcommune,idmairie,Ouverte,[Communeetdep] as Mairie,Etatprospection as [Etat prospection] from rqmairies" & _
    " where idcommercial='" & Me.cboEVTSCommercial & "'" & _
    " and dateecheanceevt between #" & Format(Me.EVTSCommercialDU, "mm/dd/yyyy 00:00:00") & "# and #" & Format(Me.EVTSCommercialAU, "mm/dd/yyyy 23:59:00") & "#" & _
    " and etatprospection in(" & strEtatProspection & ")"
     
    Set rs = CurrentDb.OpenRecordset(sqlFDR)
     If Not rs.EOF Then
        rs.MoveLast
        nbResultat = rs.RecordCount
    End If
     
    Me.CompteurRésultats = nbResultat & " fiches trouvée(s)."
     
    'DoCmd.OpenReport "rptfeuillesderoute", acViewPreview, , , acHidden
    'Forms!menu!SFNav.Form!CadrePrincipal.Form.SourceObject = "rptfeuillesderoute"
    'Reports("rptFeuillesDeRoute").RecordSource = "sqlfdr"
     
    Set ctl = Nothing
    rs.Close: Set rs = Nothing
     
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 266
    Points : 19 435
    Points
    19 435
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Peut-être, donc sans garantie, en utilisant à la place du In, la fonction InStr(Chaine, souschaine) :

    Il faut pour cela encadrer les etatsprospection de parenthèses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set ctl = Me.LstEtatsProspection
     
    For Each varItem In ctl.ItemsSelected
     
       strEtatProspection = strEtatProspection & "(" & ctl.Column(1, varItem) & ")" & ","
     
    Next varItem
    Ensuite, concernant le sql remplacer le In par un test sur fonction InStr qui renvoie 0 si la chaîne "(" & etatprospection & ")" , n'est pas trouvée dans la grande chaîne strEtatProspection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Me.ListeMairies.RowSource = "select idcommune,idmairie,Ouverte,[Communeetdep] as Mairie,Etatprospection as [Etat prospection] from rqmairies" & _
    " where idcommercial='" & Me.cboEVTSCommercial & "'" & _
    " and dateecheanceevt between #" & Format(Me.EVTSCommercialDU, "mm/dd/yyyy 00:00:00") & "# and #" & Format(Me.EVTSCommercialAU, "mm/dd/yyyy 23:59:00") & "#" & _
    " and (InStr('" & strEtatProspection & "', ""("" & etatprospection & "")"") <> 0);"
    Voilà c'est un peu du bricolage, peut-être pourrais-tu regarder aussi la requête rqmairies pour la simplifier.

    Note : j'ai encadré les états prospection de parenthèses pour éviter les cas où 1 état prospection est une sous-chaîne d'un autre état prospection.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 266
    Points : 19 435
    Points
    19 435
    Billets dans le blog
    63
    Par défaut
    Alors c'est silence radio ?
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Bonjour

    Merci beaucoup pour cette réponse, je teste dès que je peux et répondrai dès que mes bases ne seront plus corrompues...

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/09/2009, 10h00
  2. Problème de quote dans une commande
    Par nicolas_lepot dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 01/10/2008, 16h44
  3. Quote dans une requete...
    Par Isildur dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/06/2006, 10h57
  4. [VB]probleme double quote dans une ressource de type string
    Par JulienCEA dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/02/2006, 12h38
  5. quotes dans une variable
    Par requiemforadream dans le forum ASP
    Réponses: 3
    Dernier message: 09/05/2005, 09h55

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