Problème avec une requête SQL

cs_warzet Messages postés 99 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juillet 2013 - 7 nov. 2012 à 10:25
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 8 nov. 2012 à 18:57
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

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
7 nov. 2012 à 12:32
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
0
cs_warzet Messages postés 99 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juillet 2013 1
7 nov. 2012 à 15:01
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
8 nov. 2012 à 18:57
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
0
Rejoignez-nous