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 :

Modifier un paramètre de type "text" d'une requête par VBA


Sujet :

VBA Access

  1. #1
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut Modifier un paramètre de type "text" d'une requête par VBA
    Bonjour,

    Dans mon code VBA (pour un état), je cherche à modifier la valeur du paramètre utilisé dans la clause "WhERE" d'une requête enregistrée.
    Ce paramètre est de type "text". (J'ai essayé avec un "CHAR", c'est pareil ...)

    Pour cela j'utilise DAO et son célèbre querydef, voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim qdf_Bloc_6 As QueryDef                 'Variable pour la requête spécifique au bloc 6
    Dim rst_Bloc_6 As Recordset                 'Variable pour de recordset associé à la requête spécifique au bloc 6
     
    Set qdf_Bloc_6 = oDb.QueryDefs("R_Schémas_B6")                              'Affectation de la requête enregistrée à qdf_Bloc_6
    qdf_Bloc_6.Parameters("Lieu").Value = "  & Txt_Groupe_2.Value & "      'Modification du paramètre "Lieu"
    'J'ai essayé avec une valeur fixe pour voir : qdf_Bloc_6.Parameters("Lieu").Value = "Sous-châssis partie latérale : Face A"
    'J'ai essayé sans les guillemets et & : qdf_Bloc_6.Parameters("Lieu").Value = Txt_Groupe_2.Value 
     
    Set rst_Bloc_6 = qdf_Bloc_6.OpenRecordset
    'Traitement sur le recordset "rst_Bloc_6"
    '.....
    Nota : "Txt_Groupe_2.Value", comme son nom l'indique est la valeur (de type texte) issue d'un Textbox, lui même rempli par la requête source de l'état donc variable au fil du formatage de l'état.

    Voici le code SQL de ma requête "R_Schémas_B6"
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PARAMETERS [Lieu] Text ( 255 );
    SELECT DISTINCT T_Schémas.Fichier, T_Schémas.Hauteur, T_Schémas.No_Tableau
    FROM T_Schémas INNER JOIN R_Opérations_Formulaire_VP ON T_Schémas.No_MOP = R_Opérations_Formulaire_VP.T_A_Opération_VP_initiale.No_MOP
    WHERE ((T_Schémas.No_Bloc=6) AND (T_Schémas.Info_Lieu = [Lieu]));

    Le problème : Acces me dit (dans un message d'erreur) qu'il ne trouve pas la requête "R_Opérations_Formulaire_VP" (en lui ajoutant tout un tas de chiffres derrière).
    - J'ai vérifié toutes les orthographes et la syntaxe.
    - Les 2 requêtes fonctionnent dans l'éditeur access
    - Quand j'enlève le paramètre de la requête, il n'y a plus d'erreur
    - J'ai un code similaire à un autre endroit qui fonctionne, mais le paramètre est de type numérique, ce qui me fait penser que le problème vient du paramètre "Lieu" de type texte.

    Quand pensez vous ?

    Merci de me donner votre avis

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Et avec cela tout court ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qdf_Bloc_6.Parameters("Lieu").Value = Txt_Groupe_2.Value      'Modification du paramètre "Lieu"
    Je ne sais pas comment s'intègre les variables texte en tant que paramètres SQL dans VBA. Si ce la ne marche pas, essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qdf_Bloc_6.Parameters("Lieu").Value = "'"  & Txt_Groupe_2.Value & "'"      'Modification du paramètre "Lieu"
    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    Merci Madefemere

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qdf_Bloc_6.Parameters("Lieu").Value = Txt_Groupe_2.Value      'Modification du paramètre "Lieu"
    J'avais déjà essayé cette solution, sans effet ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qdf_Bloc_6.Parameters("Lieu").Value = "'"  & Txt_Groupe_2.Value & "'"      'Modification du paramètre "Lieu"
    Et puis celle-ci non plus......

    Je me demande si ça ne vient pas de la déclaration dans la requête, où la syntaxe diffère entre le VBA et le SQL access .....

    Je suis en train de développer une solution sans passer par le "querydef", mais en écrivant directement le code SQL dans l'ouverture du "recordset", ça fonctionne, mais je voulais avoir une méthodologie identique dans tout mon programme et surtout j'aime bien comprendre comment tout ce "bazar" fonctionne ......

    Cordialement

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Re-,

    Et avec des Chr(34) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qdf_Bloc_6.Parameters("Lieu").Value = Chr(34)  & Txt_Groupe_2.Value & Chr(34)      'Modification du paramètre "Lieu"
    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  5. #5
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    Non, j'ai toujours la même erreur .....
    De toute façon, j'ai l'erreur même quand je mets un texte en direct entre "", sans utiliser ma variable.
    Merci

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    On fait peut-être fausse route ?!? Dans le code de ta requête, tu as une liaison entre 2 tables par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T_Schémas.No_MOP = R_Opérations_Formulaire_VP.T_A_Opération_VP_initiale.No_MOP
    Il y a bien un champ nommée T_A_Opération_VP_initiale.No_MOP dans ta requête R_Opérations_Formulaire_VP.
    J'ai des doutes sur ce champ qui est défini avec 2 "."

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  7. #7
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    Cette formulation fonctionne dans une autre requête ....

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir Metalleuse,

    Je n'ai pas oublié ton souci mais c'est quand même un truc très curieux. J'ai fait un test et j'ai pas de problème à passer un variable en paramètre que ça soit de type numérique ou de type texte.
    Mais, mais, je suis un peu étonné par rapport au message d'erreur et ton code SQL
    1- Je ne parlerai plus de la requête R_Opérations_Formulaire_VP.T_A_Opération_VP_initiale liée a priori à la table T_Schémas et mais dont aucune table ne participe dans la clause SELECT ??
    2- Par contre, pourquoi les champs No_Bloc et Info_Lieu de la table T_Schémas ne sont pas dans la clause SELECT alors qu'ils participent dans WHERE.
    Peut-être il faudrait les rajouter dans la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PARAMETERS [Lieu] Text ( 255 );
    SELECT DISTINCT T_Schémas.Fichier, T_Schémas.Hauteur, T_Schémas.No_Tableau, T_Schémas.No_Bloc, T_Schémas.Info_Lieu
    FROM T_Schémas INNER JOIN R_Opérations_Formulaire_VP ON T_Schémas.No_MOP = R_Opérations_Formulaire_VP.T_A_Opération_VP_initiale.No_MOP
    WHERE ((T_Schémas.No_Bloc=6) AND (T_Schémas.Info_Lieu = [Lieu]));
    Ce qui expliquerait ce que tu constates :
    Le problème : Acces me dit (dans un message d'erreur) qu'il ne trouve pas la requête "R_Opérations_Formulaire_VP" (en lui ajoutant tout un tas de chiffres derrière)
    ......
    - Quand j'enlève le paramètre de la requête, il n'y a plus d'erreur
    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  9. #9
    Membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 53
    Points
    53
    Par défaut
    Bonjour Madefemere,

    Merci pour ta réponse, en effet, j'ai souvent des requêtes dont je n'utilise pas forcément les champs, mais uniquement les liaisons avec les autres tables, comme filtre.

    Pour le passage du paramètre je ne comprends toujours pas, car j'ai d'autres requêtes construites sur le même schéma qui fonctionnent avec un paramètre de type numérique.
    Et pour celle qui m'intéresse, elle fonctionne parfaitement quand je mets le code SQL directement dans l'ouverture d'un recordset, sans utiliser de paramètre, mais en comparant le champ directement à la variable (en fait le contenu d'un contrôle texte) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    'Code SQL pour le recordset de sélection des schémas à afficher
            str_SQL_Bloc_6 = "SELECT DISTINCT T_Schémas.Fichier, T_Schémas.Hauteur, T_Schémas.No_Tableau" & vbCrLf & _
                            "FROM T_Schémas INNER JOIN R_MOPs_Total_VP ON T_Schémas.No_MOP = R_MOPs_Total_VP.R_MOPs_VP.NoMOP" & vbCrLf & _
                            "WHERE ((T_Schémas.No_Bloc=6) AND (T_Schémas.Info_Lieu=""" & Txt_Groupe_2.Value & """))" & vbCrLf & _
                            "ORDER BY T_Schémas.No_Tableau"
     
    'Ouverture de l'enregistrement contenant les infos des schémas à afficher
    Set rst_Bloc_6 = oDb.OpenRecordset(str_SQL_Bloc_6)
    ....
    (J'ai modifié légèrement le code SQL, en utilisant la requête [R_MOPs_Total_VP] à la place de la requête [R_Opérations_Formulaire_VP], car cette dernière utilise la première et je n'ai pas besoin des infos supplémentaires. J'ai testé cette nouvelle version avec le passage de paramètre ça ne fonctionne pas non plus)
    ça fonctionne pour moi, mais je laisse la discussion ouverte, car j'aimerais bien comprendre ......

Discussions similaires

  1. Modifier propriété <source base> d'une requête par VBA ou SQL?
    Par 1010titi dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 26/11/2008, 21h16

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