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 :

Requête SQL - Remplissage datagridView - Intervalle entre deux dates


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut Requête SQL - Remplissage datagridView - Intervalle entre deux dates
    Bonjour,

    Je vous explique le contexte : J'ai une base de donnée, tournant sur SQL Server, lui même tournant sur windows server. J'ai une machine distante sur lequel je programme sur Visual Studio 2010 en VB.NET.

    Je souhaite récupérer des données SQL pour les mettre dans un datagridview. Tout fonctionne, sauf les contions concernant les dates. Celà fait deux jours que je cherche, de forum en forum, en testant chaques propositions. Sans résultat.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dateD = Format(Me.DateTimePicker1.Text, "mm/dd/yyyy")
    dateFin = Format(Me.DateTimePicker2.Text, "mm/dd/yyyy")
    Dim cmd As SqlCommand = connexion.CreateCommand()
    cmd.CommandText = "SELECT COUNT(*) FROM maTable AS Surnom WHERE UneCondition LIKE '%" & UneVariable & "%' AND Date BETWEEN #" & dateD & "# AND #" & dateFin & "#"
    connexion.Open()
    ligne = cmd.ExecuteScalar()
    connexion.Close()
    *Ceci n'est pas l'ensemble du code mais les parties qui posent problème*

    Testes effectués:
    * Mettre les dates en format date
    * Différents type de formatage des dates ( dated = String.format( ...))
    * Différents format de date ( mm/dd/yyyy et d'autres)
    * enlever le between et mettre des >= et <=

    Messages d'erreurs recontrés :
    * Erreur près du charactère '#' (le dernier)
    * Affichage d'une ligne vide
    * Convertion d'un format date à un format string impossible (le plus récurent)

    Désolé de pas pouvoir relier l'erreur au teste mais j'ai fait telment de testes que je ne m'en souvient plus.

    Merci d'avance pour toute proposition

  2. #2
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Utilisez une requête paramétrée. Cela devrait mieux se passer.

    http://faqvbnet.developpez.com/?page...onet_execparam

  3. #3
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Utilise les requêtes paramétrées.
    http://webman.developpez.com/article...rameter/vbnet/

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut
    J'essaye tout de suite, je vous tiens au courant.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut
    J'avais déjà vu son utilisation mais je vous avouerais ne pas trop avoir compris comment l'utiliser pour une date.

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cmd.CommandText = "SELECT COUNT(*) FROM MaTable AS result WHERE UnChamp LIKE '%" & UneVariable & "%' AND Date BETWEEN #@dateD# AND #@dateFin#"
    cmd.Parameters.Add(New SqlParameter("@dateD", SqlDbType.Date))
    cmd.Parameters("@dateD").Value = dateD
    cmd.Parameters.Add(New SqlParameter("@dateFin", SqlDbType.Date))
    cmd.Parameters("@dateFin").Value = dateFin
    Mon erreur :
    Failed to convert parameter value from a String to a DateTime.
    Mon champ contenant la date dans ma base est de type Date, dois-je le passer en varchar ou text?

  6. #6
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Essayez en enlevant les dièses (#) de votre requête.

    Griftou.

    EDIT : Vous pouvez aussi initialisez vos dates de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim dateD as DateTime = datetimepicker1.value
    Dim dateFin as DateTime = datetimepicker2.value
    Notez également qu'il serait préférable de donner un "vrai" nom à vos contrôles de manière à rendre votre code plus compréhensible.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut
    Je n'ai plus d'erreur mais l'intervalle à l'affichage n'est pas respecté.

    J'ai déclaré mes deux variables comme indiqué et ai enlevé les '#'

    ps : Je prend note de ta remarque de changer les noms

  8. #8
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Par défaut
    Salut

    msdn

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut
    Merci pour ce lien mais j'y suis déjà allé faire un tour, je dois avouer que celà ne m'a pas été très utile

    J'ai paramêtré les date des datetimepickers en "dd/MM/yyy" car c'est le format sous lequel je le vois affiché (quand je fais un select * sans conditions) est-ce e bon format?

  10. #10
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par Melancoliah Voir le message
    Je n'ai plus d'erreur mais l'intervalle à l'affichage n'est pas respecté.

    J'ai déclaré mes deux variables comme indiqué et ai enlevé les '#'

    ps : Je prend note de ta remarque de changer les noms

    Quel intervalle semble être pris en compte ?

    Il faut prendre en compte qu'avec un contrôle de type DateTimePicker, si on ne modifie que la date, la composante time restera celle par défaut.

    Si vous n'utilisez que la partie date, vous devez faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim dateDebut as DateTime = dtpDebut.Value - dtpDebut.Value.TimeOfDay
    De cette manière, vous n'aurez que la composante Date du controle (en fait, vous aurez 00:00:00 comme heure).

    J'ai récemment du faire une requête portant sur un intervalle de date et j'ai du procédé de cette manière.

    Mais attention, disons que vous avez besoin des lignes dont la date se trouve entre le 14 et le 15 mai 2012.

    Si vous initilisez vos variables comme je viens de le montrer, au final, la clause where de votre sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    where Date between '2012-05-14 00:00:00' and '2012-05-15 00:00:00'
    Si la colonne date de votre base données renseigne une composante heure, cela ne sera pas juste car votre requête ne vous retournera alors aucune ligne dont la date est effectivement du 15 mai car l'heure sera ultérieure à celle demandée.

    Il faut donc pensé à ajouter 1 jour à la date servant de borne supérieure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim dateFin as DateTime =dtpFin.Value - dtpFin.Value.TimeOfDay).AddDays(1)
    Griftou.

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut
    En fait, aucun intervalle est pris en compte.

    Merci pour cette réponse très précise, je vous retourne le résultat.

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut
    Le champ "date" de ma base SQL me renvoi uniquement une date qui s'affiche sous la forme "jour/mois/année" (dd/MM/yyyy).

    J'ai essayé votre solution, celà ne fonctionne pas.

    J'ai aussi testé : dateD = dtpdébut.value.date, sans résultat.

  13. #13
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    De quel type est votre colonne date ?

    Histoire d'évitez que le problème soit ailleurs (on ne sait jamais), pouvez-vous founir le ddl de votre table ?

    Sous sql management studio :
    - clic droit sur la table
    - Script Table As > CREATE TO > New Query Editor Window

    Copiez ensuite le code obtenu ici entre 2 balises codes.

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut
    Code sql : 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
    GO
     
    /****** Object:  Table [dbo].[MaTable]    Script Date: 05/15/2012 16:01:45 ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
    SET ANSI_PADDING ON
    GO
     
    CREATE TABLE [dbo].[MaTable](
    	[MsgDate] [date] NULL,
    	[MsgTime] [varchar](50) NULL,
    	[MsgPriority] [varchar](50) NULL,
    	[MsgHostname] [varchar](50) NULL,
    	[MsgText] [text] NULL,
    	[Policy] [varchar](50) NULL,
    	[Action] [varchar](50) NULL,
    	[Service] [varchar](50) NULL,
    	[SrcIP] [varchar](50) NULL,
    	[SrcPort] [varchar](50) NULL,
    	[DstIP] [varchar](50) NULL,
    	[DstPort] [varchar](50) NULL,
    	[Duree] [varchar](50) NULL,
    	[Rcvd] [varchar](50) NULL,
    	[Sent] [varchar](50) NULL,
    	[Reason] [varchar](50) NULL,
    	[Session] [varchar](50) NULL,
    	[Nuauto] [varchar](50) NULL
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
     
    GO
     
    SET ANSI_PADDING OFF
    GO

  15. #15
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Votre champ MsgDate est bien de type Date... (j'ai eu peur que ce soit une chaine de caractère^^).


    Avez-vous essayé d'exécuter votre requête dans SSMS ? Si oui, cela fonctionne-t-il ?

    J'aurais bien fait quelques tests de mon côté mais avec ma version de SQL Server, je n'ai pas de champ de type Date à ma disposition...

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut
    Si je fais une requête sur sql manager avec une date précise (sans variable) cela marche parfaitement, oui.

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut
    Mr griftou, je vous prierais tous les jours durant le reste de cette année. Après m'être rendu compte que j'avais fait une erreur de synthax, la solution que vous m'avez donné marche parfaitement.

    Encore merci

  18. #18
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    N'étant pas croyant, pouvez-vous me faire un virement d'un euro chaque jour ?

    Content d'avoir pu aider

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

Discussions similaires

  1. [SQL] Nombre de jours entre deux dates
    Par azeggouar dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/08/2009, 16h07
  2. [SQL] difference en annee entre deux dates
    Par tatayoyo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/02/2008, 16h47
  3. Intervale entre deux dates
    Par ecirb dans le forum Collection et Stream
    Réponses: 20
    Dernier message: 26/03/2007, 09h21
  4. Intervalle entre deux dates
    Par ecirb dans le forum InfoPath
    Réponses: 15
    Dernier message: 22/03/2007, 10h39
  5. Requête pour calculer le temps entre deux dates
    Par Badboy62cfp dans le forum Access
    Réponses: 2
    Dernier message: 19/05/2006, 13h50

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