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 :

lancer requête SQL depuis formulaire access


Sujet :

VBA Access

  1. #1
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut lancer requête SQL depuis formulaire access
    Bonjour à tous.
    J'ai construit un formulaire access. Au moment d'appuyer sur un bouton OK, j'ai construit, dans une chaîne nommée SQLQ, une requête SQL tout à fait conforme à la syntaxe retenue par ACCESS.
    Je voudrai lancer automatiquement cette requête.
    J'ai essayé ce code, récupéré sur un forum:
    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
    'Activation de la base de donnée en cours
    # Set bds = CurrentDb
    # bds.QueryDefs.Refresh
    #
    # ' Si la requête NouvelleRequête existe, la supprime.
    # For Each qdf In bds.QueryDefs
    # If qdf.Name = "NouvelleRequête" Then
    # bds.QueryDefs.Delete qdf.Name
    # End If
    # Next qdf
    #
     
    # ' Crée un objet QueryDef.
    # Set qdf = bds.CreateQueryDef("NouvelleRequête", SQLQ)
    #
    # Set bds = Nothing
    Mais cela ne fait strictement RIEN (même pas une erreur)
    Quelqu'un peut-il m'aider?
    Merci

  2. #2
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,

    Pour exécuter la requête, il te manque :



  3. #3
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Merci !
    J'ai essayé tes deux suggestions.
    Aucun effet, toujours RIEN.
    Cependant le code généré est bon.
    J'en suis sûr car je lui fais afficher dans un controltext sur le formulaire.
    Si je fais un copier-coller, que je crée manuellement une requête SQL et que je colle le code généré, la requête s'exécute et le résultat est correct.
    PS:
    J'ai déjà essayé beaucoup de choses suggérées dans la doc ou les forums
    fonction membre execute des querydef
    boucle while avec RecordSet
    etc.. etc..
    jamais aucun effet et jamais d'erreur.
    Troublant !

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Quand tu exécutes ton code pas à pas, tu passes bien dans le bousin ?

  5. #5
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Essai ceci ;

    Si ça ne fonctionne pas, c'est décidé j'arrête 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
        'Activation de la base de donnée en cours
        Dim bds As DAO.Database
        Dim qdf As DAO.QueryDef
     
        Set bds = CurrentDb
     
        ' Si la requête NouvelleRequête existe, la supprime.
        For Each qdf In bds.QueryDefs
            If qdf.Name = "NouvelleRequête" Then
                bds.QueryDefs.Delete qdf.Name
            End If
        Next qdf
     
     
        ' Crée un objet QueryDef.
        Set qdf = bds.CreateQueryDef("NouvelleRequête", "SQLQ")
        bds.Execute "NouvelleRequête"
        bds.QueryDefs.Refresh
     
        Set bds = Nothing

  6. #6
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    L'interprète refuse:
    Dim bds As DAO.Database
    message:
    Type défini par l'utilisateur non défini !!!!

    Je suppose qu'il faut placer qqpart un import (include) DAO
    c'est un portage VBA des MFC.

  7. #7
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut On avance ....
    Voici le code actuel, enfin la partie utile ...
    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
    WHEREAND = WHEREAND + WHEREdocsh
    WHERE = WHERE + WHEREAND
    SQLQ = "SELECT * FROM [orders]" & vbCrLf & WHERE
    SQL.Value = SQLQ
    SQL.Requery
     'Activation de la base de donnée en cours
    Set bds = CurrentDb
    bds.QueryDefs.Refresh
     ' Si la requête NouvelleRequête existe, la supprime.
    For Each qdf In bds.QueryDefs
    If qdf.Name = "NewQuery" Then
    bds.QueryDefs.Delete qdf.Name
    End If
    Next qdf
    ' Crée un objet QueryDef.
    Set qdf = bds.CreateQueryDef("NewQuery", SQLQ)
    'bds.Execute ("NewQuery") ne marche pas !!!
    'qdf.Execute ne marche pas non plus !!!
    bds.Execute (qdf) 'génère la requête qui contient le bon résultat mais refuse de l'ouvrir ???
    Set bds = Nothing
    Il semble que le problème se trouve au niveau de la syntaxe de 'execute'.
    Parmi toutes les variantes que j'ai pu trouver, et elles sont nombreuses, seule celle que j'ai signalé fonctionne (du moins dans ce cas de figure).
    C'est presque tout bon, il crée la requête, on peut alller l'ouvrir et l'exécuter, le résultat est correct. Au point de vue syntaxique il a fait les deux corrections suivantes:
    Enlever les crochets autour du nom de la table (jamais rien compris à cette pratique ACCESS), et, c'est un minimum, rajouter le ';' de fin 'instruction SQL.
    Je ne suis pourtant pas satisfait car pour le moment il refuse de l'ouvrir pour un problème de 'conversion de type'.
    Mais alors, pourquoi la requête générée fonctionne-t-elle ?

  8. #8
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut Quick and dirty !
    Bon, avec des messages d'erreur aussi précis je ne peux pas m'en sortir.
    Il faut pourtant en finir.
    J'ai donc créé une macro qui ouvre la requête générée, et j'appelle cette macro, par la sortie normale et par la sortie en erreur.
    Pas de quoi être fier, je shunte ainsi les vraies erreurs qui pourraient survenir.
    Cest une horreur, il n'y a qu'à croiser les doigts.
    Si vous avez une meilleure idée, je prends.
    En l'état tout fonctionne
    Merci à tous.

  9. #9
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Citation Envoyé par Zavonen Voir le message
    L'interprète refuse:
    Dim bds As DAO.Database
    message:
    Type défini par l'utilisateur non défini !!!!

    Je suppose qu'il faut placer qqpart un import (include) DAO
    c'est un portage VBA des MFC.
    Il faut référencer DAO x.x.

    Ouvre un module,
    Menu Option-> Référence
    Coche la référence Microsoft DAO x.x


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

Discussions similaires

  1. Enregistrement avec requête SQL depuis un formulaire.
    Par TeoJyx dans le forum VBA Access
    Réponses: 21
    Dernier message: 19/10/2012, 17h26
  2. [Requête/SQL]Erreur Syntaxe Access
    Par LAETIAZ dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 23/04/2007, 12h29
  3. Requète SQL et formulaire !
    Par Thibaut_Dupont dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 20/07/2006, 16h06
  4. Générer une requête SQL depuis un model physique
    Par Ryan Sheckler dans le forum Requêtes
    Réponses: 4
    Dernier message: 01/12/2005, 12h11
  5. problème de requète SQL pour formulaire
    Par en_stage dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 21/06/2005, 12h21

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