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 :

Problème d'affichage > listbox > vb.net et access 2010


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juillet 2013
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Etudiant en informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 102
    Par défaut Problème d'affichage > listbox > vb.net et access 2010
    Bonjour à tous,

    J'ai une application a développer en vb.net 2010 (Visual Studio) avec une base MS Access 2010.
    La première partie de mon programme était de permettre aux rééducateurs de pouvoir enregistrer les actes de la semaine dans une table appeler "acte".
    La deuxième partie est de s'occuper de la modification (pour le chef de service).
    Voici le problème :
    Quand le rééducateur rentre dans son espace pour enregistrer ses actes de la semaine, il a dans cette interface un bouton permettant d'aller dans un autre formulaire dans lequel il y a un listbox auquel on doit sélectionner l'enregistrement a modifier mais rien ne s'affiche.

    Voici le code :
    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
    '_________________________REMPLIR LA LISTE D'ENREGISTREMENT A MODIFIER________________________________________________________________________________________
     
            'Récupérer le numéro du rééducateur afin d'afficher ses enregistrements
            fourthSQL = "SELECT DISTINCT * FROM reeducateur"
            dta.SelectCommand.CommandText = fourthSQL
            dta.Fill(dts, "reeducateur")
     
            For i = 0 To dts.Tables("reeducateur").Rows.Count - 1
                Dim nomReeducateur As String = frmBReeducateur.lblAfficherReeducConnecter.Text
                If nomReeducateur = dts.Tables("reeducateur").Rows(i).Item("nomReeduc") Then
                    Dim noReeducateur As Integer = dts.Tables("reeducateur").Rows(i).Item("noReeduc")
     
                    'Liste des enregistrements de la table Actes
                    firstSQL = "SELECT DISTINCT * FROM acte WHERE noReeduc =" & noReeducateur & " ORDER BY nomUsager ASC"
                    dta.SelectCommand.CommandText = firstSQL
                    dta.Fill(dts, "acte")
     
                    For j = 0 To dts.Tables("acte").Rows.Count - 1
                        'Récupérer tous les champs de la table acte dans des variables
                        Dim varNoUsager = dts.Tables("acte").Rows(i).Item("noUsager")
                        Dim varNomUsager = dts.Tables("acte").Rows(i).Item("nomUsager")
                        Dim varPrenomUsager = dts.Tables("acte").Rows(i).Item("prenomUsager")
                        Dim varNoReeduc = dts.Tables("acte").Rows(i).Item("noReeduc")
                        Dim varNoSem = dts.Tables("acte").Rows(i).Item("noSem")
                        Dim varMois = dts.Tables("acte").Rows(i).Item("mois")
                        Dim varTypeSemaine = dts.Tables("acte").Rows(i).Item("typeSemaine")
                        Dim varDeplacements = dts.Tables("acte").Rows(i).Item("deplacements")
                        Dim varVisitesMedicales = dts.Tables("acte").Rows(i).Item("visitesMedicales")
                        Dim varJourneesExceptionnelles = dts.Tables("acte").Rows(i).Item("journeesExceptionnelles")
                        Dim varRencontreFamilles = dts.Tables("acte").Rows(i).Item("rencontreFamilles")
                        Dim varReunions = dts.Tables("acte").Rows(i).Item("reunions")
                        Dim varInterventiontsTelephoniques = dts.Tables("acte").Rows(i).Item("nbActe")
                        Dim varNbActes = dts.Tables("acte").Rows(i).Item("nbActe")
     
                        frmSelectActe.lstSelectActes.Items.Add(varNomUsager & " " & _
                                                                varPrenomUsager & " " & _
                                                                varNoSem & " " & _
                                                                varMois & " " & _
                                                                varNbActes)
     
                    Next
                End If
            Next
    Pouvez-vous m'aider s'il vous plais ???

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Bonjour,

    Je me permet plusieurs remarques.

    Dans votre code vous ajoutez tous les actes de tous les rééducateur. Je pense que vous vous voulez seulement tous les actes d'un rééducateur non ? (EDIT : désolé je n'ai pas vu le IF - Un if sur un nom n'est peut être pas la meilleur idée, un nom n'ai pas unique.
    Vous pouvez également faire des SELECT sur des Datatables afin d'ajouter une condition et de vous évitez une boucle plus longue avec un if au début. )
    Je pense que vous ne devriez pas mettre le DISTINCT.
    Je vous conseille de faire des classes, plutôt que de déclaré X variables. Cela sera plus facilement exploitables par la suite.

    A+

  3. #3
    Membre confirmé
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juillet 2013
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Etudiant en informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 102
    Par défaut
    Je vous remercie pour ces conseils, pouvez-vous développez un peu avec un petit exemple svp

    Merci d'avance pour votre aide...

  4. #4
    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
    Hello,

    Je plussoie les remarques déjà faites.

    Pourriez-vous poster la définition de vos tables dans la DB ? Nous pourrons alors vous aider plus avant.

    Le bout de code que vous montrer, s'effectue-t-il sur le formulaire nommé frmSelectActe ? Si oui, utilisez le mot clef Me.

    Je pense qu'il serait préférable de typer vos variables dans lesquelles vous affectez les valeurs récupérées de la DB. En effet, la méthode dts.Tables("acte").Rows(i).Item("noUsager") retourne un objet de type Object (en caricaturant, sans type défini). En typant cela, vous vous faciliterez la vie car vous aurez alors accès aux fonctionnalités souvent fort pratique qu'offre le type en question. En plus, ce sera beaucoup plus propre et facilitera le travail du compilateur.

    Pour vous donner une idée, ajoutez ces deux lignes tout en haut de votre page de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit On
    Option Strict On

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    si frmSelectActe n'est pas me, où est déclarée cette variable ?
    si vous utilisez directement le nom du form le problème doit venir de là


    avez vous fait du pas à pas pour voir ce qui se passe ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juillet 2013
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Etudiant en informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 102
    Par défaut
    En effet des lors où nous cliquons sur le bouton modifier du formulaire "frmBreeducateur" alors la listbox du formulaire "frmSelectActes" doit afficher les enregistrement précédemment enregistrer (mais seulement celui du rééducateur connecter)

    Voici les champs de la table "acte"
    Champ1 : noActe //NuméroAuto
    Champ2 : noUsager //Numérique : numéro de l'usager
    Champ3 : nomUsager //Texte : nom de l'usager
    Champ4 : prenomUsager //Texte : prénom de l'usager
    Champ5 : noReeduc //Numérique : numéro du rééducateur
    Champ6 : noSem //Numérique : numéro de semaine
    Champ7 : mois //Texte : en plus du numéro de semaine il faut savoir à quel mois il correspond
    Champ8 : typeSemaine //Texte : le type de la semaine
    Champ9 : deplacements //Numérique
    Champ10 : visitesMedicales //Numérique
    Champ11 : journeesExceptionnelles //Numérique
    Champ12 : rencontreFamilles //Numérique
    Champ13 : reunions //Numérique
    Champ14 : interventiontsTelephoniques //Numérique
    Champ15 : nbActe //Numérique : Somme des (Champ9 à Champ14)
    Et Voici un enregistrement fictif :
    noActe : 6329
    noUsager : 251
    nomUsager : Dupont
    prenomUsager : Jean
    noReeduc : 15
    noSem : 12
    mois : Mars
    typeSemaine : 1C
    deplacements : 2
    visitesMedicales : 3
    journeesExceptionnelles : 1
    rencontreFamilles : 4
    reunions : 3
    nbActes : 13
    Je viens de copier votre code, les deux lignes que vous m'avez donné plus haut.
    Comment les faire ceci :
    Citation Envoyé par Kropernic Voir le message
    Je pense qu'il serait préférable de typer vos variables dans lesquelles vous affectez les valeurs récupérées de la DB. En effet, la méthode dts.Tables("acte").Rows(i).Item("noUsager") retourne un objet de type Object (en caricaturant, sans type défini). En typant cela, vous vous faciliterez la vie car vous aurez alors accès aux fonctionnalités souvent fort pratique qu'offre le type en question. En plus, ce sera beaucoup plus propre et facilitera le travail du compilateur.
    Merci encore pour votre aide...

  7. #7
    Membre confirmé
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juillet 2013
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Etudiant en informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 102
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    si frmSelectActe n'est pas me, où est déclarée cette variable ?
    si vous utilisez directement le nom du form le problème doit venir de là


    avez vous fait du pas à pas pour voir ce qui se passe ?
    frmSelectActe est un formulaire pas une variable comme vous l'avez deviné.
    Pour le pas à pas vous avez bien fait de poser la question :
    Quand le code est tel que je vous l'ai donné, alors la variables de la première boucle for "nomReeduc" est vide, et donc la suite ne peut pas arrivé, et :
    Quand je garde seulement la deuxième boucle for et je met le restre en commentaire (1er boucle for + condition if) alors tout les rééducateur on tous les enregistrement de tout le monde se qui est logique vu qu'il n'y a pas de condition !
    Pouvez-vous m'aider à faire cette condition svp, voici le code avec les commentaire :
    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
    '_________________________REMPLIR LA LISTE D'ENREGISTREMENT A MODIFIER________________________________________________________________________________________
     
            'Récupérer le numéro du rééducateur afin d'afficher ses enregistrements
            fourthSQL = "SELECT DISTINCT * FROM reeducateur"
            dta.SelectCommand.CommandText = fourthSQL
            dta.Fill(dts, "reeducateur")
     
            'For i = 0 To dts.Tables("reeducateur").Rows.Count - 1
            'Dim nomReeducateur As String = frmBReeducateur.lblAfficherReeducConnecter.Text
            'If nomReeducateur = dts.Tables("reeducateur").Rows(i).Item("nomReeduc") Then
            'Dim noReeducateur As Integer = dts.Tables("reeducateur").Rows(i).Item("noReeduc")
     
            'Liste des enregistrements de la table Actes
            firstSQL = "SELECT * FROM acte ORDER BY nomUsager ASC"
            dta.SelectCommand.CommandText = firstSQL
            dta.Fill(dts, "acte")
     
            For i = 0 To dts.Tables("acte").Rows.Count - 1
                'Récupérer tous les champs de la table acte dans des variables
                Dim varNoUsager = dts.Tables("acte").Rows(i).Item("noUsager")
                Dim varNomUsager = dts.Tables("acte").Rows(i).Item("nomUsager")
                Dim varPrenomUsager = dts.Tables("acte").Rows(i).Item("prenomUsager")
                Dim varNoReeduc = dts.Tables("acte").Rows(i).Item("noReeduc")
                Dim varNoSem = dts.Tables("acte").Rows(i).Item("noSem")
                Dim varMois = dts.Tables("acte").Rows(i).Item("mois")
                Dim varTypeSemaine = dts.Tables("acte").Rows(i).Item("typeSemaine")
                Dim varDeplacements = dts.Tables("acte").Rows(i).Item("deplacements")
                Dim varVisitesMedicales = dts.Tables("acte").Rows(i).Item("visitesMedicales")
                Dim varJourneesExceptionnelles = dts.Tables("acte").Rows(i).Item("journeesExceptionnelles")
                Dim varRencontreFamilles = dts.Tables("acte").Rows(i).Item("rencontreFamilles")
                Dim varReunions = dts.Tables("acte").Rows(i).Item("reunions")
                Dim varInterventiontsTelephoniques = dts.Tables("acte").Rows(i).Item("nbActe")
                Dim varNbActes = dts.Tables("acte").Rows(i).Item("nbActe")
     
                frmSelectActe.lstSelectActes.Items.Add(varNomUsager & " " & _
                                                        varPrenomUsager & " " & _
                                                        varNoSem & " " & _
                                                        varMois & " " & _
                                                        varNbActes)
     
            Next
            'End If
            'Next

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each MyRow As DataRow In dts.Tables("acte").Select("Ici votre condition est une string")
     
    Next
    (la syntaxe est à vérifier)

    A+

  9. #9
    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 nadong Voir le message
    frmSelectActe est un formulaire pas une variable comme vous l'avez deviné.
    Pour le pas à pas vous avez bien fait de poser la question :
    Quand le code est tel que je vous l'ai donné, alors la variables de la première boucle for "nomReeduc" est vide, et donc la suite ne peut pas arrivé, et :
    Quand je garde seulement la deuxième boucle for et je met le restre en commentaire (1er boucle for + condition if) alors tout les rééducateur on tous les enregistrement de tout le monde se qui est logique vu qu'il n'y a pas de condition !
    Pouvez-vous m'aider à faire cette condition svp, voici le code avec les commentaire :
    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
    '_________________________REMPLIR LA LISTE D'ENREGISTREMENT A MODIFIER________________________________________________________________________________________
     
            'Récupérer le numéro du rééducateur afin d'afficher ses enregistrements
            fourthSQL = "SELECT DISTINCT * FROM reeducateur"
            dta.SelectCommand.CommandText = fourthSQL
            dta.Fill(dts, "reeducateur")
     
            'For i = 0 To dts.Tables("reeducateur").Rows.Count - 1
            'Dim nomReeducateur As String = frmBReeducateur.lblAfficherReeducConnecter.Text
            'If nomReeducateur = dts.Tables("reeducateur").Rows(i).Item("nomReeduc") Then
            'Dim noReeducateur As Integer = dts.Tables("reeducateur").Rows(i).Item("noReeduc")
     
            'Liste des enregistrements de la table Actes
            firstSQL = "SELECT * FROM acte ORDER BY nomUsager ASC"
            dta.SelectCommand.CommandText = firstSQL
            dta.Fill(dts, "acte")
     
            For i = 0 To dts.Tables("acte").Rows.Count - 1
                'Récupérer tous les champs de la table acte dans des variables
                Dim varNoUsager = dts.Tables("acte").Rows(i).Item("noUsager")
                Dim varNomUsager = dts.Tables("acte").Rows(i).Item("nomUsager")
                Dim varPrenomUsager = dts.Tables("acte").Rows(i).Item("prenomUsager")
                Dim varNoReeduc = dts.Tables("acte").Rows(i).Item("noReeduc")
                Dim varNoSem = dts.Tables("acte").Rows(i).Item("noSem")
                Dim varMois = dts.Tables("acte").Rows(i).Item("mois")
                Dim varTypeSemaine = dts.Tables("acte").Rows(i).Item("typeSemaine")
                Dim varDeplacements = dts.Tables("acte").Rows(i).Item("deplacements")
                Dim varVisitesMedicales = dts.Tables("acte").Rows(i).Item("visitesMedicales")
                Dim varJourneesExceptionnelles = dts.Tables("acte").Rows(i).Item("journeesExceptionnelles")
                Dim varRencontreFamilles = dts.Tables("acte").Rows(i).Item("rencontreFamilles")
                Dim varReunions = dts.Tables("acte").Rows(i).Item("reunions")
                Dim varInterventiontsTelephoniques = dts.Tables("acte").Rows(i).Item("nbActe")
                Dim varNbActes = dts.Tables("acte").Rows(i).Item("nbActe")
     
                frmSelectActe.lstSelectActes.Items.Add(varNomUsager & " " & _
                                                        varPrenomUsager & " " & _
                                                        varNoSem & " " & _
                                                        varMois & " " & _
                                                        varNbActes)
     
            Next
            'End If
            'Next
    Vous devez ajouter une clause WHERE dans votre requête SQL. Cela donnerait donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    firstSQL = "SELECT * FROM acte WHERE noUsager = X ORDER BY nomUsager ASC"
    où X est a remplacé par le numéro de l'usager qui a été sélectionné.

    J'anticipe en vous recommandant d'utiliser les requêtes paramétrées.

    Pour le fait de typer vos variables, plutôt que de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim varNoUsager = dts.Tables("acte").Rows(i).Item("noUsager")
    Faites plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim varNoUsager as Integer = CInt(dts.Tables("acte").Rows(i).Item("noUsager"))
    De cette manière, vous aurez un objet de type Integer et non un objet de type Object.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    La solution de Kropernic est plus adaptée que la mienne.

    En effet, il est inutile de charger le DataSet de plus de résultat que nécessaire si vous n'en avez pas l'utilité par la suite.

    Cependant si par la suite vous pouvez avoir besoin de plus de donnée (pour un autre noUsager par exemple), ma solution peut vous évitez des aller retour à la base.

    A+

  11. #11
    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
    Encore un point important.

    Evitez autant que possible (c'est-à-dire tout le temps) d'écrire des requêtes de type SELECT * (d'autant plus lorsque vous accédez aux colonnes d'une ligne via leur index).
    En effet, si d'aventure vous deviez ajouter une colonne dans votre table, à moins de l'ajouter la fin, les index de vos colonnes ne correspondraient plus ! En précisant la liste des colonnes à sélectionner, vous vous assurez de ne pas avoir de problème. Cela vous évite aussi de faire transiter par le réseau des données qui ne seraient pas nécessaire (pourquoi récupérer toutes les colonnes alors que quelques unes suffiraient).

    Finalement, vous pouvez aussi accéder aux colonnes d'une ligne via leur nom plutôt que leur index. Mais il y a à boire et à manger dans cette pratique donc continuer avec vos index si vous vous sentez à l'aise (mais alors de grâce, ne faites pas de SELECT *)

  12. #12
    Membre confirmé
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juillet 2013
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Etudiant en informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 102
    Par défaut
    Bonsoir,

    Merci pour toute ces propositions, j'avoue utiliser cette méthode car c'est la seule que je connais grâce aux forums, mais tout n'est pas toujours facile à trouver.
    Je suis dans une formation "développeur logiciel (DL)" depuis Août 2012, et encore loin de tous comprendre, il y a beaucoup de façon de coder mais c'est un peu comme une drogue quand on y a goûté on sans passe plus malgré la dencité du travail quoi qu'il en soit :

    J'ai changé la variable nomReeducateur par varIdReeduc car le nom du rééducateur ne s'affiche qu'après s'être connecté hors le module ce lance dès l'identification (Vous ne pouviez pas le deviné !!!).

    Cependant :
    J'ai fais du pas à pas et un message d'erreur me dit qu'il ne trouve pas l'identifiant (aucune ligne à la position 133).
    Alors j'ai essayé une méthode qui avez fonctionné pour autre chose grâce a "énumération" ; j'ai récupéré le type semaine en fonction du numéro de la semaine, il m'a tout de suite trouvé le bonne enregistrement. Mais là il ne prend que le premier enregistrement et non celui qui est égale à la saisie

    Voici le code qui m'a permis de récupérer le type de la semaine afin de l'enregistrer sur ma base Access :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    For j = 0 To dts.Tables("semaine").Rows.Count - 1
                    secondSQL = "SELECT noSemaine, TypeSem FROM semaine"
                    Dim en As IEnumerator
                    en = dts.Tables("semaine").Rows.GetEnumerator
                    en.Reset()
                    Dim numSem As Integer
                    Do While en.MoveNext()
                        numSem = en.Current("noSemaine")
                        If varSemaine = en.Current("noSemaine") Then
                            dtr("typeSemaine") = en.Current("TypeSem")
                        End If
                    Loop
                Next
    Et voici le code après modification :
    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
    'Récupérer le numéro du rééducateur afin d'afficher ses enregistrements
            fourthSQL = "SELECT DISTINCT * FROM reeducateur"
            dta.SelectCommand.CommandText = fourthSQL
            dta.Fill(dts, "reeducateur")
     
            For j = 0 To dts.Tables("reeducateur").Rows.Count - 1
                Dim en As IEnumerator
                en = dts.Tables("reeducateur").Rows.GetEnumerator
                en.Reset()
                Dim varIdReeducateur As String
                Dim vIdReeducateur As String = frmIdentification.mdtIdentifiant.Text
                Do While en.MoveNext()
                    varIdReeducateur = en.Current("idReeduc")
                    If vIdReeducateur = en.Current("idReeduc") Then
     
                        If varIdReeducateur = dts.Tables("reeducateur").Rows(i).Item("idReeduc") Then
                            Dim varNoReeducateur As Integer = dts.Tables("reeducateur").Rows(i).Item("noReeduc")
     
                            'Liste des enregistrements de la table Actes
                            firstSQL = "SELECT * FROM acte WHERE noUsager = varNoReeducateur ORDER BY nomUsager ASC"
                            dta.SelectCommand.CommandText = firstSQL
                            dta.Fill(dts, "acte")
     
                            For i = 0 To dts.Tables("acte").Rows.Count - 1
                                'Récupérer tous les champs de la table acte dans des variables
                                Dim varNoUsager As Integer = CInt(dts.Tables("acte").Rows(i).Item("noUsager"))
                                Dim varNomUsager As String = CStr(dts.Tables("acte").Rows(i).Item("nomUsager"))
                                Dim varPrenomUsager As String = CStr(dts.Tables("acte").Rows(i).Item("prenomUsager"))
                                Dim varNoReeduc As Integer = CInt(dts.Tables("acte").Rows(i).Item("noReeduc"))
                                Dim varNoSem As Integer = CInt(dts.Tables("acte").Rows(i).Item("noSem"))
                                Dim varMois As String = CStr(dts.Tables("acte").Rows(i).Item("mois"))
                                Dim varTypeSemaine As String = CStr(dts.Tables("acte").Rows(i).Item("typeSemaine"))
                                Dim varDeplacements As Integer = CInt(dts.Tables("acte").Rows(i).Item("deplacements"))
                                Dim varVisitesMedicales As Integer = CInt(dts.Tables("acte").Rows(i).Item("visitesMedicales"))
                                Dim varJourneesExceptionnelles As Integer = CInt(dts.Tables("acte").Rows(i).Item("journeesExceptionnelles"))
                                Dim varRencontreFamilles As Integer = CInt(dts.Tables("acte").Rows(i).Item("rencontreFamilles"))
                                Dim varReunions As Integer = CInt(dts.Tables("acte").Rows(i).Item("reunions"))
                                Dim varInterventiontsTelephoniques As Integer = CInt(dts.Tables("acte").Rows(i).Item("nbActe"))
                                Dim varNbActes As Integer = CInt(dts.Tables("acte").Rows(i).Item("nbActe"))
     
                                frmSelectActe.lstSelectActes.Items.Add(varNomUsager & " " & _
                                                                        varPrenomUsager & " " & _
                                                                        varNoSem & " " & _
                                                                        varMois & " " & _
                                                                        varNbActes)
     
                            Next
                        End If
                    End If
                Loop
            Next
    Si je ne fais pas d'énumération il ne trouve pas d'enregistrement et si j'en fait une alors il ne trouve pas le bon.

    PS: Comment évité tout ces "SELECT" ?

    Merci encore à vous tous pour vos aides...

  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
    Bonjour,

    Pour éviter de faire des SELECT, travaillez sans base de données (désolé, c'est vendredi).

    Sinon, dans votre 2e morceau de code, il y a un problème avec votre requête.

    Vous écrivez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    firstSQL = "SELECT * FROM acte WHERE noUsager = varNoReeducateur ORDER BY nomUsager ASC"
    Qui est une transposition exacte de ce que j'avais proposé où X a été remplacé par varNoReeducateur. Mais souvenez-vous. Voici ce que j'avais écrit après la requête que j'avais proposé :
    où X est a remplacé par le numéro de l'usager qui a été sélectionné.
    Dans votre code, vous n'avez pas remplacé X par le numéro de l'usager mais par la variable contenant le numéro de l'usager.

    Sans se prendre la tête, nous pourrions écrire plutôt ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    firstSQL = "SELECT * FROM acte WHERE noUsager = " & varNoReeducateur.ToString & " ORDER BY nomUsager ASC"
    N.B. : La clause ORDER BY devient superflue en l'état car le filtre étant fait sur un usager, chaque ligne du résultat aura la même valeur pour nomUsager. Je la laisse dans la suite des explications, à vous de la modifier.
    N.B.2 : La colonne nomUsager (ainsi que d'autres probablement) ne devrait pas se trouver dans la table acte mais c'est un autre problème. Nous pourrons en discuter plus tard si vous le souhaitez.

    Cette requête devrait fonctionner mais malheureusement, écrire les requêtes de cette manière est une très mauvaise habitude qu'il ne faut surtout pas prendre. D'où le lien sur les requêtes paramétrées que j'avais donné dans un message précédent. Si nous appliquons ce qui y est dit à votre problème, nous devrions avoir un bout de code ressemblant à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    firstSQL = "SELECT * FROM acte WHERE noUsager = ? ORDER BY nomUsager ASC"
    dta.SelectCommand.CommandText = firstSQL
    dta.SelectCommand.Parameters.Add("@p1", OleDbType.Integer).Value = varNoReeducateur
    dta.Fill(dts, "acte")
    N.B. : J'ai indiqué le type Integer. Ne travaillant pas avec OleDb, ce n'est p-e pas le bon. A vous de vérifier et d'y mettre le type en adéquation avec votre donnée.

    De cette manière, votre requête est sûre et vous évitez les problèmes de typage de données. En effet, en construisant votre requête par concaténation, vous allez rencontrer différents problèmes et plus spécialement avec les chaines de caractères et les dates comme par exemple :
    • Que va-t-il se passer si vous filtrer sur une chaîne de caractères et qu'une apostrophe se trouve dans cette dernière ? Bien souvent, l'apostrophe est utilisé comme délimiteur des chaînes de caractères...
    • Si vous devez filtrer sur une date, le format sera-t-il le bon ?


    En utilisant les requêtes paramétrées, toutes ces problématique sont gérées à votre place et en plus, vous protégez votre code contre les injections SQL.

    Je vous laisse digérer ceci.

  14. #14
    Membre confirmé
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juillet 2013
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Etudiant en informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 102
    Par défaut
    Bonjour à tous,

    Je suis de retour avec les mêmes problèmes mais je pense avoir amélioré le code grâce aux suggestions de Kropernic.
    Le problème est dès la première boucle, en pas à pas la variable varIdReeduc = "m.gagnon" (id : 22) et,
    la variable vIdReeduc = l'id saisie au moment de la connexion du rééducateur ; peut importe qui se connecte la variable varIdReeduc prend toujours la valeur "m.gagnon" qui est le 22/33èmes enregistrements.

    Voici le code :
    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
    'Récupérer le numéro du rééducateur afin d'afficher ses enregistrements ou Usager
            fourthSQL = "SELECT idReeduc, nomReeduc FROM reeducateur"
            dta.SelectCommand.CommandText = fourthSQL
            dta.Fill(dts, "reeducateur")
     
            For i = 0 To dts.Tables("reeducateur").Rows.Count - 1
                Dim en As IEnumerator
                en = dts.Tables("reeducateur").Rows.GetEnumerator
                en.Reset()
     
                Dim vIdReeducateur As String = frmIdentification.mdtIdentifiant.Text
                Do While en.MoveNext()
                    Dim varIdReeducateur As String = en.Current("idReeduc")
                    If vIdReeducateur = en.Current("idReeduc") Then
     
                        If varIdReeducateur = dts.Tables("reeducateur").Rows(i).Item("idReeduc") Then
                            Dim varNoReeducateur As Integer = dts.Tables("reeducateur").Rows(i).Item("noReeduc")
     
                            'Liste des enregistrements de la table Actes
                            firstSQL = "SELECT nomUsager, prenomUsager, noSem, mois, nbActe FROM acte WHERE noReeduc = ?"
                            dta.SelectCommand.CommandText = firstSQL
                            dta.SelectCommand.Parameters.Add("@pNoReeduc", OleDbType.Integer).Value = varNoReeducateur
                            dta.Fill(dts, "acte")
     
                            For j = 0 To dts.Tables("acte").Rows.Count - 1
                                'Récupérer tous les champs de la table acte dans des variables
                                Dim varNoUsager As Integer = CInt(dts.Tables("acte").Rows(i).Item("noUsager"))
                                Dim varNomUsager As String = CStr(dts.Tables("acte").Rows(i).Item("nomUsager"))
                                Dim varPrenomUsager As String = CStr(dts.Tables("acte").Rows(i).Item("prenomUsager"))
                                Dim varNoReeduc As Integer = CInt(dts.Tables("acte").Rows(i).Item("noReeduc"))
                                Dim varNoSem As Integer = CInt(dts.Tables("acte").Rows(i).Item("noSem"))
                                Dim varMois As String = CStr(dts.Tables("acte").Rows(i).Item("mois"))
                                Dim varTypeSemaine As String = CStr(dts.Tables("acte").Rows(i).Item("typeSemaine"))
                                Dim varDeplacements As Integer = CInt(dts.Tables("acte").Rows(i).Item("deplacements"))
                                Dim varVisitesMedicales As Integer = CInt(dts.Tables("acte").Rows(i).Item("visitesMedicales"))
                                Dim varJourneesExceptionnelles As Integer = CInt(dts.Tables("acte").Rows(i).Item("journeesExceptionnelles"))
                                Dim varRencontreFamilles As Integer = CInt(dts.Tables("acte").Rows(i).Item("rencontreFamilles"))
                                Dim varReunions As Integer = CInt(dts.Tables("acte").Rows(i).Item("reunions"))
                                Dim varInterventiontsTelephoniques As Integer = CInt(dts.Tables("acte").Rows(i).Item("interventiontsTelephoniques"))
                                Dim varNbActes As Integer = CInt(dts.Tables("acte").Rows(i).Item("nbActe"))
     
                                frmSelectActe.lstSelectActes.Items.Add(varNomUsager & " " & _
                                                                        varPrenomUsager & " " & _
                                                                        varNoSem & " " & _
                                                                        varMois & " " & _
                                                                        varNbActes)
     
                            Next
                        End If
                    End If
                Loop
            Next
    Pourrais-je avoir de l'aide s'il vous plais ???

  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
    On est lundi et, personnellement, je digère. Les deux combinés font que j'ai du mal à réfléchir.

    Alors voici deux choses à faire.

    Une pour nous à voir plus clair : Commentez plus complètement votre algorithme histoire qu'on aie une vue globale du process sans devoir déduire des choses des noms de vos variables.
    Une pour vous aider : Renseignez-vous sur les boucles For Each ;-)

  16. #16
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    +1 pour Kropernic, la boucle For Each est bien plus simple d'utilisation...
    En plus le code posé est quelque peu erroné...

    Faites un truc du genre:

    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
     
     fourthSQL = "SELECT idReeduc, nomReeduc FROM reeducateur"
    dta.SelectCommand.CommandText = fourthSQL
    dta.Fill(dts, "reeducateur")
     
    Dim varNoReeducateur As Integer = String.Empty
     
    For Each dr As DataRow in dts.Tables("reeducateur").Rows
     
          If String.compare(dr("idReeduc"), frmIdentification.mdtIdentifiant.Text) = 0 Then
                  varNoReeducateur = dr("noReeduc")
                  Exit For
          End If
     
    Next
     
    If not String.IsNullOrEmpty(varNoReeducateur) Then
     
            firstSQL = "SELECT nomUsager, prenomUsager, noSem, mois, nbActe FROM acte WHERE noReeduc = ?"
            dta.SelectCommand.CommandText = firstSQL
            dta.SelectCommand.Parameters.Add("@pNoReeduc", OleDbType.Integer).Value = varNoReeducateur
            dta.Fill(dts, "acte")
     
            For i = 0 To dts.Tables("acte").Rows.Count - 1
                    'Récupérer tous les champs de la table acte dans des variables
                    Dim varNoUsager As Integer = CInt(dts.Tables("acte").Rows(i).Item("noUsager"))
                    Dim varNomUsager As String = CStr(dts.Tables("acte").Rows(i).Item("nomUsager"))
                    Dim varPrenomUsager As String = CStr(dts.Tables("acte").Rows(i).Item("prenomUsager"))
                    Dim varNoReeduc As Integer = CInt(dts.Tables("acte").Rows(i).Item("noReeduc"))
                    Dim varNoSem As Integer = CInt(dts.Tables("acte").Rows(i).Item("noSem"))
                    Dim varMois As String = CStr(dts.Tables("acte").Rows(i).Item("mois"))
                    Dim varTypeSemaine As String = CStr(dts.Tables("acte").Rows(i).Item("typeSemaine"))
                    Dim varDeplacements As Integer = CInt(dts.Tables("acte").Rows(i).Item("deplacements"))
                    Dim varVisitesMedicales As Integer = CInt(dts.Tables("acte").Rows(i).Item("visitesMedicales"))
                    Dim varJourneesExceptionnelles As Integer = CInt(dts.Tables("acte").Rows(i).Item("journeesExceptionnelles"))
                    Dim varRencontreFamilles As Integer = CInt(dts.Tables("acte").Rows(i).Item("rencontreFamilles"))
                    Dim varReunions As Integer = CInt(dts.Tables("acte").Rows(i).Item("reunions"))
                    Dim varInterventiontsTelephoniques As Integer = CInt(dts.Tables("acte").Rows(i).Item("interventiontsTelephoniques"))
                    Dim varNbActes As Integer = CInt(dts.Tables("acte").Rows(i).Item("nbActe"))
     
                    frmSelectActe.lstSelectActes.Items.Add(varNomUsager & " " & _
                                                                        varPrenomUsager & " " & _
                                                                        varNoSem & " " & _
                                                                        varMois & " " & _
                                                                        varNbActes)
    End If

  17. #17
    Membre confirmé
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juillet 2013
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Etudiant en informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 102
    Par défaut
    Merci bien à mactwist69 pour l'exemple, il me faut maintenant comprendre pourquoi il ne trouve plus le champs "noReeduc"

  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
    Citation Envoyé par nadong Voir le message
    Merci bien à mactwist69 pour l'exemple, il me faut maintenant comprendre pourquoi il ne trouve plus le champs "noReeduc"
    C'est un détail mais dans une table d'une base de données, on a des lignes et des colonnes. Pas de champ ni de record.

    [troll]On pourrait débattre du fait qu'access soit une base de données mais bon...[/troll]

  19. #19
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Citation Envoyé par nadong Voir le message
    Merci bien à mactwist69 pour l'exemple, il me faut maintenant comprendre pourquoi il ne trouve plus le champs "noReeduc"
    J'ai pas bien fait gaffe en recopiant, et ça n'a pas peut être rien à voir... (l'aurais tu déjà vu et corrigé dans le code?)
    Mais dans la requête tu écris nomReeduc, plus loin on teste NoReeduc

  20. #20
    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 toute façon, recopier le code qu'on écrit dans l'application, c'est pas bien du tout.

    Il faut comprendre les modifs qu'on a tenté d'apporter, et se les approprier en les reportant dans notre code.

    D'autant plus que bien souvent (moi en tout cas), on écrit le code directement dans le formulaire d'édition de message. Et ce n'est pas le navigateur qui va vérifier si le code compile ou non .

    Donc essaie de comprendre ce que mactwist a voulu faire et reproduit la logique utilisée dans ton code. Non seulement tu apprendras de manière plus durable mais en plus, ça t'évite de chercher la petite erreur de syntaxe ou de typo dans un nom de variable qui s'y serait glissée.

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

Discussions similaires

  1. Problème d'affichage de listbox a textbox
    Par BERRACHED SAID dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/06/2013, 19h45
  2. [AC-2000] problème d'affichage de listbox
    Par nico84 dans le forum IHM
    Réponses: 0
    Dernier message: 22/09/2009, 15h26
  3. problème d'affichage dans listbox
    Par azräel dans le forum VB.NET
    Réponses: 6
    Dernier message: 06/11/2008, 10h39
  4. Réponses: 4
    Dernier message: 09/05/2008, 23h44
  5. [CR][ASP.NET] Problème d'affichage du rapport
    Par David.V dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 20/04/2004, 12h39

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