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 :

optimisation de code, manipluation des items d'une combobox


Sujet :

VB.NET

  1. #1
    Membre émérite Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Points : 2 645
    Points
    2 645
    Par défaut optimisation de code, manipluation des items d'une combobox
    Dans une fenêtre de mon application, je remplis "automatiquement" (via un datatable) une combobox avec des dates, issues d'un champ en base de données Sql Server 2008.

    En base données, les dates doivent être obligatoirement stockées "au complet", avec le format YYYY-MM-DD HH:MM:SS (Merci Sql Server )

    Mais cette combobox sert de "filtre" pour moduler l'affichage des données dans un datagridview.

    Du coup, pour faciliter son utilisation, et à cause de la pertinence de la sélection, je "réduis", dans la combobox, la date au format DD/MM/YYYY et je supprime les redondances.

    Mais tout cela prend du temps, un peu trop pour le client.

    Je sollicite donc vos lumières pour améliorer le code suivant :

    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
    Dim ListVal As New List(Of String)
    Dim val_crt_item As String = String.Empty
    Dim index As Integer = 0
     
    Dim cb_item As DataRowView
     
    While index < CbDate.Items.Count
     
            cb_item = CbDate.Items(index)
     
            val_crt_item = cb_item.Row("Date").ToString().Substring(0, 10)
     
            If ListVal.Contains(val_crt_item) Then
                cb_item.Delete()
            Else
                index += 1
                cb_item.Row("Date") = val_crt_item
                ListVal.Add(val_crt_item)
            End If
     
    End While
    il n'y a jamais eu qu'un seul chrétien et il est mort sur la croix Friedrich Nietzsche
    L'homme est un apprenti, la douleur est son maitre Alfred de Musset
    C'est avoir tort que d'avoir raison trop tôt Praefectus Praetario Hadrianus

    my best memories ever : 2008 London Circle Line "The Booze Train"

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Peut-être qu'en le faisant en LinQ et en amont du chargement de ton combobox ce sera plus rapide...

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim result = From item In dt.AsEnumerable() _
                         Group item By key = item.Field(Of DateTime)("Date").Date Into Group _
                         Select GrouppedValue = key.ToShortDateString()
    Ensuite tu bind la variable result sur ton combobox.

    [EDIT] je viens de mettre le code en VB.NET.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Expert confirmé
    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 : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Pourquoi ne pas traiter le problème à la source ? C'est-à-dire dans la requête SQL ?

    Il est parfaitement et facilement possible de ne renvoyer que la partie DATE de la colonne (et non pas champ) qui vous occupe.
    Kropernic

  4. #4
    Membre émérite Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Points : 2 645
    Points
    2 645
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Peut-être qu'en le faisant en LinQ et en amont du chargement de ton combobox ce sera plus rapide...
    LinQ !? C'est quoi ? C'est compatible avec ma base de données sous SQL Server 2008 ?

    Le code que tu me montres est en C#, je peux faire l'équivalent en VB .Net ?

    Citation Envoyé par Kropernic Voir le message
    Pourquoi ne pas traiter le problème à la source ? C'est-à-dire dans la requête SQL ?

    Il est parfaitement et facilement possible de ne renvoyer que la partie DATE de la colonne (et non pas champ) qui vous occupe.
    Ok pour formater la date dans la requete SQL (utliser convert non ?), mais qu'en est-il de la suppression des redondances ?
    il n'y a jamais eu qu'un seul chrétien et il est mort sur la croix Friedrich Nietzsche
    L'homme est un apprenti, la douleur est son maitre Alfred de Musset
    C'est avoir tort que d'avoir raison trop tôt Praefectus Praetario Hadrianus

    my best memories ever : 2008 London Circle Line "The Booze Train"

  5. #5
    Expert confirmé
    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 : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Montrez donc votre requête. S'il n'y a qu'une combo de remplie avec ça, un simple distinct suffira (après avoir formaté la colonne retournée).
    Kropernic

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    LinQ c'est pour Language Integrated Query. En gros ça permet de requêter une liste d'objet. Il y a Linq To XML pour interroger du XML, Linq to SQL pour interroger une base de données, Linq to Object, etc.

    De manière très schématique, c'est un peu comme si tu pouvais lancer une requête SQL sur une collection.

    Tu trouveras des exemples ici : http://msdn.microsoft.com/en-us/vstudio/bb688088.aspx, et pour apprendre regarde ici et .

    Entre temps j'ai mis le code en VB.NET

    Mais sinon oui tu peux le faire à la source directement via la requête SQL, ce qui aura pour avantage de déléguer cette opération au serveur de base de données.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre émérite Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Points : 2 645
    Points
    2 645
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    Montrez donc votre requête. S'il n'y a qu'une combo de remplie avec ça, un simple distinct suffira (après avoir formaté la colonne retournée).
    J'ai déjà un distinct dans ma requête, je crois que je vais mettre tout le code utilisé pour remplir ma combobox, ça aidera peut être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      Dim req_cb_date As String = "select distinct Id, DateRise from T_AlarmOcc where DateFall is Null"
     
     Dim dt_cb_date As New DataTable
     
     Dim cmd_cb_date As New SqlCommand(req_cb_date, SqlCon)
     
      SqlCon.Open()
     
    Dim dtadapter_cbdate As New SqlDataAdapter(cmd_cb_date)
     
      dtadapter_cbdate.Fill(dt_cb_date)
     
     DbsAlarmOcc.DataSource = dt_cb_date
    Sachant que DbsAlarmOcc est un objet de type "BindingSource" et que pour le DataBinding (dans l'onglet des proriétés) de ma Combobox, j'ai

    Selected Item = DbsalarmOcc - Id

    Selected Value = DbsalarmOcc - DateRise


    Merci pour les liens DotNetMatt, je vais les étudier
    il n'y a jamais eu qu'un seul chrétien et il est mort sur la croix Friedrich Nietzsche
    L'homme est un apprenti, la douleur est son maitre Alfred de Musset
    C'est avoir tort que d'avoir raison trop tôt Praefectus Praetario Hadrianus

    my best memories ever : 2008 London Circle Line "The Booze Train"

  8. #8
    Membre chevronné Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Points : 1 961
    Points
    1 961
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Dim req_cb_date As String = "select distinct(DateRise), Id from T_AlarmOcc where DateFall is Null"
    Je "suppose" que le distinct ne marche pas car l'Id est "je suppose encore" une clé avec contrainte d'intégrité. Donc il ne faut distinct que sur la date, sinon étant donné que l'ID est différent, le Sgbdr estime qu'il n'y pas de doublons.
    Aider les autres, c'est encore la meilleure façon de s'aider soi-même. Martin Gray

    ToDo : Faire une ToDo List

  9. #9
    Expert confirmé
    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 : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Essayez avec cette requête :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT  DISCTINCT
        ID,
        CAST(DATERISE AS DATE) AS 'DATERISE'
    FROM
        T_ALARMOCC
    WHERE
        DATEFALL IS NULL
    Kropernic

  10. #10
    Membre émérite Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Points : 2 645
    Points
    2 645
    Par défaut
    Citation Envoyé par _Ez3kiel Voir le message
    Je "suppose" que le distinct ne marche pas car l'Id est "je suppose encore" une clé avec contrainte d'intégrité.
    Tout à fait, mais la modification que tu propose ne marche pas, les redondances restent.

    Citation Envoyé par Kropernic Voir le message
    Essayez avec cette requête :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT  DISCTINCT
        ID,
        CAST(DATERISE AS DATE) AS 'DATERISE'
    FROM
        T_ALARMOCC
    WHERE
        DATEFALL IS NULL
    J'ai du mal à comprendre vu que tout est en majuscule, d'autant plus que le serveur SQL 2008 que je dois utiliser est sensible à la casse (case sensitive en anglais). Et vu que c'est celui du client, je peux pas modifier les paramètres.
    il n'y a jamais eu qu'un seul chrétien et il est mort sur la croix Friedrich Nietzsche
    L'homme est un apprenti, la douleur est son maitre Alfred de Musset
    C'est avoir tort que d'avoir raison trop tôt Praefectus Praetario Hadrianus

    my best memories ever : 2008 London Circle Line "The Booze Train"

  11. #11
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    De toute manière si on regroupe les dates, il ne peut plus y avoir d'ID, puisque plusieurs IDs pourront correspondre à une date.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CAST(DATEADD(dd,(DATEDIFF(dd, 0, [StoreDate])), 0) AS DATE) AS DateRise
    FROM T_AlarmOcc
    WHERE DateFall IS NULL 
    GROUP BY DATEADD(dd,(DATEDIFF(dd, 0, DateRise)), 0)
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  12. #12
    Expert confirmé
    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 : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Ah oui, l'id, je l'avais oublié celui-là !

    Tout dépend de l'usage dans l'application. Si c'est juste pour remplir une combobox avec des dates de la DB (pour servir de filtre par exemple), pas besoin de l'id...
    Kropernic

  13. #13
    Membre émérite Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Points : 2 645
    Points
    2 645
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    De toute manière si on regroupe les dates, il ne peut plus y avoir d'ID, puisque plusieurs IDs pourront correspondre à une date.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DATEADD(dd,(DATEDIFF(dd, 0, DateRise)), 0) AS DateRise
    FROM T_AlarmOcc
    WHERE DateFall IS NULL 
    GROUP BY DATEADD(dd,(DATEDIFF(dd, 0, DateRise)), 0)
    Je ne veux pas regrouper les dates, je veux les afficher au format DD/MM/YYYY dans ma combox et sans redondance.

    [Edit] ou alors je comprend mal la requête proposée [/edit]

    [Edit2] Merci à Kropernic pour l'idée du cast, c'est déjà ça de moins à faire dans le code [/edit2]

    [Edit3] Au final je m'en suis sorti comme ça

    le DataBinding (dans l'onglet des proriétés) de ma Combobox, j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Selected Item = DbsalarmOcc - DateRise
     
    Selected Value = DbsalarmOcc - DateRise
    et pour la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct CAST(DateRise AS DATE) AS 'DateRise' from T_AlarmOcc where DateFall is Null
    [/edit3]

    [edit4] fausse joie mon idée ne marche pas, ma combobox est vide [/edit4]
    il n'y a jamais eu qu'un seul chrétien et il est mort sur la croix Friedrich Nietzsche
    L'homme est un apprenti, la douleur est son maitre Alfred de Musset
    C'est avoir tort que d'avoir raison trop tôt Praefectus Praetario Hadrianus

    my best memories ever : 2008 London Circle Line "The Booze Train"

  14. #14
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par shadowmoon Voir le message
    et sans redondance.
    Si tu ne veux pas de redondance, il faut utiliser GROUP BY, qui permet comme son nom l'indique de grouper les valeurs identiques

    Pour la problématique du format, tu peux blinder en utilisant ceci :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CONVERT(varchar, DATEADD(dd,(DATEDIFF(dd, 0, [DateRise])), 0), 103) AS DateRise
    FROM T_AlarmOcc
    WHERE DateFall IS NULL 
    GROUP BY DATEADD(dd,(DATEDIFF(dd, 0, DateRise)), 0)
    En sortie on obtient :
    01/01/2012
    02/01/2012
    30/04/2013
    Référence : how to format datetime & date
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  15. #15
    Expert confirmé
    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 : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Si tu ne veux pas de redondance, il faut utiliser GROUP BY, qui permet comme son nom l'indique de grouper les valeurs identiques
    GROUP BY est à utiliser dans le cas de fonction d'agrégation. Vu que ce n'est pas le cas ici, DISTINCT est plus approprié (même si le résultat est le même).
    Citation Envoyé par DotNetMatt Voir le message
    Pour la problématique du format, tu peux blinder en utilisant ceci :
    Code SQL :
    Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CONVERT(varchar, DATEADD(dd,(DATEDIFF(dd, 0, [DateRise])), 0), 103) AS DateRise FROM T_AlarmOcc WHERE DateFall IS NULL GROUP BY DATEADD(dd,(DATEDIFF(dd, 0, DateRise)), 0)

    En sortie on obtient :

    Référence : how to format datetime & date
    Quant à la marnière d'obtenir juste la date sans la composante heure, un cast en type DATE me semble bien plus performant (et surtout moins long à écrire) que de passer par toutes ces fonctions.
    Kropernic

  16. #16
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    GROUP BY est à utiliser dans le cas de fonction d'agrégation. Vu que ce n'est pas le cas ici, DISTINCT est plus approprié (même si le résultat est le même).
    Oui tout à fait.

    Citation Envoyé par Kropernic Voir le message
    Quant à la marnière d'obtenir juste la date sans la composante heure, un cast en type DATE me semble bien plus performant (et surtout moins long à écrire) que de passer par toutes ces fonctions.
    Les fonctions sont là pour permettre au GROUP BY de fonctionner. Donc si on passe par un DISTINCT on peut les enlever... Sinon, il faut les utiliser.
    [EDIT] : oui tu as raison effectivement, je me mélange les pinceaux
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  17. #17
    Membre émérite Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Points : 2 645
    Points
    2 645
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Pour la problématique du format, tu peux blinder en utilisant ceci :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CONVERT(varchar, DATEADD(dd,(DATEDIFF(dd, 0, [DateRise])), 0), 103) AS DateRise
    FROM T_AlarmOcc
    WHERE DateFall IS NULL 
    GROUP BY DATEADD(dd,(DATEDIFF(dd, 0, DateRise)), 0)
    Ca marche nickel avec cette requete merci à tous pour votre aide.
    il n'y a jamais eu qu'un seul chrétien et il est mort sur la croix Friedrich Nietzsche
    L'homme est un apprenti, la douleur est son maitre Alfred de Musset
    C'est avoir tort que d'avoir raison trop tôt Praefectus Praetario Hadrianus

    my best memories ever : 2008 London Circle Line "The Booze Train"

  18. #18
    Expert confirmé
    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 : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Oui tout à fait.

    Les fonctions sont là pour permettre au GROUP BY de fonctionner. Donc si on passe par un DISTINCT on peut les enlever... Sinon, il faut les utiliser.
    [EDIT] : oui tu as raison effectivement, je me mélange les pinceaux
    Chacun son tour de partager son savoir ^^
    Kropernic

  19. #19
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Oui ça marche mais comme je me suis embrouillé les pédales il y a plus simple (merci Kropernic ) :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CONVERT(varchar, CAST(DateRise AS DATE), 103) AS DateRise
    FROM T_AlarmOcc
    WHERE DateFall IS NULL
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  20. #20
    Membre émérite Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    Mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 066
    Points : 2 645
    Points
    2 645
    Par défaut
    Citation Envoyé par Kropernic
    GROUP BY est à utiliser dans le cas de fonction d'agrégation. Vu que ce n'est pas le cas ici, DISTINCT est plus approprié (même si le résultat est le même).
    Citation Envoyé par DotNetMatt Voir le message
    Oui tout à fait.
    Donc si je fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT distinct CONVERT(varchar, CAST(DateRise AS DATE), 103) AS DateRise
    FROM T_AlarmOcc
    WHERE DateFall IS NULL
    J'ai pas besoin du group by ?
    il n'y a jamais eu qu'un seul chrétien et il est mort sur la croix Friedrich Nietzsche
    L'homme est un apprenti, la douleur est son maitre Alfred de Musset
    C'est avoir tort que d'avoir raison trop tôt Praefectus Praetario Hadrianus

    my best memories ever : 2008 London Circle Line "The Booze Train"

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

Discussions similaires

  1. Couleur d'arrière-plan des items d'une QComboBox
    Par mr_samurai dans le forum Qt
    Réponses: 7
    Dernier message: 18/10/2019, 11h06
  2. comment blquer la liste des items d une combobox
    Par ryoussef19 dans le forum C++/CLI
    Réponses: 1
    Dernier message: 01/08/2007, 11h27
  3. [PHP-JS] Optimisation du code avec des boucles
    Par jiojioforever dans le forum Langage
    Réponses: 3
    Dernier message: 15/06/2007, 16h02
  4. Réponses: 3
    Dernier message: 29/08/2006, 12h50
  5. [Portal 9iAS] : ordre des items dans une région
    Par melitta dans le forum Oracle
    Réponses: 8
    Dernier message: 21/10/2004, 14h01

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