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 :

intégration d'une variable date dans un SQL [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Points : 175
    Points
    175
    Par défaut intégration d'une variable date dans un SQL
    Bonjour à tous,

    J'ai du mal avec l'intégration d'une variable date dans un SQL.

    1. En début de traitement j'initialise la date/heure de début
    2. En cours de traitement je copie cette date, par SQL, dans une table et cela fonctionne correctement
    3. En fin de traitement je cherche à mettre à jour, toujours par SQL, d'autres champs avec pour condition : la date de la table = la variable et la rien ne se passe

    .

    Je déclare et j'initialise ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim dteTRAITE As Date
    dteTRAITE = Now()
    Ce SQL ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "UPDATE T_INDEMNITEEnInter SET T_INDEMNITEEnInter.PAIEANNEE = " & intTRAITEAN & ", T_INDEMNITEEnInter.PAIEMOISDEB = " & intTRAITEMD & ", T_INDEMNITEEnInter.PAIEMOISFIN = " & intTRAITEMF & " WHERE (((T_INDEMNITEEnInter.DTTRAITEMENT)=#" & dteTRAITE & "#));"
    Celui-ci non plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "UPDATE T_INDEMNITEEnInter SET T_INDEMNITEEnInter.PAIEANNEE = " & intTRAITEAN & ", T_INDEMNITEEnInter.PAIEMOISDEB = " & intTRAITEMD & ", T_INDEMNITEEnInter.PAIEMOISFIN = " & intTRAITEMF & " WHERE (((T_INDEMNITEEnInter.DTTRAITEMENT)='" & dteTRAITE & "'));"
    On dirait qu'il n'arrive pas à vérifier la condition la date de la table = la variable

    Qu'est-ce que je ne fais pas correctement ?

    D'avance merci pour vos réponses

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    En utilisant la fonction Now(), tu attribues à dteTRAITE la valeur de la date + heure + min + sec.
    Essaie d'initialiser avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim dteTRAITE As Date
    dteTRAITE = Date()
    Normalement la première écriture de ta requête est correcte sauf effectivement par assurance, il faudrait utiliser le format US (une fonction renvoyant les dates sous format US existe sur le site FormatUS).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "UPDATE T_INDEMNITEEnInter SET T_INDEMNITEEnInter.PAIEANNEE = " & intTRAITEAN & ", T_INDEMNITEEnInter.PAIEMOISDEB = " & intTRAITEMD & ", T_INDEMNITEEnInter.PAIEMOISFIN = " & intTRAITEMF & " WHERE (((T_INDEMNITEEnInter.DTTRAITEMENT)=#" & Format(dteTRAITE,'mm/dd/yyyy') & "#));"
    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    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
    Bounjour.

    Le SQL dans le code est parfois assez difficile à débugger, voici ce que je te suggère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim SQL as string
    SQL="UPDATE T_INDEMNITEEnInter SET T_INDEMNITEEnInter.PAIEANNEE = " & intTRAITEAN & ", T_INDEMNITEEnInter.PAIEMOISDEB = " & intTRAITEMD & ", T_INDEMNITEEnInter.PAIEMOISFIN = " & intTRAITEMF & " WHERE (((T_INDEMNITEEnInter.DTTRAITEMENT)=#" & format(dteTRAITE,"yyyy\-mm\-dd hh:nn:ss" & "#));"
    debug.print SQL
    call docmd.runsql(sql, dbfailonerror)
    Le format va enlever toute ambiguité sur la date. Comme cela il ne risque pas de prendre le jour pour le mois ou vice versa.
    Le debug.print va te permettre de voir ton SQL dans la fenêtre d'éxécution immédiate. (Si elle n'est pas ouverte faire [Ctrl][g]). Tu vas pouvoir valider que ta requête est correcte.
    Le dbFailonError va forcer Access a te prévenir si il y a un problème à exécuter ta requête.

    La dernière possibilité, est que ta date dans le champ ne soit pas égale à la date en paramètre (ex : tu as juste une date dans la table et tu passes une date et une heure en paramètre).

    Cela devrait t'aider à trouver le problème.

    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.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 178
    Points : 175
    Points
    175
    Par défaut
    Merci beaucoup à vous deux,

    C'est effectivement un problème de format de date US vs FR
    Le SQL fonctionne correctement avec la condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((T_INDEMNITELigne.DTTRAITEMENT)=#" & Format(dteTRAITE, "mm/dd/yyyy hh:nn:ss") & "#));
    pourtant la date est bien visuellement écrite dans la table au format jj/mm/aaaa hh:nn:ss, ce qui laisse penser qu'elle est enregistrée au format US au coeur de la base de donnée.

    Encore merci

  5. #5
    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
    Oui en principe elle est au format US dans la BD.

    Mais comme mentionné, précédemment je préfère le format "aaaa\-mm\-jj" qui évite toutes confusions entre le mois et le jour.

    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.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/06/2009, 10h54
  2. Utilisation de variable Date dans requète SQL sous Access
    Par noakiss dans le forum VBA Access
    Réponses: 3
    Dernier message: 26/03/2008, 09h37
  3. Intégration d'une variable VBA dans une formule
    Par stephane31 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/09/2007, 03h27
  4. Réponses: 6
    Dernier message: 04/02/2007, 09h55
  5. Syntaxe d'une variable boolean dans INSERT INTO en SQL
    Par frevale dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 13/05/2006, 19h26

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