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 :

Insérer résultat requête dans une table [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 56
    Points : 48
    Points
    48
    Par défaut Insérer résultat requête dans une table
    Bonsoir,

    Je découvre (et ne comprend rien) la librairie ADO pour manipuler des requêtes SQL en VBA.

    Ma requête compte le nombre de jours ouvrés dans une table, mais je ne sais pas comment récupérer ce résultat pour ensuite travailler avec (le multiplier par 10, et rajouter le nombre d'heures travaillées à la date1 et à la date2).

    Et enfin je voudrais rajouter le résultat de mon calcul dans ma table TEST.

    Voilà mon ébauche:

    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
    33
    34
    35
    36
    37
    38
    Function Resultat(Date1 As Date, Date2 As Date) As Integer
    Dim DifDate1, DifDate2 As Date
    Dim Nb_jours As Integer 'Nombre de jours ouvrés entre Date1 et Date2 (récupération du résultat de la requête)
    Dim base As DAO.Database
    Dim rst As Recordset
     
    Dif_heures = 0
    Nb_jours = 0
     
    'Calculer le nbre d'heures travaillées pour Date1 et Date2
    DifDate1 = DateDiff("h", Hour(Date1), 18) 'Nbr d'heures travaillées le jour de Date1
    DifDate2 = DateDiff("h", 8, Hour(Date2)) 'Nbr d'heures travaillées le jour de Date2
     
    Set base = CurrentDb()
     
    'Nombre de jours se trouvant entre les 2 dates et multiplication de ce nombre par 10 pour avoir le nombre d'heures travaillées entre les 2 dates
    Set rst = CurrentDb.OpenRecordset("SELECT COUNT(*) FROM Jours_travail WHERE #" & DateValue(Date1) & "# < Jour AND #" & DateValue(Date2) & "# > Jour AND Jours_tavailles = 'Oui'")
    While Not rst.EOF
         Nb_jours = rst("Nb_jours")
         rst.MoveNext
    Wend
    rst.Close
    Set rst = Nothing
     
    'Calculer le nbre d'heures travaillées pour Date1 et Date2
    DifDate1 = DateDiff("h", Hour(Date1), 18) 'Nbr d'heures travaillées le jour de Date1
    DifDate2 = DateDiff("h", 8, Hour(Date2)) 'Nbr d'heures travaillées le jour de Date2
     
    'Addition des différents calculs
    Resultat = Nb_jours + DifDate1 + DifDate2
     
    End Function
     
    Sub TEST2()
     
    DoCmd.RunSQL ("UPDATE TEST SET `Mes résultats`= Resultat(Demand_Launch_date_Valid, Acknowledge_date_valid);")
     
    End Sub

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut SQL et conception
    Carole,

    Je vois qu'il s'agit d'un travail scolaire et ne vais donc pas te donner une solution toute faite mais en attendant quelques petites choses m'étonnent. Je n'ai pas la moindre idée de l'organisation de tes tables (champs, types...) mais j'ai l'impression que ta requête compare des dates à des jours (2 champs incompatibles) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE #" & DateValue(Date1) & "# < Jour
    D'autre part et à moins d'une mauvaise conception un booléen renvoie 0 ou -1 (false ou true) et pas 'oui' ou 'non'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ND Jours_tavailles = 'Oui'

    Donc pour avancer plus sereinement juste un conseil :

    Affiche le contenu de ta requête dans une variable de type chaîne (déclarée en string dans l'en tête de ta fonction) puis affiche le contenu de cette variable dans la fenêtre d’exécution de ton module. Tu pourras alors utiliser l'assistant requête d'Access (mode SQL) pour voir toi même tes erreurs et les corriger.

    Un truc du genre...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim sql As String
     
    sql = "SELECT COUNT(*) FROM Jours_travail WHERE #" & DateValue(Date1) & "# < Jour AND #" & DateValue(Date2) & "# > Jour AND Jours_tavailles = 'Oui'"
    Debug.Print sql
    Set rst = CurrentDb.OpenRecordset(sql)
    While Not rst.EOF
         Nb_jours = rst("Nb_jours")
         rst.MoveNext
    Wend

    Bon courage à toi

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 56
    Points : 48
    Points
    48
    Par défaut
    Je vois qu'il s'agit d'un travail scolaire
    En fait, c'est pour mon stage

    Je n'ai pas la moindre idée de l'organisation de tes tables (champs, types...) mais j'ai l'impression que ta requête compare des dates à des jours (2 champs incompatibles) :
    Ma table "Jours_travail" contient 2 colonnes:
    - Jour au fomat Date (01/01/2012)
    - Jours_travailles au format booléen mais dans les champs il y a oui pour True et non pour False.

    Donc si je marque:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ND Jours_tavailles = 'Oui'
    C'est bien juste, non?

    Donc pour avancer plus sereinement juste un conseil :

    Affiche le contenu de ta requête dans une variable de type chaîne (déclarée en string dans l'en tête de ta fonction) puis affiche le contenu de cette variable dans la fenêtre d’exécution de ton module. Tu pourras alors utiliser l'assistant requête d'Access (mode SQL) pour voir toi même tes erreurs et les corriger.

    Un truc du genre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim sql As String
     
    sql = "SELECT COUNT(*) FROM Jours_travail WHERE #" & DateValue(Date1) & "# < Jour AND #" & DateValue(Date2) & "# > Jour AND Jours_tavailles = 'Oui'"
    Debug.Print sql
    Set rst = CurrentDb.OpenRecordset(sql)
    While Not rst.EOF
         Nb_jours = rst("Nb_jours")
         rst.MoveNext
    Wend
    Mais ce code je le met dans ma fonction? Donc je met quoi dans Sub TEST2()?

  4. #4
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Car0le,


    Ma table "Jours_travail" contient 2 colonnes:
    - Jour au fomat Date (01/01/2012)
    - Jours_travailles au format booléen mais dans les champs il y a oui pour True et non pour False.
    Car si Booléen la valeur stockée est true ou false. Si ce sont des champs textes c'est à moins avis une petite erreur de conception.

    envoie moi ta base. Cela me permettra de valider tes champs, ta requête et la syntaxe.

    Je t'aiguillerai alors sur la solution..

    Cordialement

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Sans trop m'avancer, le "problème" concernant le booléen Jours_tavailles est en fait simple.

    Dans la base de données, le booléen est stocké sous forme de bit, à savoir 0 pour "Faux" et 1 pour "Vrai'
    Lorsque l'on affiche le contenu d'une table dans Access, celui fait une conversion automatique entre les données de la colonnes (des 0 et des 1) et les chaînes "Faux" et "Vrai".


    Pour travailler les données via des requêtes SQL, il faut parler le même langage que le SGBD: des 0 et des 1.

    Ce qui nous donne, pour le test du booléen
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [...] AND Jours_tavailles = 1

  6. #6
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    cthulhu22,

    le booleen sous access est matérialisée par -1 (true) et pas 1 comme d'autres SGBD !

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par jimbolion Voir le message
    cthulhu22,

    le booleen sous access est matérialisée par -1 (true) et pas 1 comme d'autres SGBD !

    JimBoLion
    Effectivement, à force de travailler avec SQL Server j'en avais oublié cette subtilité !

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

Discussions similaires

  1. Insérer le résultat d'une requête dans une table
    Par el_gringo16 dans le forum Débuter
    Réponses: 9
    Dernier message: 19/05/2010, 16h05
  2. Réponses: 11
    Dernier message: 23/09/2008, 13h16
  3. Insérer le contenu d'une requête dans une table
    Par guadian dans le forum VBA Access
    Réponses: 1
    Dernier message: 20/07/2007, 20h16
  4. Résultat requête dans une table
    Par guiguikawa dans le forum Requêtes et SQL.
    Réponses: 22
    Dernier message: 23/06/2006, 15h34
  5. Réponses: 2
    Dernier message: 02/06/2006, 11h26

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