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 :

Insertion de données dans un DGV [Débutant]


Sujet :

VB.NET

  1. #21
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    un If et un While ne va jamais parcourir ta requete s'il est représente une liste, essaye plutot de voir For each ou une boucle for !!

    PS: Moi il y a un truc que j'arrive pas a saisir, c'est ce que contient la requête et comment c'est composé !!

    Re-PS : La boucle While peut servir comme une boucle For avec une condition de sortie, je rectifie l'erreur ecris plus haut mais le If ne sert qu'a la vérification !!

  2. #22
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 84
    Points : 31
    Points
    31
    Par défaut
    ça fonctionne, mais il ne lit pas la première XD (Je sais je suis chiant)

  3. #23
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par Crowww Voir le message
    ça fonctionne, mais il ne lit pas la première XD (Je sais je suis chiant)
    [Mode Humour]
    Bah on va sortir la machine à claque
    [/Mode Humour]

    Remontre le nouveau code, tu as du mal positionné un truc.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  4. #24
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Alors j'ai pas très bien compris, déjà je voulais te donné une petite astuce assez sympa, je te conseille de rajouter la ligne suivant avant de créer tes colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataGridView1.RowHeadersVisible = False 'Supprime la première colonne
    Sa supprime l’entête de tes lignes, sa sert a rien mais voila.

    Ensuite pour répondre a ton problème, moi quand j'ai découvert le DGV, j'avais souvent le problème d'affichage de la première ligne qui est en rapport avec l'index, la première ligne ce trouve sur l'index 0, la seconde sur l'index 1 et ainsi de suite. Regarde si ta première ligne ce trouve bien dans ta requête et si elle est bien exécuter dans ta boucle while, c'est a dire, que tu sort pas de ta boucle while avant ou un truc de ce genre. Pour finir, si sa marche pas, regarde que ta pas écrasé une ligne ou un truc de ce genre !! Sa peut venir aussi de ta requete.

    PS: si ta encore des souci, regarde avec rv26t, c'est lui qui ma tous montrer depuis 2 mois avec les DGV. C'est un boss ^^

    re-PS: Pense aussi à la rubrique "Recherche", c'est assez efficace avant de déballé tes problème les uns après les autres. C'est pas un reproche mais parfois s'il y a des truc déjà résolu qui peuvent t'apporter beaucoup de savoir et répondrons a tes questions avant de les avoir posé. Tu verra pour l'instant c'est chiant mais a long terme c'est très rentable car c'est une source de savoir illimité. C'est pas pour rien que les gens laisse leur post "Résolu" avec des solutions assez pratique.

  5. #25
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    A mon avis tu as fais un read avant le if et le while

    juste après la commande tu testes s'il y a des lignes , si oui tu les lit en boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
           Using dr As OracleDataReader = cmd.ExecuteReader()
                                        If dr.HasRows Then
                        Dim dte as string
                        Dim heure as string
                        Dim LibEvent = as string
                                            While dr.Read  ' On lit les dates et le libellé des évènements
     
                        ' Récupère les infos et les stocke dans des variables    
                        dte = dr.Item("TO_CHAR(DTE_EVENT,'DD/MM/YYY')")
                        heure = dr.Item("TO_CHAR(DTE_EVENT,'HH24:MI:SS')")
                        LibEvent = dr.Item("LIBELLE")
     '.....
    Conseil : Tu devrais faire des jointures sur tes tables pour tout ramener d'un coup. normalement par les id.
    Place plutôt des commentaires sur la fonctionnalité de la méthode.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  6. #26
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 84
    Points : 31
    Points
    31
    Par défaut
    Bon, bah merci pour tous Vous m'avez bien aidez!

    Si cela peut aidez certain voici mon code actuel :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    Private Sub VisualiserHiver_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Dim strConnex As String
            Dim Rqt, Rqt2, Rqt3 As String
            strConnex = GetConnexionString()
     
            dgvMainHiver.Columns.Add(Dte) ' Permet d'ajouter une colonne dans le DVG
            Dte.Name = "Date" ' Pour choisir le nom de la colonne
            Dte.AutoSizeMode = Windows.Forms.DataGridViewAutoSizeColumnMode.None ' Pour autoriser le changement de taille de ta colonne
            Dte.Width = 150 ' Pour changer la taille de la colonne avec la longueur
            Dte.DisplayIndex = 0 ' Pour choisir l'index de la colonne
     
            dgvMainHiver.Columns.Add(Heure)
            Heure.Name = "Heure"
            Heure.DisplayIndex = 1
     
            dgvMainHiver.Columns.Add(LibEvent)
            LibEvent.Name = "Nature de L'évènement"
            LibEvent.DisplayIndex = 2
     
            dgvMainHiver.Columns.Add(LibDeci)
            LibDeci.Name = "Décision"
            LibDeci.DisplayIndex = 3
     
            dgvMainHiver.Columns.Add(LibOpe)
            LibOpe.Name = "Opérateur"
            LibOpe.DisplayIndex = 4
     
            Try
                Me.objConnexion = New OracleConnection(strConnex)
                Me.objConnexion.Open()
                ' Requête paramétrée    
                Rqt = "SELECT TO_CHAR(DTE_EVENT,'DD/MM/YYYY'),TO_CHAR(DTE_EVENT,'HH24:MI:SS'), LIBELLE FROM EVENEMENT ORDER BY TO_CHAR(DTE_EVENT,'DD/MM/YYYY') ASC"
                Rqt2 = "SELECT LIBELLE FROM DECISION"
                Rqt3 = "SELECT LIBELLE FROM OPERATEUR"
     
                ' On crée une commande Oracle    
                Using cmd = New OracleCommand()
                    cmd.Connection = Me.objConnexion
                    cmd.CommandText = Rqt
                    cmd.CommandType = CommandType.Text
     
                    ' On exécute la requête    
                    Using dr As OracleDataReader = cmd.ExecuteReader()
     
                        If dr.HasRows Then
                            While dr.Read
                                ' Récupère les infos et les stocke dans des variables    
                                Dim dte = dr.Item("TO_CHAR(DTE_EVENT,'DD/MM/YYYY')")
                                Dim heure = dr.Item("TO_CHAR(DTE_EVENT,'HH24:MI:SS')")
                                Dim LibEvent = dr.Item("LIBELLE")
     
     
     
                                ' On crée une commande Oracle
                                Using cmd2 = New OracleCommand()
                                    cmd2.Connection = Me.objConnexion
                                    cmd2.CommandText = Rqt2
                                    cmd2.CommandType = CommandType.Text
     
                                    ' On exécute la requête    
                                    Using dr2 As OracleDataReader = cmd2.ExecuteReader()
                                        ' On lit le résultat    
                                        dr2.Read()
     
     
                                        ' Récupère les infos et les stocke dans des variables
                                        Dim LibDeci = dr2.Item("LIBELLE")
     
     
                                        ' On crée une commande Oracle
                                        Using cmd3 = New OracleCommand()
                                            cmd3.Connection = Me.objConnexion
                                            cmd3.CommandText = Rqt3
                                            cmd3.CommandType = CommandType.Text
     
                                            ' On exécute la requête    
                                            Using dr3 As OracleDataReader = cmd3.ExecuteReader()
                                                ' On lit le résultat    
                                                dr3.Read()
     
                                                ' Récupère les infos et les stocke dans des variables
                                                Dim LibOpe = dr3.Item("LIBELLE")
     
                                                dgvMainHiver.Rows.Add({dte, heure, LibEvent, LibDeci, LibOpe})
     
                                            End Using
                                        End Using
                                    End Using
                                End Using
     
                            End While
                        End If
     
                    End Using
                End Using
     
     
            Catch ex As Exception
                MessageBox.Show(ex.ToString)
            End Try
        End Sub
    Y'a juste les 2 dernières colonnes où ça me renvois les mêmes données mais ça doit être un while manquant, rien de bien sorcier, En tou cas, MERCI A TOUS VOUS ME SAUVEZ!

  7. #27
    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
    Je me permets de m'immiscer...

    J'ai lu la discussion en diagonale et il y a quelque chose qui m'a frappé.

    Pour afficher des données dans un DGV, je vois qu'il est dit de faire monDGV.Rows.Add(maligne) et ça me fait un peu halluciné. Certes, cela fonctionne mais franchement, je trouve ça moche alors que la propriété DataSource fait cela pour nous.

    Mais il faut d'abord savoir comment sont récupérées les données.

    De prime abord, je vois 2 solutions pour récupérer les données (il y en a sûrement d'autres mais ces deux-ci sont les principales je pense) :

    1. Utiliser un objet de type Dataset
    2. Utiliser une classe perso

    La solution 1 est celle présentée dans la MSDN dont voici les grandes lignes :

    • définir la Connection
    • définir l'objet Command et lui donner la connexion
    • définir un DataAdapter et lui donner la commande
    • définir un DataSet
    • utiliser la méthode Fill du DataAdapter pour remplir le DataSet
    • affecter le DataSet à la propriété DataSource du DataGridView

    La solution 2 est de parcourir le jeu de résultat renvoyé à l'aide d'un DataReader et de créer une liste d'objets métiers personnalisés. Il suffit ensuite d'affecter la liste d'objet à la propriété DataSource du DataGridView.


    De base, le DataGridView crée lui même les colonnes dont il a besoin sur base, soit du type de la colonne du DataSet, soit du type de la propriété de l'objet métier.
    Il est également possible de désactiver cette création automatique de colonnes pour les définir soi-même.
    Kropernic

  8. #28
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 84
    Points : 31
    Points
    31
    Par défaut
    Et voici ce que ça donne :
    Images attachées Images attachées  

  9. #29
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Pour répondre à Kropernic, j’avoue que la solution n'est pas la plus approprié et que sa dois te faire crisé quand tu vois les 50 lignes d'instruction qui se suivent mais quand la première question de crowww est comment inserer une ligne dans un DGV? Je doute bien que lui parler de dataSet c'est un peu High level ^^ Pour l'instant il est content, tous marche bien, il comprend bien et sa lui donne envie d'aller de l'avant, pourquoi pas pensé a optimisé maintenant que sa marche bien avec quelque petite suggestion comme tu viens de le faire mais suggérer de commencer directement à 300%, c'est un peu risqué, perso sa m'aurai dégouté de la programmation.

  10. #30
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 84
    Points : 31
    Points
    31
    Par défaut
    Merci du soutien, en effet, j'ai lu 2 ou 3 fois des trucs sur les dataset mais j'ai pas encore tout saisie parfaitement. Cependant, je peux comprendre Kropernic de vouloir tout de suite faire qq chose de bien propres et efficace, cependant j'ai encore un petit niveau en informatique. Cependant, je pense qu'une fois mon projet terminé de manière "Débutant" (et sale XD) si j'en ai le temps j'en ferais une copie et essayerais de l'optimiser avec les conseils de pro comme vous

    Merci encore!

  11. #31
    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
    Je suis d'accord qu'il y a un début à tout et qu'il est préférable d'y aller doucement au départ.

    Mais les dataset, c'est pas non plus la mer à boire. Personnellement, j'ai commencé avec ça.

    Mais au-delà de ça, je crois que le résultat qu'il produit n'est pas correct car il affiche des décisions et des opérateurs en rapport avec des évènements (car sur la même ligne dans le DGV) alors qu'ils n'ont en fait rien à voir vu que les querys sont indépendantes et sans filtre (en tout cas, d'après le code posté).

    Je suis en train de préparer un code d'example histoire d'illustrer mes propos. Je reviens dès que j'ai fini.
    Kropernic

  12. #32
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    @Kropernic
    Citation Envoyé par rv26t Voir le message
    ...
    Conseil : Tu devrais faire des jointures sur tes tables pour tout ramener d'un coup. normalement par les id.
    ...
    D'ou ma remarque.
    Et par la suite je comptais indiquer la solution avec la méthode fill pour alimenter le DataGridView. Mais tu m'as devancé.

    J'ai laissé la discution aller dans le sens ou elle était partie afin de permettre à Crowww de connaître la source de ces erreurs.

    J'avais aussi un peu lu en diagonale.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  13. #33
    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
    Voilà.

    Alors bien sûr, je n'ai rien testé vu que je n'ai pas ta DB ^^.

    Voici le code que j'ai produit :
    N.B. : comme indiqué en commentaire dans le code mais ça ne fera pas de mal de le répéter ici, j'ai écrit cela en mode sql server car je n'ai pas les interfaces oracle installées sur ma machine. Mais je suis intimement convaincu qu'il suffit de remplacer sql par oracle et que ça passe nickel.
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    Imports System.Data.SqlClient
     
    Public Class MonEvenement
        Public Property LaDate As DateTime
        Public Property Nature As String
        Public Property Decision As String
        Public Property Operateur As String
     
        Public Sub New()
        End Sub
     
        Public Sub New(ladate As DateTime, nature As String, decision As String, operateur As String)
            Me.LaDate = ladate
            Me.Nature = nature
            Me.Decision = decision
            Me.Operateur = operateur
        End Sub
    End Class
     
    Public Class Form1
     
        Private Sub VisualiserHiver_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Dim Rqt, Rqt2, Rqt3 As String
            Dim listOfEvent As List(Of MonEvenement)
     
     
            '**************************
            'section à commenter si on laisse le DGV créer les colonnes
            '**************************
            dgvMainHiver.AutoGenerateColumns = False
            Dim index As Integer
            index = dgvMainHiver.Columns.Add("dgvcLaDate", "Date")
            dgvMainHiver.Columns(index).DataPropertyName = "LaDate"
            index = dgvMainHiver.Columns.Add("dgvcLibelle", "Libellé")
            dgvMainHiver.Columns(index).DataPropertyName = "Libelle"
            index = dgvMainHiver.Columns.Add("dgvcNature", "Nature de l'évènement")
            dgvMainHiver.Columns(index).DataPropertyName = "Nature"
            index = dgvMainHiver.Columns.Add("dgvcDecision", "Décision")
            dgvMainHiver.Columns(index).DataPropertyName = "Decision"
            index = dgvMainHiver.Columns.Add("dgvcOperator", "Opérateur")
            dgvMainHiver.Columns(index).DataPropertyName = "Operateur"
     
            Try
                ' Requête paramétrée    
                'ici, il ne faut faire qu'une seule de sélection qui fait une jointure sur les tables pour avoir les informations que l'on a besoin
                'avec tes requêtes, tu récupères des données de la table DECISION mais qui ne sont pas forcément en rapport avec l'évènement que tu affiches sur la même ligne (pareil pour OPERATEUR)
                'je ne peux la produire vu que je ne connais pas le schéma de ta DB mais ce serait quelque chose du genre (en mode sql server).  
                'je suis disposé à t'aider à écrire cette requête si nécessaire (et je suis sûr de ne pas être le seul ^^)
                Rqt = "SELECT EVE.DTE_EVENT AS 'DATE', EVE.LIBELLE AS 'NATURE', DEC.LIBELLE AS 'DECISION', OPE.LIBELLE AS 'OPERATEUR' "
                Rqt &= "FROM EVENEMENT EVE INNER JOIN DECISION DEC ON [LE CRITERE QUI VA BIEN] INNER JOIN OPERATEUR OPE ON [LE CRITERE QUI VA BIEN] "
                Rqt &= "ORDER BY TO_CHAR(DTE_EVENT,'DD/MM/YYYY') ASC"
     
                ' On crée une commande Oracle    
                'J'ai fait le code avec les classes sql car ne j'ai pas oracle mais c'est strictement identique à priori.  Juste remplacer sql par oracle
                Using cnx As New SqlConnection
                    cnx.ConnectionString = GetConnexionString()
                    Using cmd As SqlCommand = cnx.CreateCommand
                        cmd.CommandType = CommandType.Text
                        cmd.CommandText = Rqt
     
                        cnx.Open()
     
                        Using reader As SqlDataReader = cmd.ExecuteReader
                            If reader.HasRows Then
                                listOfEvent = New List(Of MonEvenement)
                                While reader.Read
                                    listOfEvent.Add(New MonEvenement(CDate(reader.Item("DATE")),
                                                                     CStr(reader.Item("NATURE")),
                                                                     CStr(reader.Item("DECISION")),
                                                                     CStr(reader.Item("OPERATEUR"))))
                                End While
                            End If
                        End Using
                    End Using
                End Using
     
                If Not IsNothing(listOfEvent) Then
                    dgvMainHiver.DataSource = listOfEvent
                End If
     
            Catch ex As Exception
                MessageBox.Show(ex.ToString)
            End Try
        End Sub
    End Class
    Quelques explications :
    J'ai choisi d'utiliser la méthode avec les objets métiers (je peux poster un exemple avec DataSet si tu veux ) car personnellement, j'aime bien avoir le plus de contrôle possible sur ce que je fais.
    J'ai donc créé une classe que j'ai appelée "MonEvement" avec les propriétés Ladate (car Date est un nom interdit), Nature, Decision et Operateur et j'y ai placé un constructeur par défaut (qui donne un objet "vide") et un autre qui donne un objet "rempli".

    Dans l'event Load du formulaire, j'ai commencé par définir moi-même les colonnes du DGV. (l'idéal est de mettre cela dans une procédure à part bien sûr).

    J'ai ensuite écrit la requête qui va me permettre de récupérer les données qui se trouvent dans la DB.

    Ensuite, on crée les objets nécessaire pour accéder à la DB et on éxécute la requête.
    Si le reader contient des lignes, pour chaque ligne, on ajoute un objet de type MonEvement dans une liste.

    Quand c'est fini, si ma liste existe (donc si la requête a retourné au moins une ligne), on donne la liste au DGV.

    S'il y a des questions, il ne faut surtout pas hésiter !
    Kropernic

  14. #34
    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 rv26t Voir le message
    @Kropernic


    D'ou ma remarque.
    Et par la suite je comptais indiquer la solution avec la méthode fill pour alimenter le DataGridView. Mais tu m'as devancé.

    J'ai laissé la discution aller dans le sens ou elle était partie afin de permettre à Crowww de connaître la source de ces erreurs.

    J'avais aussi un peu lu en diagonale.

    Sorry rv. Comme indiqué, j'ai lu en diagonale
    Kropernic

  15. #35
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    Sorry rv. Comme indiqué, j'ai lu en diagonale
    C'est pas grave tu as eu raison d'intervenir (mon approche n'était peut-être pas la bonne)
    Je pense que sa BDD n'est pas bien structurée. C'est juste un doute il faut voir.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  16. #36
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bon, j'ai un peu plus de temps (corrigeons l'existant)
    Citation Envoyé par rv26t Voir le message
    Conseil : Tu devrais faire des jointures sur tes tables pour tout ramener d'un coup. normalement par les id.
    Citation Envoyé par Kropernic Voir le message
    Mais au-delà de ça, je crois que le résultat qu'il produit n'est pas correct car il affiche des décisions et des opérateurs en rapport avec des évènements (car sur la même ligne dans le DGV) alors qu'ils n'ont en fait rien à voir vu que les querys sont indépendantes et sans filtre (en tout cas, d'après le code posté).
    Effectivement pour ce qui concerne les décisions et les opérateurs c'est le premier élément de ces tables qui est systèmatiquement ramené.

    Plutôt que de placer un where sur chacune des autres requête (et utiliser 2 commandes supplémentaires) il est préférable d'utiliser une seule requête avec des jointures entre les tables.

    D'ailleur ta requête
    Citation Envoyé par Crowww Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT TO_CHAR(DTE_EVENT,'DD/MM/YYY'),TO_CHAR(DTE_EVENT,'HH24:MI:SS'), EVENEMENT.LIBELLE, DECISION.LIBELLE, OPERATEUR.LIBELLE FROM EVENEMENT, DECISION, OPERATEUR WHERE EVENEMENT.ID_DECISION = DECISION.ID_DECISION AND EVENEMENT.ID_OPERATEUR = OPERATEUR.ID_OPERATEUR ORDER BY TO_CHAR(DTE_EVENT,'DD/MM/YYY') ASC"
    va très bien il suffit d'utiliser celle-là directement dans ta première commande.

    J'avais vraiment lu en diagonale. Désolé.

    Tu peux mettre des alias pour simplifier comme dans la requête exemple de Kropernic. ("order by 1" doit fonctionner aussi)
    Ce qui te permettra de récupérer toutes les infos d'un coup.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  17. #37
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Je reviens de nouveau sur le forum

    Utilisation avec fill pour un remplissage avec peu de code - testé sur access (à adapter pour oracle)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Private Sub frmSuiviEvent_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim ds As New DataSet()
            ' test simple avec access (attention alias avec [] pour access) ----- garder ta requete oracle ----- placer les oracle... et le GetConnexionString
            Dim Requete As String = "SELECT DTE_EVENT as [date], evt.LIBELLE as [nature de l'évènement], d.LIBELLE as [Décision], o.LIBELLE as [Opérateur] " & _
                "FROM EVENEMENT evt, DECISION d, OPERATEUR o WHERE evt.ID_DECISION = d.ID_DECISION AND evt.ID_OPERATEUR = o.ID_OPERATEUR ORDER BY 1 ASC"
            Dim cnx As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\data\Personnes\Personnes.accdb") ' connexion base de données, source de donnée (access pour test) laisser ton GetConnexionString
            Dim Cmd As OleDbCommand = New OleDbCommand(Requete)  ' objet commande : Représente une instruction SQL à exécuter (par rapport à une source de donnée)
            Dim da As OleDbDataAdapter = New OleDbDataAdapter(Cmd) ' objet DataAdapter : commande et connexion BDD utilisés pour remplir un DataSet et mettre à jour la source de données
            Cmd.Connection() = cnx ' donne la connexion à la commande
            cnx.Open()
            da.Fill(ds, "Event")
            DataGridView1.DataSource = ds.Tables("Event") ' chargement du DatagridView depuis le DataSet
            cnx.Close()
        End Sub
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. insertion de données dans Base de données Oracle 9
    Par hottnikks_79 dans le forum SQL
    Réponses: 2
    Dernier message: 16/03/2006, 00h07
  2. [MySQL] Problème d'insertion de données dans table d'associations
    Par Yukhaa dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 07/02/2006, 17h10
  3. [C#] problème avec l'insertion des données dans MySQL
    Par madica dans le forum Accès aux données
    Réponses: 7
    Dernier message: 08/11/2005, 13h27
  4. automatiser l'insertion de données dans une bd
    Par matterazzo dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 24/10/2005, 01h06
  5. Réponses: 7
    Dernier message: 12/10/2004, 16h43

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