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

Vue hybride

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    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
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    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 : 78
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    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 !
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  4. #4
    Membre Expert

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 186
    Par défaut
    Quand tu exécutes ton code pas à pas, tu passes bien dans le bousin ?
    [Access] Les bases du débogage => ici

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    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 : 78
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    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.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    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 ?
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    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