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

VB.NET Discussion :

SQL, recherche sur champ date me rend fou !


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Par défaut SQL, recherche sur champ date me rend fou !
    Bonjour,

    J'ai besoin d'aide sur une requête SQL.
    J'ai créé un registre des plaintes dans mon appli VB.NET

    Dans la table, il y a un champ "CreationDate".... qui est sans surprise, la date de création de la plainte.

    J'ai ajouté deux DateTimePicker pour pouvoir sélectionner un intervalle de date et afficher les plaintes créées dans cet intervalle.

    Une fois les dates choisies, je vide le datagridview avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         DataGridView1.DataSource = ""
    Ensuite, j'appelle une fonction que j'ai créé moi-même pour le remplir et je lui passe les arguments.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           fonctions.FillDGV(DataGridView1, "Plaintes", "CreationDate", DateDebut, DateFin)
    Ensuite, je fait cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            Query = "Select *  from " & table & " Where " & FilterField & " BETWEEN #" & FirstDate & "# AND #" & SecondDate & "# ORDER BY N° DESC"

    Ce que je ne comprends pas, c'est que la requête marche parfaitement sur certaines dates..... et pas du tout sur d'autres !
    Par exemple :
    Du 13/11/2019 au 15/11/2019 : aucun problème
    Du 02/11/2019 au 15/11/2019 : la requête renvoie la table entière.....

    Je cherche depuis hier matin pourquoi et je suis maintenant à court d'idées....
    Si quelqu'un peut me venir en aide, je vais continuer à fouiller internet en attendant .

  2. #2
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 592
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "#" & SecondDate.ToString("yyyy-mm-dd") & "#"
    tant que tu n'as pas atteint le 13 du moi, le moi et le jour s'inverse!

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    c'est surtout qu'une date n'est pas un string, donc en envoyant la date en string dans ta requete tu as une chance que la base n'attende pas le même format
    et le format de représentation d'un string ca peut se modifier dans windows, donc ton programme pourra fonctionner sur un pc et pas sur un autre

    une date c'est un stockage standardisé sur 8 octets et interropérable, donc le mieux c'est d'utiliser des DbParameter et de transmettre la date en tant que date à la base de données
    ca doit ressembler à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cmd.CommandText = "… where date between @start and @end"
    cmd.Parameters.Add("@start", type.datetime, valeurStart) 
    cmd.Parameters.Add("@end", type.datetime, valeurEnd)
    attention, avec access l'ordre d'ajout des paramètres dans Parameters doit coincider avec l'ordre d'apparition des paramètres dans la requete, il ne se sert pas du nom (contrairement aux vraies bases de données)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre expérimenté
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Par défaut
    Merci pour vos réponses

    Alors, le champ CreationDate est bien au format Date dans Access.

    Comme les DateTimePicker renvoient du string, je le passe en string à la fonction et je le convertis avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FirstDate = CDate(FirstDate)
    SecondDate = CDate(SecondDate)
    Suite à la réponse de ThumbDown j'ai adapté en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FirstDate = CDate(FirstDate).ToString("yyyy/mm/dd")
    SecondDate = CDate(SecondDate).ToString("yyyy/mm/dd")
    Mais ça ne marche pas, le "mm" reste toujours sur 00...

    J'ai testé en écrivant la requête manuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Query = "Select *  from " & table & " Where " & FilterField & " BETWEEN #2019/11/02# AND #2019/11/15# ORDER BY N° DESC"
    Et effectivement ça marche...
    Le truc serait donc d'utiliser les dates au format YYYY/MM/DD...
    Je vais regarder pour les stocker directement sous ce format dans la base de donnée... je devrais être tranquille.
    Jusque maintenant je n'ai rien trouvé par contre, tout me répond DD/MM/YYYY.

    Découper et recomposer avec des substring ne sera de fait pas fiable selon les paramètres du client local...

  5. #5
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 592
    Par défaut
    Désolé! MM pour mois.
    mais je rejoins Pol63 sur l’utilisation d'une requête paramétrée!

  6. #6
    Membre expérimenté
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Désolé! MM pour mois.
    mais je rejoins Pol63 sur l’utilisation d'une requête paramétrée!
    Beaucoup, beaucoup mieux
    Je vais maintenant regarder pour la requête paramétrée mais je suis en tout cas débloqué avec ta solution.

    Merci pour votre réactivité

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    les datetimepicker renvoient des dates
    https://docs.microsoft.com/fr-fr/dot...tframework-4.8

    utiliser des string pour des dates est une hérésie (pour rester poli)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre expérimenté
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    les datetimepicker renvoient des dates
    https://docs.microsoft.com/fr-fr/dot...tframework-4.8

    utiliser des string pour des dates est une hérésie (pour rester poli)
    Ha tiens...
    C'est marrant parce que pour obtenir la valeur il faut chercher la propriété ".text"
    Donc j'ai cru que c'était du format texte....

    C'est sur que des dates au format string c'est pas top...
    Mais les formats dates je trouve ça parfois compliqué à manipuler...

    Jusque maintenant je n'avais eu aucunes manipulations à faire avec les dates à part les afficher, mais dorénavant je vais essayer de les gérer comme des dates et non du texte

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Le probleme vient d’une mauvaise conception de windows forms qui par héritage permet de faire .text sur tout
    Mais le datetimepicker a un .value qui est une date
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Requête SQL sur champ DATE
    Par SIADIDL dans le forum SQL
    Réponses: 10
    Dernier message: 13/05/2014, 09h28
  2. Recherche sur champ date
    Par wajdisoft dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 03/08/2009, 11h55
  3. clause sql sur champ Date avec masque de saisie
    Par TOMSEC dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/04/2007, 13h20
  4. [PostGre SQL] Recherche sur un champs
    Par Cyberbob002 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/01/2006, 12h57
  5. [SQL] Conditions sur une date dans une requete
    Par poufouille dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2004, 15h25

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