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

VBA Access Discussion :

Requete SQL dans du VBA pour une création dynamique de requetes


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Points : 25
    Points
    25
    Par défaut Requete SQL dans du VBA pour une création dynamique de requetes
    Bonjour à tous,
    J'ai suivi le tutoriel de Christophe Warin et de Charles A, respectivement la Création et paramétrage dynamique de requêtes et Initiation - Débogage : requêtes écrites par VBA. Je les félicite au passage pour leur travail.

    Cependant, ma requete en SQL est trop grande pour.... VBA
    Je n'ai pas fait de fautes de SQL, j'ai vérifié également en utilisant debug.print.

    Il apparait que lors du debug.print dans la fenetre execution le code s'affiche sur 2 lignes, et seule la premiere ligne est enregistrée dans le champ access de la source SQL, la deuxieme est... ignorée, bien que stockée en VBA correctement.

    A noter que je veux faire rentrer mes lignes SQL dans le champ : "source" de mon formulaire (recordsource en VBA)

    Par contre, si dans le champ access je rentre la meme formule à la main, il ne me pose pas de probleme, d'ou mon soupçon d'un probleme entre vba et access.

    Une idée pour contourner le probleme?

    Merci à tous
    Damien

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    Cependant, ma requete en SQL est trop grande pour.... VBA
    mon soupçon d'un probleme entre vba et access
    Cherche autre chose.

    Es-tu sûr que ton code ne contient pas un saut de ligne ou un caractère intempestif.
    Jette un coup d'oeil ici, si c'est un problème de formatage du sql.

    http://www.developpez.net/forums/d99...-formater-sql/

  3. #3
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    Bonjour.

    Si je comprend bien, dans VBA, la requete sql est sur deux lignes avec, a la fin de la 1ere ligne, un espace et un "_".
    Si la requete sql est correct, peut etre faire de la facon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim Requete as string
     
    requete ="select................from ........ where.....and........"
    requete = requete & " and........ and........"
     
    'Affectation ensuite de la valeur Requete a l'endroit ou se trouve actuellement le select.
    J'ai eu ce probleme il y a quelques temps avec des requetes sql dans VBA qui faisaient entre 3 et 4 lignes.

    Cdlt.
    Jean

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour jj4822,

    Ce que tu signales n’est pas spécifique au sql.
    Si tu veux, pour des raisons de lisibilité, écrire ton code sur plusieurs lignes, tu peux utiliser un espace et un "_".
    Ou procéder par concaténations successives comme tu l’indiques.
    Cela dépend des circonstances.

    A contrario, pour écrire plusieurs instructions sur une même ligne :
    http://access.developpez.com/faq/?pa...#PlrsLignEnUne

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Que veux-tu dire par trop grande ?

    Philippe

  6. #6
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    Bonjour à tous et merci de vous préoccuper de ce problème.
    jj4822, meme si j'ai malgré tout essayé, Claude a raison, cela n'est pas spécifique au SQL et n'est utile que pour la lisibilité.
    Claude, j'ai essayé ton outil, il est plutot pratique, merci, mais cela me donne le même résultat que celui que j'avais avant.

    Ce que je propose, c'est de copier mon code SQL ici, je vous propose pour ceux qui veulent bien d'inserer via VBA ce code dans un recordsource d'un formulaire d'une de vos bases.
    Vous constaterez que l'opération se passe correctement mais que le remplissage de la propriété recordsource s'arrete un peu avant la fin de la clause FROM, le reste est ignoré.
    En passant par un debug.print, on constatera que tout ce qui est copié est exactement la meme chose que ce qui apparait sur la premiere ligne d'un debug.print

    En esperant que quelqu'un arrive à insérer cette requete entierement dans mon formulaire, j'attends de vos nouvelles.
    Merci
    Damien

    PS : la variable test n'a pas d'influence dans le résultat, j'ai essayé avec un critère fixe et non variable, j'aboutis au meme résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Form_FormDevis.RecordSource = "SELECT TblDevis.[Année Salesforce], TblDevRevItemAlt.[Numero de devis], TblDevis.[Trigramme commercial], NomCommercial.[Nom commercial], NomCommercial.[Prenom Commercial], TblDevis.[Client direct], TblDevis.[Offre interne ?], TblDevis.[Client interne], TblDevis.[Nom de Projet], TblDevis.[Due date], TblDevRevItemAlt.Revision, TblDevRevItemAlt.Item, TblDevRevItemAlt.Alternative, TblDevRevItemAlt.FCE " & _
                                    "FROM TblRevisions RIGHT JOIN (TblItems RIGHT JOIN ((NomCommercial INNER JOIN (ClientsInternes RIGHT JOIN TblDevis ON ClientsInternes.[Clients Internes] = TblDevis.[Client interne]) ON NomCommercial.[Trigramme commercial] = TblDevis.[Trigramme commercial]) INNER JOIN (TblCalculsElec RIGHT JOIN (TblAlternatives RIGHT JOIN TblDevRevItemAlt ON TblAlternatives.[Nom de l'alternative] = TblDevRevItemAlt.Alternative) ON TblCalculsElec.FCE = TblDevRevItemAlt.FCE) ON TblDevis.[Numéro de devis] = TblDevRevItemAlt.[Numero de devis]) ON TblItems.[Nom de l'item] = TblDevRevItemAlt.Item) ON TblRevisions.Revision = TblDevRevItemAlt.Revision " & _
                                    "WHERE (((TblDevRevItemAlt.[Numero de devis])=" & Chr(34) & text & Chr(34) & "));"

  7. #7
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    pour tester valablement, peux-tu poster une BDD compatible Access2000 avec la définition des tables.

  8. #8
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    Bonjour.

    Je sais bien que ce que je signale n'est pas specifique a sql.

    Tout simplement il y a quelques temps, dans un de mes programmes, j'ai constate qu'une requete sur plusieurs lignes avec un espace suivi d'un "_" en fin de ligne me posait probleme dans VBA alors que la requete en elle meme etait correcte.
    En reprenant exactement la requete sql sans aucun changement, et en utilisant ce que je propose ici, j'ai resolu mon probleme, la requete entiere a ete executee et j'obtient le resultat attendu.
    J'avoue que je n'ai alors pas ete chercher plus loin.

    La solution que vous trouverez m'interessera.

    Cdlt.
    Jean.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    Claude....
    Je veux bien mais....je suis sur un groupe de travail sécurisé et ma base également.
    Comment puis je l'exporter vers un autre groupe de travail sachant que je suis sur 2007.
    Peut etre que ca marchera malgré tout,
    J'essaye, vous la trouverez en fichier joint.
    Merci de votre aide.
    Fichiers attachés Fichiers attachés

  10. #10
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Ok merci, j'ai pu lire

    Chez moi, ça marche

    Dans un formulaire, un bouton avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Commande0_Click()
    Dim text As String
    text = "blabla"
    Forms!F_FormDevis.RecordSource = "SELECT TblDevis.[Année Salesforce], TblDevRevItemAlt.[Numero de devis], TblDevis.[Trigramme commercial], NomCommercial.[Nom commercial], NomCommercial.[Prenom Commercial], TblDevis.[Client direct], TblDevis.[Offre interne ?], TblDevis.[Client interne], TblDevis.[Nom de Projet], TblDevis.[Due date], TblDevRevItemAlt.Revision, TblDevRevItemAlt.Item, TblDevRevItemAlt.Alternative, TblDevRevItemAlt.FCE " & _
                                    "FROM TblRevisions RIGHT JOIN (TblItems RIGHT JOIN ((NomCommercial INNER JOIN (ClientsInternes RIGHT JOIN TblDevis ON ClientsInternes.[Clients Internes] = TblDevis.[Client interne]) ON NomCommercial.[Trigramme commercial] = TblDevis.[Trigramme commercial]) INNER JOIN (TblCalculsElec RIGHT JOIN (TblAlternatives RIGHT JOIN TblDevRevItemAlt ON TblAlternatives.[Nom de l'alternative] = TblDevRevItemAlt.Alternative) ON TblCalculsElec.FCE = TblDevRevItemAlt.FCE) ON TblDevis.[Numéro de devis] = TblDevRevItemAlt.[Numero de devis]) ON TblItems.[Nom de l'item] = TblDevRevItemAlt.Item) ON TblRevisions.Revision = TblDevRevItemAlt.Revision " & _
                                    "WHERE (((TblDevRevItemAlt.[Numero de devis])=" & Chr(34) & text & Chr(34) & "));"
    End Sub
    Voici le zoom de la source





    Il y a donc autre chose qui cloche dans ton code.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    Effectivement, je viens de faire une série de tests.
    Et j'ai trouvé ce qui clochait !
    Ton code fonctionne très bien, à partir du moment ou le formulaire est ouvert (forms! nom du formulaire).
    Par contre, et uniquement à partir d'un formulaire externe (ou du ruban dans mon cas) et que le formulaire sur lequel on veut changer le recordsource est fermé ! cela ne marche plus !
    Dans ce cas on est obligé d'utiliser form_ nom du formulaire... c'est peut etre une piste?
    Cela veut il également dire que l'on est incapable d'enregistrer un nouveau recordsource en "dur"? puisqu'en rouvrant le formulaire la propriété recordsource a repris son état initial?

    Merci à vous, cela permet déjà de me débloquer en ayant une solution alternative.

  12. #12
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    le code suivant te permet de modifier la source en "dur" d'un formulaire autre que celui actif.
    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
    Private Sub Commande0_Click()
    Dim text As String
    text = "blabla"
    'S'assurer que Forms!F_FormDevis est ouvert
    If Not CurrentProject.AllForms("F_FormDevis").IsLoaded Then
    DoCmd.OpenForm "F_FormDevis", acDesign
    End If
    'Modifier sa source
    Forms!F_FormDevis.RecordSource = "SELECT TblDevis.[Année Salesforce], TblDevRevItemAlt.[Numero de devis], TblDevis.[Trigramme commercial], NomCommercial.[Nom commercial], NomCommercial.[Prenom Commercial], TblDevis.[Client direct], TblDevis.[Offre interne ?], TblDevis.[Client interne], TblDevis.[Nom de Projet], TblDevis.[Due date], TblDevRevItemAlt.Revision, TblDevRevItemAlt.Item, TblDevRevItemAlt.Alternative, TblDevRevItemAlt.FCE " & _
                                    "FROM TblRevisions RIGHT JOIN (TblItems RIGHT JOIN ((NomCommercial INNER JOIN (ClientsInternes RIGHT JOIN TblDevis ON ClientsInternes.[Clients Internes] = TblDevis.[Client interne]) ON NomCommercial.[Trigramme commercial] = TblDevis.[Trigramme commercial]) INNER JOIN (TblCalculsElec RIGHT JOIN (TblAlternatives RIGHT JOIN TblDevRevItemAlt ON TblAlternatives.[Nom de l'alternative] = TblDevRevItemAlt.Alternative) ON TblCalculsElec.FCE = TblDevRevItemAlt.FCE) ON TblDevis.[Numéro de devis] = TblDevRevItemAlt.[Numero de devis]) ON TblItems.[Nom de l'item] = TblDevRevItemAlt.Item) ON TblRevisions.Revision = TblDevRevItemAlt.Revision " & _
                                    "WHERE (((TblDevRevItemAlt.[Numero de devis])=" & Chr(34) & text & Chr(34) & "));"
    ' le refermer en sauvant
    DoCmd.Close acForm, "Forms!F_FormDevis", acSaveYes
    'vérifier sa source
    DoCmd.OpenForm "F_FormDevis"
    Debug.Print Forms!F_FormDevis.RecordSource
    End Sub

    Par contre, je ne suis pas parvenu à modifier, de manière permanente, la source du formulaire actif.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    Intéressant ce comportement.... et curieux que l'on ne puisse pas le faire à partir de ce formulaire.
    Merci en tout cas pour ces solutions, le post est résolu !
    Damien

  14. #14
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    et curieux que l'on ne puisse pas le faire à partir de ce formulaire
    Je ne sais comment le faire ! Ca doit être possible.
    Je te suggère de poster la question.
    "Peut-on modifier, de manière permanente la source du formulaire actif"

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

Discussions similaires

  1. Requete SQL dans du VBA
    Par doryan dans le forum VBA Access
    Réponses: 6
    Dernier message: 24/05/2009, 09h48
  2. [MySQL] savoir les requetes insérés dans la base pour une date précise
    Par betadev dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/02/2009, 21h40
  3. Réponses: 5
    Dernier message: 09/07/2008, 17h04
  4. compter avec une requete SQL dans VBA
    Par michael1971 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/01/2008, 09h20
  5. requete sql dans code vba
    Par kernel57 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/01/2008, 15h30

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