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

Accès aux données Discussion :

Liaison des données dans une application multi-couche


Sujet :

Accès aux données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut Liaison des données dans une application multi-couche
    ReBonjour,

    Donc, la méthode PreparationDonnees() [couche Metier] appelle la méthode ChargerCollaborateur() [couche Data] pour charger les données de la base dans le DataSet.

    Pourquoi lorsque cette méthode a terminé, l'exécution du programme ne retourne pas terminer la méthode "mère" PreparationDonnees() pour transmettre les données aux couches supérieures???

    Comme vous pouvez le voir ci-dessous, il n'y aucun return, goto ou autres qui traînent...

    Au lieu de ça, cela m'affiche directement le formulaire qui n'a évidement pas reçu les données...



    frmMet_Profil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            private void PreparationDonnees()
            { 
                //Appel de la méthode qui va charger les données dans les composants AccesDonnees
                this.Donnees.ChargerCollaborateur();
                //Affectation de la vue par défaut à la VueCollaborateur
                this.dvCollaborateur = this.Donnees.formStats09DataSet1.COLLABORATEUR.DefaultView;      
            }
    Composants Donneesl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            public void ChargerCollaborateur()
            {            this.tbaCollaborateur.Fill(this.formStats09DataSet1.COLLABORATEUR);
            }


    Message d'origine

    Bonsoir,

    je me suis cassé la tête toute la journée pour afficher mes données selon le schéma qui suit, mais je n'arrive toujours pas à les afficher. J'ai tenté de déboguer pas-à-pas, mais je ne comprends pas où ça cloche. Est-ce qu'une bonne âme pourrait y jeter un oeil svp?


    Mode déconnecté

    Version plus grande

    Formulaire PRINCIPAL
    L'instance Métier est bien affectée à la variable metier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
            //Variable de niveau classe pour réception de l'instance clsMetier
            private clsMetier metier = null;
    
            public frmPrincipal() //Constructeur
            {
                InitializeComponent();
    
                //Création de l'instance Métier et affectation à la variable metier
                metier = new clsMetier(); 
            }
    Formulaire PROFIL
    Je pense que le problème se situe ici. Je peux lier le BindingSource, mais le BindingNavigator reste grisé et les données ne s'affichent pas.
    En fait, si je mets un STOP devant la surcharge du constructeur, ça passe tout droit.
    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
    
            //Variable de niveau classe pour réception de l'instance clsMetier
            private clsMetier metier = null;
    
            public frmProfil() //Constructeur
            {
                InitializeComponent();           
            }
    
            public frmProfil(clsMetier metier) //Surcharge du constructeur
            {
                InitializeComponent();
    
                //Affectation du paramètre metier à la variable metier
                this.metier = metier;
            }
    
            private void frmProfil_Load(object sender, EventArgs e)
            {            
                
                //Création de l'instance de l'objet Met_Profil
                this.metier.CreationObjetProfil();
    
                //COORDONNEES DES COLLABORATEURS
                //Initialisation de la source des données
                this.bdsCollaborateur.DataSource = metier.ObjetProfil.VueCollaborateur;
                this.bdnCollaborateur.BindingSource = this.bdsCollaborateur;
    
                //LIAISONS DES DONNEES AUX CONTROLES
                this.txtNoPersonnel.DataBindings.Add("Text", this.bdsCollaborateur, "NoPersonnel");
    
            }
    Classe dll METIER
    L'instance de Donnees est bien affectée à la variable Donnees.
    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
            //Variable de niveau classe pour réception de l'instance AccesDonnees
            private AccesDonnees Donnees = null;
    
            //Variable de niveau classe pour réception des instances des objets Métiers
            private Met_Profil objProf = null;
    
            public clsMetier() //Constructeur
            {
                //Création de l'instance AccesDonnees et affectation à la variable Donnees
                this.Donnees = new AccesDonnees();
    
            }
            //Mise à disposition (en lecture seule) des objets Métier
            public Met_Profil ObjetProfil
            {
                get
                {
                    return objProf;
                }
            }
    
            public void CreationObjetProfil()
            { 
            //Création de l'instance "Met_Profil". A disposition dans la variable "objProf".
                objProf = new Met_Profil(this.Donnees);
            }
    Classe dll Met_Profil

    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
            //Variable de niveau classe pour réception de l'instance AccesDonnees
            private AccesDonnees Donnees = null;
    
            //Variable de niveau classe pour la vue Collaborateur
            private DataView dvCollaborateur = null;
    
            //Mise à disposition (en lecture seule) de la vue Collaborateur
            public DataView VueCollaborateur
            {
                get
                {
                    return dvCollaborateur;
                }
            }
    
            public Met_Profil() //Constructeur
            {
                
            }
    
            public Met_Profil(AccesDonnees Donnees) //Surcharge du constructeur
            {
                //Affectation du paramètre Donnees à la variable Donnees
                this.Donnees = Donnees;
    
                this.PreparationDonnees();
            }
            //Méthode qui va regrouper le chargements des données de chaque table.
            private void PreparationDonnees()
            { 
                //Appel de la méthode qui va charger les données dans les composants AccesDonnees
                this.Donnees.ChargerCollaborateur();
                //Affectation de la vue par défaut à la VueCollaborateur
                this.dvCollaborateur = this.Donnees.formStats09DataSet1.COLLABORATEUR.DefaultView;      
            }
    Composants ACCESDONNEES
    Le chargement du DataSet se fait bien. La source de données est OK.
    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
            public AccesDonnees() //Constructeur
            {
                InitializeComponent();
            }
    
            public AccesDonnees(IContainer container) //Surcharge du constructeur
            {
                container.Add(this);
                InitializeComponent();
            }
    
            //Chargement des données dans le DataSet
            public void ChargerCollaborateur()
            {            this.tbaCollaborateur.Fill(this.formStats09DataSet1.COLLABORATEUR);
            }

  2. #2
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    D'après ce que tu dit, cela viendrait donc des données. As tu vérifier lors du binding que ta source de données contient bien quelque chose ?
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    J'ai trouvé 2 bugs dans le formulaire Profil, un que j'ai contourné, l'autre que je ne comprends pas:

    1er bug:

    Lors de la création du formulaire Profil, il lit le constructeur, mais pas la surcharge qui contient les paramètres de la couche Metier. Ce qui fait que l'instance metier n'est pas transmise. Pourquoi? Je sais pas. Mais en créant l'instance Metier (metier = new clsMetier (); dans l'événement Load), ça passe.

    2ème bug:

    ça passe, ça va charger les données de la bd dans le DataSet, mais une fois fait, cela affiche directement le formulaire Profil sans transmettre les données dans le BindingSource qui se trouve pourtant dans l'événement Load de ce formulaire. Pourquoi est-ce qu'il ne vient pas terminer cet événement ?

    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
            //Variable de niveau classe pour réception de l'instance clsMetier
            private clsMetier metier = null;
    
            public frmProfil() //Constructeur
            {
                InitializeComponent();           
            }
    
            public frmProfil(clsMetier metier) //Surcharge du constructeur
            {
                InitializeComponent();
    
                //Affectation du paramètre metier à la variable metier
                this.metier = metier;
            }
    
            private void frmProfil_Load(object sender, EventArgs e)
            {            
                
                //Création de l'instance de l'objet Met_Profil
                this.metier.CreationObjetProfil();
    
                //COORDONNEES DES COLLABORATEURS
                //Initialisation de la source des données
                this.bdsCollaborateur.DataSource = metier.ObjetProfil.VueCollaborateur;
                this.bdnCollaborateur.BindingSource = this.bdsCollaborateur;
    
                //LIAISONS DES DONNEES AUX CONTROLES
                this.txtNoPersonnel.DataBindings.Add("Text", this.bdsCollaborateur, "NoPersonnel");
    
            }

  4. #4
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    C'est bizarre, si tu appelle la surcharge du constructeur il devrait pourtant l'exécuter...


    Pour ton 2° bug, tu es sûr qu'il passe dans le Load ?
    Sinon ça veut dire que le formulaire à déjà été chargé auparavant.

    Par contre, si il passe dans le Load mais qu'il ne le finit pas sans pour autant lancer une exception, je vois pas quoi faire. C'est un comportement qui ne devrais même pas exister.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    En effet, c'est bizarre. Est-ce que quelqu'un aurait une explication au sujet de la surcharge du constructeur du formulaire Profil ?

    Sinon, j'ai fait un ptit pas de plus en avant, en voyant que j'avais oublié de créer et d'affecter la vue des données dans la méthode PreparationDonnees() du formulaire Met_Profil:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            //Méthode qui va regrouper le chargements des données de chaque table.
            private void PreparationDonnees()
            { 
                //Appel de la méthode qui va charger les données dans les composants AccesDonnees
                this.Donnees.ChargerCollaborateur();
                //Affectation de la vue par défaut à la VueCollaborateur
                this.dvCollaborateur = this.Donnees.formStats09DataSet1.COLLABORATEUR.DefaultView;      
            }
    Toutefois, cela ne change pas mon 2ème bug, car une fois la méthode ChargerCollaborateurs() terminée, il va directement afficher le formulaire sans traiter tout ce qui reste

  6. #6
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Tu le vois clairement en mettant un point d'arrêt sur this.Donnees.ChargerCollaborateur() ?

    A la rigueur, si il lancer une exception je comprendrais, mais là qu'à l'exécution certains bouts de code ne soient pas exécutés sans aucune raison...
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Tu le vois clairement en mettant un point d'arrêt sur this.Donnees.ChargerCollaborateur() ?
    Oui, il appelle la méthode ChargerCollaborateur() (situé dans les composant AccesDonnees), va remplir le DataSet via les fichiers Designer, et dès qu'il a terminé il ressort directement sur le formulaire Principal pour appeler la méthode d'afficher du formulaire Profil. (Et je n'ai rien touché dans les fichier Designer...j'ai déjà assez de peine avec la face visible de l'iceberg ). Tout ceci, sans message d'erreur et autre exceptions...

  8. #8
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Il n'y aurait pas un return caché quelque part ?

    Sinon, ça dépasse mes compétences, je vois pas du tout pourquoi il aurait ce comportement...
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Je te remercie d'essayer de trouver avec moi en tout cas. La moindre petite piste peut aider

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    J'ai édité mon post initial (trop long), maintenant que j'ai situé où se trouve l'erreur.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Suite à un blocage général de la situation, il semblerait que se soit dû à la version de mon OS. Car j'ai testé mon application sur Win 32bits et c'est ok, mais pas sur un 64bits.

    Est-ce que je dois changer un paramètre, ou ajouter une ligne de code pour que se soit compatible 64bits??
    On m'avait expliqué que c'était automatique normalement...

  12. #12
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Tu peux le spécifier dans les propriétés de l'application : tente en changeant la valeur de la plateforme cible dans l'onglet Générer.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Hello laedit!

    Merci pour l'idée. Je suis allé voir ces propriétés, et c'était déjà configuré sur "All CPU". J'ai quand même essayé de modifier en spécifiant "x64", mais cela ne fonctionne toujours pas.

    Je vais donc me résoudre à coder sur mon vieux PC qui possède une version 32bits!

    Ce qui est bizarre, c'est qu'un camarade de cours travaille aussi sur un x64, et il n'a pas de souci!

    Cela doit être mon installation qui est pourrie. Il va falloir que je réinstalle le tout j'imagine.

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/03/2011, 09h01
  2. Réponses: 0
    Dernier message: 24/06/2010, 12h11
  3. Réponses: 1
    Dernier message: 10/12/2008, 19h22
  4. modifier des données dans une requête multi table
    Par Bluman dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 05/02/2008, 10h00
  5. Réponses: 9
    Dernier message: 21/02/2006, 09h06

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