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 :

SQL/VBA Date Format


Sujet :

Access

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut SQL/VBA Date Format
    bonjour tout le monde,
    j'ai honte de poser cette question, mais je bloque bêtement sur un critère utilisant une période (et donc des dates) dans un formulaire de recherche multicritère.

    J'ai:
    - 2 champs dates, format abrégé, 99.99.0000
    - la date de la table, format abrégé, 99.99.0000
    - la requête SQL qui ressemble grandement à celle de Caféine dans le tuto multicritère, dont la partie qui nous intéresse est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Me.chkPeriod Then
    SQL = SQL & "And Table!DateTable BETWEEN" & "#" & Format(Me.txtDate1, "mm/dd/yyyy") & "#" & " AND " & "#" & Format(Me.txtDate2, "mm/dd/yyyy") & "#" & ""
    End If
    Et quand jéffectue ma recherche, aucun résultat dans la liste d'affichage...

    Alors je sais que l'erreur vient bien évidemment de moi, mais je n'arrive pas à trouver l'évidence!
    Quelle peut être la partie de mon code qui est erronée?

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    une piste pour trouver tes erreurs sur mon nouveau tuto :

    http://cafeine.developpez.com/debugprint/

  3. #3
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Ta table se nomme "Table". Vérifie que ce n'est pas un mot réservé, à tout hasard.

  4. #4
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    en fait ma table ne s'appelle pas table, je l'ai juste renommée pour mon post, c'est plus compréhensible comme ceci.
    Je vais voir de ce pas ton nouveau tuto cafeine.

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2003
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2003
    Messages : 116
    Points : 146
    Points
    146
    Par défaut
    j'ai fait cette petite fonction pour pouvoir utiliser les dates dans les requetes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function TransDate(DateTr As Date) As String
    'Transformation d'une date pour l'utiliser dans une requete
     
        Dim J As Integer
        Dim m As Integer
        Dim a As Integer
     
        J = Day(DateTr)
        m = Month(DateTr)
        a = Year(DateTr)
        TransDate = m & "/" & J & "/" & a
     
    End Function
    Et ensuite dans ta requete je fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Me.chkPeriod Then 
    SQL = SQL & "And Table!DateTable BETWEEN" & "#" & TransDate(Me.txtDate1) & "#" & " AND " & "#" & TransDate(Me.txtDate2) & "#" & "" 
    End If

  6. #6
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Citation Envoyé par ptitdragon_eric
    j'ai fait cette petite fonction pour pouvoir utiliser les dates dans les requetes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function TransDate(DateTr As Date) As String
    'Transformation d'une date pour l'utiliser dans une requete
     
        Dim J As Integer
        Dim m As Integer
        Dim a As Integer
     
        J = Day(DateTr)
        m = Month(DateTr)
        a = Year(DateTr)
        TransDate = m & "/" & J & "/" & a
     
    End Function
    Et ensuite dans ta requete je fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Me.chkPeriod Then 
    SQL = SQL & "And Table!DateTable BETWEEN" & "#" & TransDate(Me.txtDate1) & "#" & " AND " & "#" & TransDate(Me.txtDate2) & "#" & "" 
    End If
    tu ne gagnerais pas du temps en faisant comme ceci, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function TransDate(DateTr As Date) As String
    'Transformation d'une date pour l'utiliser dans une requete
     
        TransDate = "#" & format(DateTr, "mm/dd/yyyy") & "#"
     
    End Function

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2003
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2003
    Messages : 116
    Points : 146
    Points
    146
    Par défaut
    J'ai essayé mais ça n'a pas marché, alors du coup j'ai fait la fonction transdate, pour être sur qu'il me récupère bien les éléments.

  8. #8
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Salut,

    En suivant le tuto de caféine tu devrais trouver facilement....

    Genre :
    Il doit y manquer un espace non?

  9. #9
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    La requête ci dessous donne un bon résultat, mon but est de l'écrire en SQL dans mon code VBA en changeant les dates par des champs d'un fomulaire que l'on nommera respectivement Date1 et Date2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MonChamp, MaDate
    FROM MaTable
    WHERE MaDate BETWEEN #01/01/2005# AND #30/12/2005#;
    1ere étape: Formatage des données.
    Les 2 champs de mon formulaire ont le format date abrégée.
    Je formate mes dates en format US pour ma requête:
    pour simplifier la lecture, j'utilise la fonction donnée par caféine (qui donne le même résultat que celle de ptitdragon_eric mais elle est plus courte).
    Donc:
    #01/01/2005# --> TransDate(Me.Date1) : #01/01/2005#
    #30/12/2005# --> TransDate(Me.Date2) : #12/30/2005#

    2eme étape : La requête SQL dans le VBA avec date fígées
    If Not Me.chkPeriod Then
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL = SQL & "And Table!DateTable BETWEEN #01/01/2005# AND #30/12/2005#" 
    End If
    Cela fonctionne, donc je passe à l'écriture avec mes champs Texte Date1 et Date2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If Not Me.chkPeriod Then
    SQL = SQL & "And MaTable!MaDate BETWEEN " & TransDate(Me.Date1) & " AND " & TransDate(Me.Date2) & ""
    End If
    Et là c'est le bug...

    Avec DebugPrint (merci Caféine, je ne connaissais pas) j’obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MonChamp, MaDate FROM MaTable WHERE MaTable!MonChamp<>0 And MaTable!MaDate BETWEEN 01.01.2005 AND 12.30.2005;
    Et pas de résultat dans ma liste... mais pas de messages d'erreur!

  10. #10
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    où sont passés nos chers ## ?

  11. #11
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    et bien c'est ce que je ne comprend pas... pour moi ils sont dans le "TransDate", car j'ai essayé d'en rajouter comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Me.chkPeriod Then
    SQL = SQL & "And A_Notiz!Eingangsdatum BETWEEN " & "#" & "TransDate(Me.txtDatum1)" & "#" & " AND " & "#" & "TransDate(Me.txtDatum2)" & "#"
    End If
    , mais cela me donne juste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MonChamp, MaDate FROM MaTable WHERE MaTable!MonChamp<>0 And MaTable!MaDate BETWEEN #TransDate(Me.Date1)# AND #TransDate(Me.Date2)#;
    Je ne l'avais pas indiqué vu le résultat que cela donne

  12. #12
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Tu typiquement dans le cas de ma FAQ (Frequently Abominable Queries)
    http://cafeine.developpez.com/debugprint/#LVI-A

    Citation Envoyé par LeScandinave
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Me.chkPeriod Then
    SQL = SQL & "And A_Notiz!Eingangsdatum BETWEEN " & "#" & "TransDate(Me.txtDatum1)" & "#" & " AND " & "#" & "TransDate(Me.txtDatum2)" & "#"
    End If
    Tu concatène un peu trop ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Me.chkPeriod Then
    SQL = SQL & "And A_Notiz!Eingangsdatum BETWEEN #" & TransDate(Me.txtDatum1) & "# AND #" & TransDate(Me.txtDatum2) & "#"
    End If
    d'autre part si tu prends ma version de TransDate, tu ne devrais pas avoir a rajouter les ## ...

  13. #13
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    après une relecture de mes résultats, j'en arrive à ce point pour le moment:
    - j'utilise ta fonction TransDate donc je n'ai pas besoin de ## ( j'avais modifié ta fonction pour voir comment cela faisait varier ma requête)
    Donc j'ai la fonction TransDate dans un module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function TransDate(DateTr As Date) As String
    'Transformation d'une date pour l'utiliser dans une requete
        TransDate = "#" & Format(DateTr, "mm/dd/yyyy") & "#"
    End Function
    - j'ai bien ce code là dans ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Me.chkPeriod Then
    SQL = SQL & "And MaTable!MaDate BETWEEN " & TransDate(Me.Date1) & " AND " & TransDate(Me.Date2) & ""
    End If
    - en décochant la case chkPeriod, j'obtiens un message d'erreur qui doit être en francais (eh oui... je travaille avec Access en allemand ):
    erreur 13: Types incompatibles
    - ensuite si je continue d'executer mon code comme tu le dis dans ton tutoriel, je vois ma requête en faisant Ctrl+G, et j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MonChamp, MaDate FROM MaTable WHERE MaTable!MonChamp<>0 And MaTable!MaDate BETWEEN #01.01.2005# AND #12.30.2005#;
    Je vais refaire des tests ce soir chez moi au calme! Demain je reviendrais sûrement avec des résultats et peut-être qu'une bonne solution sera dans le tas

  14. #14
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Vérification de routine, quel est le type du champ MaDate ?

    Sinon étrange que tu obtiennes mm.dd.yy alors que ma fonction écrivait mm/dd/yy

  15. #15
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    héhé, quand j'ai vu que ma requête avait un problème, c'est ce que j'ai regardé en premier,
    elle est bien du type "date abrégée"

    Pour la transformation "/" en ".", Access me le change automatiquement même si je tappe la date dans un champs texte au format Date avec des "/".
    Par exemple je ne pas obliger mon format date à utiliser des "/", car si je tape dans les propriétés pour le format des données "99/99/0000" Access le modifie en "99.99.0000"...

  16. #16
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function TransDate(DateTr As Date) As String
    'Transformation d'une date pour l'utiliser dans une requete
     
        TransDate = "#" & format(DateTr, "mm/dd/yyyy") & "#"
     
    End Function
    qu'est ce que donne TransDate(now) ? les / passent-ils en . ?

    chez moi (Access 97) les requêtes ne passent pas avec "." dans les dates ...

  17. #17
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    Je précise, je suis sur Access 2003.
    Et oui... Access me donne pour TransDate(Now):
    alors que j'ai bien des / dans la fonction

  18. #18
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    mais tu as trouvé le problème car quand je fixe une date dans la requête en l'écrivant avec des /, j'obtiens le bon résultat et la requête fait apparaître les dates avec les / et non des . !!!

    Je vais creuser ce problème pour m'éviter de faire une fonction pour changer les . en / pour mes dates...

  19. #19
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    okay alors essayons avec une fonction comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function TransDate(DateTr As Date) As String
    'Transformation d'une date pour l'utiliser dans une requete 
        TransDate = "#"  & datepart("m", DateTr) & "/" & datepart("d", DateTr) & "/" & datepart("yyyy", DateTr) & "#"
     
    End Function
    Si là, il te met des "." j'avale ma touche F1.

  20. #20
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    ah, bah merci caféine, tu as fait le code que je voulais faire ce soir!, même si je trouve cela très peu pratique...

    Mais je viens de m'apercevoir que Access 2003 formate les dates avec des "." mais pas VBA car dans la barre de tâche dans le menu "Insérer", "date et heure", il me propose une date avec des "." seulement!

    J'ai tout de même encore une erreur type13 quand je décoche la chkPeriod, mais je vais devoir pouvoir le résoudre en réfléchissant.

    Tu n'auras pas à avaler ta touche F1 mon cher caféine, mais c'est bon à savoir les incompatibilités entre SQL et VBA :o

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2007] Dcount SQL/VBA Date
    Par Alex_42 dans le forum VBA Access
    Réponses: 3
    Dernier message: 12/12/2014, 11h18
  2. sql server date format on w2k server sp4
    Par hottnikks_79 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 03/04/2006, 08h37
  3. SQL et les formats date : je n'y arrive pas !
    Par chargy dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 23/06/2005, 19h54
  4. [java.sql.Date] format compatible tout sgbd ?
    Par djskyz dans le forum JDBC
    Réponses: 8
    Dernier message: 15/09/2004, 11h28
  5. [Date][SQL date][Format] insertion d'une heure
    Par goulime dans le forum JDBC
    Réponses: 11
    Dernier message: 26/01/2004, 11h38

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