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 :

probleme de date, Access et SQL


Sujet :

VBA Access

  1. #1
    Membre actif Avatar de riesseg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 415
    Points : 251
    Points
    251
    Par défaut probleme de date, Access et SQL
    Bonjour,

    je develope un programme qui integre une base de donnee access.
    je cherche a faire un moteur de recherche personnalisé ( pour l'instant, je peux juste trier par date, identifiant...), permettant, pour l'instant, d,afficher que les messages allant de telle date, a telle autre date.

    je fais la selection de la date de debut, heure de debut et de la date de fin, heure de fin avec des DTPicker ( dtpDateDebut, dtpHeureDebut, dtpHeureFin et dtpDateFin).
    quand je clique sur mon bouton rechercher, je fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub boutonRecherche_Click()
       perso = True 'superglobal m'indiquant si je suis en recherche perso ou non
       DateValideBDDDebut = dtpDateDebut.Value & " " & DTPHeureDebut
       DateValideBDDFin = dtpDateFin.Value & " " & DTPHeureFin
       '***********appel de la fonction SQL
       fntCreateSQL
       'format dans la Bdd2006-04-11 11:34:43
    End Sub
    DateValideBDD[...] sont des super globals de type String

    ma fntCreatSQL me sert a generer ma requete SQL (vous l'auriez deviné je suis sur :p )

    au final, ma requete SQl ressemble a ceci:
    ( je le sais grace a un debug.print
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT Messages.* FROM Messages WHERE Messages.DateTime >  2006-04-12 10:02:42 AND Messages.DateTime >  2006-04-12 11:02:42;
    Elle me semble on ne peut plus correcte
    mes dates sont construites quand je clique sur le bouton, je le rappel.

    si j'ouvre ma Bdd access:
    Les dates ont ce format: 2006-04-11 11:34:43 (donc exactement comme la mienne)

    et pourtant, vb6 m'indique une erreur:
    Run-time error 3075
    Syntax error(missing operator) in query expression
    'Messages.DateTime > 2006-04-12 10:02:42 AND Messages.DateTime > 2006-04-12 11:02:42'.


    pourquoi ??


    PS: l'erreur me renvoit apres mon print debug, donc celui ci est celui executé par SQL..

  2. #2
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 89
    Points : 73
    Points
    73
    Par défaut
    Peux-tu montrer ta fntCreatSQL?

    C'est peut-être du au fait que tu passes des strings plutôt qu'un format DateTime.

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    sous access je crois qu'il faut encadrer les dates de #

  4. #4
    Membre actif Avatar de riesseg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 415
    Points : 251
    Points
    251
    Par défaut
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Public Function fntCreateSQL(Optional ForceOrderByDate As Boolean) As String  '///  Sert à créer une requête SQL
        '***  Fonction qui produit un requête SQL pour trier les messages
        Dim SQLString As String
        Dim TableName As String
     
        Debug.Print "SQL1"
        mnuRClickDBGArcDel.Caption = IIf(chkArchives.Value = 1, "Supprimer les messages", "Archiver les messages")
        frmHistory.cmdDelMessages.Caption = IIf(chkArchives.Value = 1, "Supprimer", "Archiver") & " les messages"
        frmHistory.cmdDelMessages.ToolTipText = IIf(chkArchives.Value = 1, "Suppression des messages des archives", "Déplacement des messages vers les archives")
        If IsUpdating Then Exit Function
     
        TableName = IIf(chkArchives.Value = 1, "Archives", "Messages")
     
        If (optSortBy(0).Value And optShowOnly(0) And (chkArchives.Value = 0) And (perso = False)) Or ForceOrderByDate Then
            datMessages.RecordSource = TableName
            datMessages.Refresh
            If datMessages.Recordset.RecordCount > 0 Then datMessages.Recordset.MoveLast
            Exit Function
        End If
        Debug.Print "SQL2"
        '///  Partie SELECT (Choisir quels messages à afficher)
        SQLString = SQLString & " SELECT " & TableName & ".*"
     
        '///  Choisis quel tables utiliser
        SQLString = SQLString & " FROM " & TableName
     
        '///  Choisir quels messages à afficher
    '        SQLString = SQLString & "1" '"1, Messages.MsgType = 2, Messages.MsgType = 3, Messages.MsgType = 4, Messages.MsgType = 5, Messages.MsgType = 6, Messages.MsgType = 7"
        If optShowOnly(1).Value = True Then
            SQLString = SQLString & " WHERE " & TableName & ".MsgType = " & MsgAlarm & "Or " & TableName & ".MsgType = " & MsgAlarmUnconfirmed
        ElseIf optShowOnly(2).Value = True Then
            SQLString = SQLString & " WHERE " & TableName & ".MsgType = " & MsgSystem
        ElseIf perso = True Then
             SQLString = SQLString & " WHERE " & TableName & ".DateTime > " & DateValideBDDDebut '& " AND " & TableName & ".DateTime < " & DateValideBDDFin & " "
        '///  Etc....
        End If
     
        '///  Partie ORDER BY du string SQL
        If optSortBy(0).Value = True Then
            SQLString = SQLString & " ORDER BY " & TableName & ".DateTime"
        ElseIf optSortBy(1).Value = True Then
            SQLString = SQLString & " ORDER BY " & TableName & ".UnitNum"
        ElseIf optSortBy(2).Value = True Then
            SQLString = SQLString & " ORDER BY " & TableName & ".UnitName"
        ElseIf optSortBy(3).Value = True Then
            SQLString = SQLString & " ORDER BY " & TableName & ".Description"
        ElseIf optSortBy(4).Value = True Then
            SQLString = SQLString & " ORDER BY " & TableName & ".Value"
        End If
     
        '///  Indique la fin de la requête
        SQLString = SQLString & ";"
     
        Debug.Print SQLString
        datMessages.RecordSource = SQLString
        datMessages.Refresh ' c'est ici que vb6 me mene avec l'erreur
        If datMessages.Recordset.RecordCount > 0 Then datMessages.Recordset.MoveLast
    End Function


    --------------------------------------

    C'est peut-être du au fait que tu passes des strings plutôt qu'un format DateTime.
    C'est ce que je pense aussi...
    donc si je mets mes variables en DateTime, ca devrai marcher ??

    PS:

    Au fait, ce n,est pas moi qui ai fait la fonction...
    je l'ai explique dans un autre post, je suis stagiaire en informatique, et je dois debugger une application existante (et en passant, c,est la premiere fois que je fais du vb :p )

  5. #5
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    D'accord avec bbil !

  6. #6
    Membre actif Avatar de riesseg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 415
    Points : 251
    Points
    251
    Par défaut
    Citation Envoyé par bbil
    sous access je crois qu'il faut encadrer les dates de #
    correcte !!!

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 135
    Points : 69
    Points
    69
    Par défaut
    En fait les format date en access ne sont pas les meme qu'en VB. je pense que le moteur jet ne transforme pas les dates dans sa recherche SQL.

    J'ai eu le meme sousis que toi il y a quelque temps et j'utilisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT REPLACE(Right('/' + CONVERT(varchar,DatePart(dd,DateLimite)),2),'/','0') + '/' + REPLACE(Right('/' + CONVERT(varchar,DatePart(mm,DateLimite)),2),'/','0') + '/' + CONVERT(varchar,DatePart(yy,DateLimite)) as DateLimite
    J'obtenait ainsi ma date en format Normal...

    Je sais pas si c'est bien ça que tu veux


    Sinon s'il s'agit d'une recherche, Essai cela # :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Messages.DateTime >  #2006-04-12 11:02:42#

  8. #8
    Membre actif Avatar de riesseg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 415
    Points : 251
    Points
    251
    Par défaut
    Aller, pour les archives, je mets en clair la solution:

    le query doit ressembler a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Messages.* FROM Messages WHERE Messages.DateTime > #2006-04-12 10:02:42# AND Messages.DateTime >  #2006-04-12 11:02:42#;
    auand on fait un query sous access

  9. #9
    Xan
    Xan est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    Juste une question, qui pourra peut-être te sembler bête...

    Pourquoi tu utilises deux fois le signe ">" dans tes conditions? Est-ce que ca ne rend pas caduque la date la plus ancienne?

  10. #10
    Membre actif Avatar de riesseg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 415
    Points : 251
    Points
    251
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Messages.* FROM Messages WHERE Messages.DateTime > #2006-04-12 10:02:42# AND Messages.DateTime < #2006-04-12 11:02:42#;
    :p

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

Discussions similaires

  1. Probleme comparaison Date dans un IF - Requete SQL ACCESS
    Par fomblardo dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/11/2009, 07h46
  2. Probleme de date dans requete sql de supression
    Par scons dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/08/2008, 09h01
  3. Probleme de date dans requete SQL vers base de donnée MS Access
    Par Uren dans le forum Persistance des données
    Réponses: 1
    Dernier message: 04/08/2008, 13h06
  4. [C#] Requête MS Access (Problème avec Date)
    Par Erakis dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/02/2005, 22h54
  5. problemes de dates SQL PARADOX
    Par igs dans le forum Paradox
    Réponses: 5
    Dernier message: 05/07/2004, 18h35

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