[Catégorie modifiée VB6 -> VBA] [VBA] Requête intervalle de date SQL

Signaler
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
-
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
-
Bonjour à tous, voilà j'aimerais faire une requête sur un intervalle de date car pour le moment ma requête est limitée à une seule date et je n'arrive pas à adapter ma syntaxe pour la fonction BETWEEN =S. Voici mon code

Set rs = New ADODB.Recordset 'Lecture de la DB'
    With rs
        .ActiveConnection = cn
        .Open "SELECT * FROM Actions_OPE WHERE DAY (TimeStmp) = " & Day(DateDeb) & " AND MONTH(TimeStmp)= " & Month(DateDeb) & " AND YEAR(TimeStmp)=" & Year(DateDeb) & ""
        'Sélection de la table Actions_OPE et de la date de début/date de fin'


J'aimerai effectuer une extraction entre ma date de début et ma date de fin.
Les deux dates sont au format date.


Est il possible en plus d'inclure dans ma requête une instruction qui ordonnent d'extraire de la BDD seulement si un champ "monchamp" ne contient pas un caractère spécifique ?

5 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut

Pourquoi vouloir découper tes dates en jours, mois, année si tes dates sont bien au format date ?

"SELECT * FROM Actions_OPE WHERE TimeStmp Between #" & DateDeb & "# " & _
                                            " And #" & DateFin & "#"
Il te faudra peut-être avoir recours à Format pour changer le format de tes dates au format US : MM/DD/YYYY

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Pour ta deuxième question :

Pour ne pas prendre les champs qui renferment un M majuscule (like est sensible à la casse)
Where Not (monChamp Like '%M%'
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
1
J'ai découpé mes dates car c'est le seul moyen que j'ai trouvé pour que ma requête se lance =S.

J'ai essayé ton code et ça me met :"Syntaxe incorrecte vers '#'."


Merci pour ton aide.
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
1
Les dates dans ma BDD sont au format dd/mm/yyyy hh:mm:ss. J'effectue mes tris par des DTPickers dont la valeur est en jj/mm/aaaa hh:mm:ss.

Avec le code ci dessous je découpe mes dates car c'est la seul manière de récupérer quelque chose sinon je n'ai aucun résultat.

Public Sub Action_Bouton()
 Dim cn As ADODB.Connection 'Utiliser la référence Microsoft ActiveX Data Objects 2.8 Library ainsi que OLE automation'
    Dim rs As ADODB.Recordset
    Dim i As Integer
    Dim j As Integer
    Dim champ0 As String
    Dim champ1 As String
    Dim champ2 As String
    Dim reponse As String
    Dim DateDeb As Date
    Dim DateDebUTC As Date 'La BDD est en UTC donc la requête doit être en UTC'
    Dim DateFin  As Date
    Dim DateFinUTC As Date
    Dim UtcDateTime As Date
    Dim TempsLocal As Date
    
     Range("A:A,B:B,C:C").ClearContents 'début enregistrement macro'
    Range("B11").Select
    ActiveCell.FormulaR1C1 = "Date/Heure"
    Range("C11").Select
    ActiveCell.FormulaR1C1 = "Message"
    Range("D11").Select
    ActiveCell.FormulaR1C1 = "Utilisateur"
    Range("E11").Select
    ActiveCell.FormulaR1C1 = "FP"
    Range("F11").Select
    ActiveCell.FormulaR1C1 = "N°OF"
     'fin enregistrement macro'

    DateDeb = Format(Feuil1.DTPicker1.Value, "dd/mm/yyyy hh:mm") 'Association DateDeb à la valeur du calendar1'
    'DateDebUTC = ConvertLocalTimeToUtcTime(DateDeb) Fonction LocalTime -> UTC'
    
    DateFin = Format(Feuil1.DTPicker2.Value, "dd/mm/yyyy hh:mm") 'Association DateFin à la valeur du calendar2'
    'DateFinUTC = ConvertLocalTimeToUtcTime(DateFin) Fonction LocalTime -> UTC'
    
 Set cn = New ADODB.Connection 'Connexion à la DB'
    With cn
        .ConnectionString "Provider SQLOLEDB;Data Source=FR-LAN-RSVIEW-2\SQLEXPRESS;Initial Catalog=FT_log;Uid=Administrateur;Trusted_Connection=yes" 'Chaîne de connexion Sql Server 2005'
        .Open
     End With
     
     
     Set rs = New ADODB.Recordset 'Lecture de la DB'
    With rs
        .ActiveConnection = cn
        .Open "SELECT * FROM Actions_OPE WHERE DAY (TimeStmp) = " & Day(DateDeb) & " AND MONTH(TimeStmp)= " & Month(DateDeb) & " AND YEAR(TimeStmp)=" & Year(DateDeb) & ""
        'Sélection de la table Actions_OPE'
       
    End With


J'ai essayé de convertir ma requête de date en string mais ça ne marche pas non plus.
Messages postés
111
Date d'inscription
mercredi 19 mai 2010
Statut
Membre
Dernière intervention
2 juin 2015
1
En fait je pense savoir d'où cela viens : DateDeb et DateFin renvoient une date en dd/mm/yyyy alors que ma BDD a des dates en dd/mm/yyyy hh:mm::ss.
comment je pourrais faire pour ajouter hh:mm:ss à ma date ?