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 :

"Expression trop complexe" - Liste à partir de requête incluant valeur de zone de texte [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 31
    Points : 16
    Points
    16
    Par défaut "Expression trop complexe" - Liste à partir de requête incluant valeur de zone de texte
    Bonjour à tous,

    Je développe depuis un moment une base de données de contacts avec pas mal de VBA derrière.
    J'ai, dans une version où tout fonctionnait, ajouter beaucoup de données et désormais un des formulaires qui fonctionnait avec quelques dizaines de contacts ne fonctionne désormais plus avec quelques centaines de contacts. Je ne sais pas si c'est lié au nombre de contact, a des valeurs erronées dans l'un ou plusieurs de ces centaines de contacts, ou a autre chose en tout cas désormais l'expression de requête ci-dessous ne fonctionne plus elle entraine un message d'erreur
    "Cette expression présente une syntaxe incorrecte, ou est trop complexe pour être évaluée. ..."
    Voici l'expression n en question en mode SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT R_Contacts_tous_complet.ID_RELATION_C, R_Contacts_tous_complet.Contact_Nom, R_Contacts_tous_complet.Classer_sous
    FROM R_Contacts_tous_complet
    WHERE R_Contacts_tous_complet.Contact_Nom Like "*" & forms![Ajouter au groupe]!SrchText & "*" And Eval([ID_RELATION_C] & " not in (" & nz(forms![Ajouter au groupe]!txtNonDispo,"-1") & ")")=True;
    Cette expression de requête nommée "R_Recherche_Contacts" est utilisée pour remplir une liste de contact dans un formulaire avec une zone de recherche.

    Sui quelqu'un à une idée de pourquoi cette requête fonctionnait à merveille et ne fonctionne désormais plus.

    D'avance un grand merci, j'y suis depuis 3h.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 652
    Points : 34 358
    Points
    34 358
    Par défaut
    Salut,

    c'est un peu excessif de vouloir passer par un Eval, simplifie par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim strSQL as String
    strSQL = "SELECT R_Contacts_tous_complet.ID_RELATION_C, R_Contacts_tous_complet.Contact_Nom, R_Contacts_tous_complet.Classer_sous"
    strSQL = strSQL & " FROM R_Contacts_tous_complet"
    strSQL = strSQL & " WHERE R_Contacts_tous_complet.Contact_Nom Like '*" & forms![Ajouter au groupe]!SrchText & "*' And [ID_RELATION_C] not in (" & nz(forms![Ajouter au groupe]!txtNonDispo,"-1") & ")"

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Merci pour cette réponse rapide.
    Effectivement, le "Eval" n'est pas du meilleure effet mais la requête n'est pas dans le cadre d'une sub mais est une définition de requête.
    Aussi, je suis passé par l'"Eval" pour pouvoir ajouter la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ID_RELATION_C] NOT IN nz(forms![Ajouter au groupe]!txtNonDispo,"-1"))
    Que je n'arrivais pas mettre en définition de requête en tant que tel en msSQL.

    Y'aurait-il donc un moyen d'éviter l'"Eval" tout en restant dans la définition de la requête et non dans une fonction ou sub?

    D'avance merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 652
    Points : 34 358
    Points
    34 358
    Par défaut
    Tu peux deja nous indiquer si tu as dans ton txtNonDispo une information du style
    1
    ou
    1, 2 ,3

    Auquel cas le NOT IN est inutile egalement

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    Et oui, évidemment dans txtNonDispo l'information peut-être du type "1" ou "1,2,3" sinon effectivement je ne m'embêterais pas avec un "NOT IN".
    Et c'est bien la la difficulté que j'avais rencontrée et qui m'avait amené à utiliser "eval".

    Merci d'avance

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Toujours pas de solution...
    J'ai passé un peu de temps en fin de journée hier et en début de journée aujourd'hui pour re-vérifier que les paramètres entrants "SrchTxt" et "txtNonDispo" n'envoyaient pas des valeurs étonnées qui auraient pu provoquer une requête fausse.
    Mais non tout fonctionne "SrchTxt" contient bien une chaîne vide au démarrage et "TxtNonDispo" contient bien une chaîne du type "1" ou "1, 2, 3".
    C'est donc bien l'utilisation de "Eval" qui doit poser problème, mais je n'arrive pas à traduire autrement en requête SQL ce que je veux.
    J'avais pourtant mis en place cette solution qui permettait d'éviter de passer par une SrchTxt.onChange ou un SrchTxt.afterUpdate que je trouve plus lourd.

    Merci d'avance pour vos conseils

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 652
    Points : 34 358
    Points
    34 358
    Par défaut
    Ok,

    alors cette requete elle alimente quoi ? Pourquoi ne pourrais tu pas passer par un evenement detecte par le VBA qui va modifier a la volee le SQL d'alimentation comme je te l'ai propose ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Oui se serait également possible. Je vais tenter le coup.
    Pour info la requête alimente une liste.
    En fait c'est une formulaire de gestion de groupe pour ajouter ou retirer des membres au groupe.
    A gauche il y a une liste contenant l'ensemble des contacts sauf ceux déjà dans le groupe (et éventuellement ceux correspondant à la recherche si TxtSearch contient quelque chose) et une liste à droite contenant les membre du groupe (dont les id sont reporté dans TxtNonDispo).
    On peut sélectionné dans la liste de gauche un ou plusieurs membre pour les faire passé dans la liste de droite.
    Et inversement sélectionner des membres du groupe dans l liste de droite et les retirer du groupe (et ils sont de nouveau dispo dans la liste de gauche).
    Et donc il faut que la liste d gauche se mette à jour dynamiquement.
    C'est pourquoi j'avais trouvé plus simple que la liste de gauche soit alimenté par une requête dont les variable sont pris dans TxtNonDispo et TxtSearch.
    Il faut donc que la requête se mettre à jour lorsqu'il y a mise à jour du contenu de TxtSearch ou du contenu de TxtNonDispo.
    J'essaie de développer une version alternative comme ça et vous tiens au courant.
    Ca aurait tellement plus simple de trouver une écriture de la requête qui fonctionne... donc si proposition je suis preneur également.

    MERCI

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    Bien j'ai donc remplacée la requête par l'appel à une fonction construisant strSQL pour attribuer le rowsource à la liste à chaque mise à jour.
    Et cela fonctionne.
    Et ça n'a pas l'air plus lourd.

    Merci beaucoup donc pour m'avoir aiguillé vers la bonne solution and évitant le "eval".

    J'ai désormais un autre petit souci mais cela n'est pas lié à la requête.
    Si je ne trouve pa slalom solution, je me permettrait donc d'ouvrir une nouvelle discussion mais dans une autre partie du forum.

    Merci encore

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

Discussions similaires

  1. Expression trop complexe IIf
    Par zouhenlai dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/04/2008, 10h09
  2. Expression trop complexe
    Par taisherg dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 29/05/2007, 10h36
  3. Expression trop complexe ?
    Par Herman dans le forum Access
    Réponses: 2
    Dernier message: 05/04/2007, 16h07
  4. Erreur sur OpenReport : Expression trop complexe
    Par Mariboo dans le forum Access
    Réponses: 6
    Dernier message: 22/06/2006, 11h52
  5. [VBA-E] Erreur 16 expression trop complexe
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/04/2006, 11h44

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