Problème avec une requête SQL

Signaler
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juillet 2013
-
NHenry
Messages postés
14671
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 avril 2020
-
Bonjour à tous, j'ai un gros soucis et je sollicite votre aide à tous pour essayer de le résoudre. Voilà: j'ai une requête portant sur six(6)Tables qui sont (Eleves, Classes, Ecoles, Diplomes, Lieux et Annees_Scolaires). La table principale Eleves a certains de ses champs qui ont la même sources dans les tables secondaires. Bref voici mon code:

       #region NOMBRE D'ENREGISTREMENTS

        private void nbTotalEleves()
        {
            DtSet.Clear();
            DtsGrid.Clear();

            string sAllEleves = "SELECT Eleves.code_eleve, Eleves.nom_eleve, Eleves.prenom_eleve, Eleves.date_naissance_eleve, Lieux1.lieu," + "\n" +
            "Eleves.sexe_eleve, Eleves.pere_eleve, Eleves.mere_eleve, Eleves.tuteur_legal, Eleves.adresse_tuteur, Eleves.tel_tuteur," + "\n" +
            "Classes1.classe, Eleves.date_enregistrement, Annees_Scolaires1.code_annee, Ecoles.ecole, Classes2.classe AS derniere_classe," + "\n" +
            "Annees_Scolaires2.annee AS periode_scolaire, Lieux2.lieu AS localite_ecole, Diplomes.mne_diplome, Eleves.nom_photo_eleve," + "\n" +
            "Eleves.photo_eleve, Eleves.doublant, Eleves.id_eleve" + "\n" +
            "FROM Eleves, Lieux AS Lieux1, Diplomes, Classes AS Classes1, Annees_Scolaires AS Annees_Scolaires1, Ecoles, Classes AS Classes2," + "\n" +
            "Annees_Scolaires AS Annees_Scolaires2, Lieux AS Lieux2" + "\n" +
            "WHERE Lieux1.code_lieu=Eleves.code_lieu AND Classes1.code_classe=Eleves.code_classe AND Annees_Scolaires1.code_annee=Eleves.code_annee" + "\n" +
            "AND Ecoles.code_ecole=Eleves.code_ecole AND Classes2.code_classe=Eleves.derniere_classe AND" + "\n" +
            "Annees_Scolaires2.code_annee=Eleves.periode_scolaire AND Lieux2.code_lieu=Eleves.localite_ecole AND Diplomes.num_diplome=Eleves.num_diplome" + "\n" +
            "ORDER BY Eleves.nom_eleve, Eleves.prenom_eleve";

            //string sAllEleves = "
            OleDbDataAdapter Adapt = new OleDbDataAdapter(sAllEleves, strConex);
            try
            {
                //On stock les résultats trouvé dans un DataSet pour les compter
                Adapt.Fill(DtSet);
                Adapt.Fill(this.DtsGrid, "Eleves");

                //iTotal est egal au count total du nombre de tuple dans ma base
                this.iTotal = DtSet.Tables[0].Rows.Count;
                this.lblTotal.Text = "Nombre total d'Elèves : " + iTotal.ToString();

                //on rempli la liste avec le dataset    
                //this.DttGrid = this.DtSet.Tables["Eleves"];
                this.DttGrid = this.DtsGrid.Tables["Eleves"];

                //on affiche la liste dans le datagridview
                this.dgvEleves.DataSource = this.DttGrid;
                //this.dgvEleves.DataSource = DtSet.Tables[0];
                //this.StyledgvEleves();

            }
            catch (FileNotFoundException ex)//(Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
                //MessageBox.Show("Aucune donnée n'est enregistrée dans la Base de données", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }

        }

        #region LABEL EFFECTIF
        private void Label_Effectif()
        {
            if (i <= 9)
            {
                this.lblPosition.Text = 0 + "" + i + "/" + iMax;
            }
            else if (i > 9)
            {
                this.lblPosition.Text = i + "/" + iMax;
            }
            if ((i <= 9) && (iMax <= 9))
            {
                this.lblPosition.Text = 0 + "" + i + "/" + 0 + "" + iMax;
            }
            else if ((i > 9) && (iMax > 9))
            {
                this.lblPosition.Text = i + "/" + iMax;
            }
        }
        #endregion

        #endregion

A l'exécution, je n'ai aucun résultat. Aussi je demande votre aide. Merci à tous

3 réponses

Messages postés
14671
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 avril 2020
139
Bonjour,

A la place de WHERE pour les jonctions utilises de préférence INNER JOIN ou ses dérivés (performances).

Ensuite, refais ta requête avec l'outil adapté pour pouvoir tester quelle(s) condition(s) pose(nt) problème, en retirant les condition une par une.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juillet 2013
1
Merci NHenry pour ta réponse,
mais cette requête fonctionne sous ACCESS exactement comme elle est écrite. Alors si tu as une autre solution pour moi, elle serait la bienvenue. Merci encore
Messages postés
14671
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 avril 2020
139
Bonjour,

Si tu n'as pas de réponse, c'est parce que tes critères sont trop strictes, pour chercher d'où vient le problème, il faudra retirer les conditions une par une.

Ensuite, concernant les WHERE pour faire des jointures, c'est très lourd et long, en plus, cela complique la relecture de la requête par "l'utilisateur".

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site