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

Access Discussion :

Extraction Resultat requette SQL d'une Base Access avec du VBA


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 27
    Points : 19
    Points
    19
    Par défaut Extraction Resultat requette SQL d'une Base Access avec du VBA
    Bonjour

    je viens décrire une Macro en VBA qui se connecte a une Base Access local pour me sortir un résultat d'un cmd SQL.
    mes donnees : une table sur Access qui contient le résultat d'un mois.
    ma macro elle lance une requête "select" sur ma table pour me sortir le résultat d'une date précise ( que je paramètre dans une cellule).

    le problème est que ma requête me donnée un résultat pour tout les journée après du 13/08 et refuse de me données un résultat pour une date avant le 13/08, je n'arrive pas a trouve d'ou peux venier l'erreur


    ci dessous le code la macro :
    --------------------------------------------
    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
    27
    28
    29
    30
    31
    32
    Sub ChargementData()
        Dim myDate As String
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Dim fld As DAO.Field
        Dim sSQL As String
     
     
        Workbooks("test_Access.xlsm").Activate
                Sheets("Data").Select
     
     
        myDate = Workbooks("test_Access.xlsm").Sheets("Accueil").Range("E5").Value   <== je récupère ma date pour mon Select
     
        ' Ouverture de la base de données
        Set db = DBEngine.OpenDatabase("ma Base Access")
        sSQL = "SELECT *FROM Conso_Data_Jrs where (Date = #" & myDate & "#) ;"
     
     
        Set rst = db.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly)
     
     
        Workbooks("test_Access.xlsm").Activate
                Sheets("Data").Select
                Range("A2").Select
                ActiveCell.CopyFromRecordset rst
     
        rst.Close
     
    '    MsgBox "salite la requette ", vbOKOnly
     
    End Sub
    -----------------

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Avec les dates, il est prudent d'utiliser un Format()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSQL = "SELECT *FROM Conso_Data_Jrs where (Date = #" & Format(myDate, "yyyy/mm/dd") & "#) ;"
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSQL = "SELECT *FROM Conso_Data_Jrs where (Date = #" & Format(myDate, "mm/dd/yyyy") & "#) ;"
    Et attention si tu as des heures dans tes donnees la ce que tu demandes c'est TaDate 00:00:00, si tu as des donnees avec TaDate 00:00:01 ou plus elles ne seront pas recuperees.

    Une parade simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSQL = "SELECT *FROM Conso_Data_Jrs where DateSerial(year([Date]), month([Date]), day([Date]) = #" & Format(myDate, "yyyy/mm/dd") & "#) ;"
    aussi Date et un mot reserve du systeme et cela peut meller Access donc il est prudent de l'encadrer de crochet.

    Perso je nomme toujours mes champs Date quelque chose comme DateCommande, DateFacture, DateSaisie mais pas Date tout seul.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    bonjour marot_r;10442507

    je te remerci pour ton aidée, je viens de faire le teste et ta solution fonctionne très bien



    Citation Envoyé par marot_r Voir le message
    Bonjour.

    Avec les dates, il est prudent d'utiliser un Format()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSQL = "SELECT *FROM Conso_Data_Jrs where (Date = #" & Format(myDate, "yyyy/mm/dd") & "#) ;"
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSQL = "SELECT *FROM Conso_Data_Jrs where (Date = #" & Format(myDate, "mm/dd/yyyy") & "#) ;"
    Et attention si tu as des heures dans tes donnees la ce que tu demandes c'est TaDate 00:00:00, si tu as des donnees avec TaDate 00:00:01 ou plus elles ne seront pas recuperees.

    Une parade simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSQL = "SELECT *FROM Conso_Data_Jrs where DateSerial(year([Date]), month([Date]), day([Date]) = #" & Format(myDate, "yyyy/mm/dd") & "#) ;"
    aussi Date et un mot reserve du systeme et cela peut meller Access donc il est prudent de l'encadrer de crochet.

    Perso je nomme toujours mes champs Date quelque chose comme DateCommande, DateFacture, DateSaisie mais pas Date tout seul.

    A+

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    En passant il manque un espace entre * et FROM.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    salut marot_r,
    Citation Envoyé par marot_r
    En passant il manque un espace entre * et FROM.
    je suis en train de m'apercevoir que certains espaces ne sont là que pour éclaircir le visuel du SQL et donc, maintenant je vérifie avant si cela provoque une erreur.
    Et là, je peux te confirmer que celui-ci n'est pas nécessaire
    Idem, entre autre, pour : select *from(select ...
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Merci de la confirmation.

    Je m'en doutais mais reconnait que pour l'humain, l'espace est plus agreable.
    C'est comme la tonne de parentheses que Access genere on peut les enlever pour alleger la charge sur le cerveau.

    Mon slogan : "Avec ce prix pour les machines et leur puissance ? Rentablisez votre investissement, optimisez pour l'humain !"

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. Recuperer des données d'une base ACCESS avec Excel VBA
    Par aziz1015 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/03/2018, 14h34
  2. [XL-2016] Recuperer des données d'une base ACCESS avec Excel VBA
    Par aziz1015 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/03/2018, 09h49
  3. extraction SQL d'une base access
    Par tchize_ dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2011, 19h22
  4. Problème de connexion entre une base Oracle et une base ACCESS avec Oracle sql developer
    Par orasqldev dans le forum Connexions aux bases de données
    Réponses: 0
    Dernier message: 29/04/2010, 19h19
  5. Requête SQL sur une base Access, where sur un champ date
    Par digital prophecy dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/05/2008, 16h47

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