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 :

Exécuter une Requête SQL dans VBA [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 103
    Par défaut Exécuter une Requête SQL dans VBA
    Bonjour,

    Dans un formulaire j’ai crée un bouton qui lance ds un 1er temps une requête de creation de table puis une requête de mise a jour comme ceci :

    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
    21
    22
    23
    24
    25
    26
    'bouton requête mise à jour et creation table
    Private Sub CommandeMAJ_Click()
    On Error GoTo Err_CommandeMAJ_Click
     
               If IsNull(Me.DateA) Then
                MsgBox "Entrez une Date"
                Else
     
    'creation de la table "R4-Table" 
        Dim CreaTableR4 As String
        CreaTableR4 = "R4-Extraction Table"
        DoCmd.OpenQuery CreaTableR4, acNormal, acEdit
     
    'Mise a jour ds la foulée de la table TDATA
                    Dim stDocName As String
                    stDocName = "R1-MAJ"
                    DoCmd.OpenQuery stDocName, acNormal, acEdit
              End If
    Exit_CommandeMAJ_Click:
        Exit Sub
     
    Err_CommandeMAJ_Click:
        MsgBox Err.Description
        Resume Exit_CommandeMAJ_Click
     
    End Sub
    Je voudrais écrire directement le SQL de la requête mise à jour "R1-MAJ" ds le code ci-dessus pour des raisons de sécurité dont voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE [R4-Table] LEFT JOIN TDATA ON ([R4-Table].Ident = TDATA.Ident) 
    AND ([R4-Table].dateFormulaire = TDATA.Date) 
    SET TDATA.[champ1] = [R4-Table]!valeur1, 
    TDATA.[champ2] = [R4-Table]!valeur2, 
    TDATA.[champ3] = [R4-Table]!valeur3, 
    TDATA.DatMaj = Now();
    Il est arrivé qu’un petit curieux réponde « non » lors de la creation de la table à la question
    « vous allez coller x lignes ds la nelle table
    (A ce moment il n’y a pas eu de création de la table [R4-Table].)
    Puis d’aller visualiser la requête "R1-MAJ" en faisant glisser ou redimensionner par exemple une table de cette requête en mode creation puis d’enregistrer la modif de la structure

    Au lancement suivant :creation de table ok 20 lignes environ ok
    Au lancement de la 2eme phase MAJ ,mise a jour de plusieurs millier de lignes ….
    Table TDATA modifiée complètement

    En effet les 2 jointures avaient disparues suite à cette manip
    C’est pourquoi je souhaiterais écrire cette 2eme phase en VBA mais c’est une autre histoire…

    merci pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 523
    Billets dans le blog
    67
    Par défaut
    Salut,

    La technique du OpenQuery sur une requête enregistrée est peut-être plus performante comme le mentionne la faq.

    Cependant si tu veux éviter les message d'alertes tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Docmd.SetWarnings False
    Docmd.RunSql "Update ...;"
    Docmd.SetWarnings True
    A+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 103
    Par défaut
    La technique du OpenQuery supposerait que la requête soit toujour presente ds la base, c'est un peu ce que j'ai actuellement non?

    Si je devais utiliser la technique "DoCmd.RunSql," (moins performante) comment se presenterait ce code pour mon cas ?

    je connais pas trop en vba
    A+

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 523
    Billets dans le blog
    67
    Par défaut
    Re,

    Tu mets ton code SQL en argument du RunSQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim LeSql as string 
     
    LeSQL="UPDATE [R4-Table] LEFT JOIN TDATA ON ([R4-Table].Ident = TDATA.Ident) " &
    "AND ([R4-Table].dateFormulaire = TDATA.Date) " & _
    "SET TDATA.[champ1] = [R4-Table]!valeur1, " & _
    "TDATA.[champ2] = [R4-Table]!valeur2, " & _
    "TDATA.[champ3] = [R4-Table]!valeur3, " & _
    "TDATA.DatMaj = Now();"
     
    Docmd.SetWarnings False
    Docmd.RunSql LeSQL
    Docmd.SetWarnings True

    Sinon si tu te perd dans le sql tu peux utiliser l'object QueryDef de DAO :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim qry As DAO.QueryDef
     
    Set qry = CurrentDb.QueryDefs("R1-MAJ")
    qry.Execute
    A+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 103
    Par défaut
    Bonjour,

    j'avais simplement fait en reprenant ton exemple pédédent après avoir envoyer mon dernier post....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Docmd.RunSql "Update ...;"
    j'avais pas percuté tout de suite

    je vais donc régulariser avec les "SetWarnings" de ton dernier post

    encore merci pour toutes ces infos

    A+

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

Discussions similaires

  1. [PHP 5.0] Exécuter une requête SQL dans une fonction Javascript
    Par PrinceMaster77 dans le forum Langage
    Réponses: 13
    Dernier message: 08/07/2011, 04h53
  2. exécuter une requète SQL dans un script
    Par jeanbernard.weck dans le forum VBScript
    Réponses: 0
    Dernier message: 14/06/2011, 10h16
  3. Réponses: 13
    Dernier message: 26/07/2007, 08h50
  4. [SQL-VBA] récupérer le résultat d'une requète SQL dans un fichier txt
    Par djidanestribbal dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 13/02/2007, 15h25
  5. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29

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