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

ASP.NET Discussion :

Pb Requête Access pour regrouper 2 champs dans DropDownList


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut Pb Requête Access pour regrouper 2 champs dans DropDownList
    Bonjour,

    J'utilise une base de données Access et j'essaie d'afficher dans une DropDownList 2 champs d'une même table. J'ai vu quelques exemples sur le forum mais rien ne marchait dans mon cas, peut-être parce que j'utilise une base Access...

    J'effectue la requête suivante dans une fonction CPQuery() :
    SELECT cpr + ' ' + viller AS cpv FROM cpville ORDER BY cpr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Remplissage de la Liste des Codes Postaux
    System.Data.IDataReader drcp;
    drcp = CPQuery();
     
    liste_cp.DataSource = drcp;
    liste_cp.DataTextField = "cpv";
    liste_cp.DataValueField = "viller";
    liste_cp.DataBind();
     
    drcp.Close();
    Avec ça, j'obtiens l'erreur suivante :
    Une opération OLE-DB en plusieurs étapes a généré des erreurs. Vérifiez chaque valeur d'état OLE-DB disponible. Aucun travail n'a été effectué.
    Type de données incompatible dans l'expression du critère.


    Merci de votre aide.

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste_cp.DataValueField = "viller";
    Je vois pas où est défini viller

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    La table cpville comporte deux champs : cpr et viller.
    Ta remarque dit que je devrais mettre :
    SELECT cpr + ' ' + viller AS cpv, viller FROM cpville ORDER BY cpr

    c'est ça ?

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    En essayant ce que j'ai marqué juste au-dessus, j'obtiens une nouvelle erreur (en anglais cette fois-ci...) :
    The provider could not determine the Double value. For example, the row was just created, the default for the Double column was not available, and the consumer had not yet set a new Double value.

    ...

  5. #5
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    j'essaierai ça moi:

    SELECT (cpr + ' ' + viller) AS cpv, viller AS viller, cpr FROM cpville ORDER BY cpr

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    Merci pour ta réponse mais ça ne marche pas, toujours la même erreur (celle en anglais...).

  7. #7
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Et si tu tapes ta requete dans ACCESS ça marche?

  8. #8
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    Non, la 1ère colonne ne marche pas (cpv) mais le reste se remplit bien sûr (viller et cpr, colonne 2 et 3)...

  9. #9
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Donc, c'est une limitation d'access
    Va falloir passer par un objet intermediaire

  10. #10
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    Qu'est ce que tu entends par "objet intermédiaire" ?
    Est-ce que tu pourrais m'en dire un petit peu plus car c'est mon premier site que je fais en ASP .NET avec une base de données...

    Merci.

  11. #11
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Tu pourrais créer une DataTable
    Tu remplis ta DataTable via ta requete
    Tu bindes ta liste déroulante sur la DataTable

  12. #12
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    Je ne vois pas trop la différence, car pour l'instant je stocke le résultat de ma requête dans un DataReader :

    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
    protected System.Data.IDataReader CPQuery()
    {
            string pathserv = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
            string connectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data Source={0}/taxe.mdb", pathserv);
            System.Data.IDbConnection dbConnection = new System.Data.OleDb.OleDbConnection(connectionString);
     
            string queryString = "SELECT (cpr + ' ' + viller) AS cpv, viller, cpr FROM cpville ORDER BY cpr";
            System.Data.IDbCommand dbCommand = new System.Data.OleDb.OleDbCommand();
            dbCommand.CommandText = queryString;
            dbCommand.Connection = dbConnection;
     
            dbConnection.Open();
            System.Data.IDataReader dataReader = dbCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
     
            return dataReader;
    }
    Le problème vient de la requête et d'Access, pas de la manière dont on stocke le résultat, non ?

  13. #13
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Oui donc:

    Tu fais un select cpr, viller ... pour avoir une requete qui marche
    Ensuite tu remplis ta DataTable avec ton_champ = dr("cpr") + dr("viller")

    Et tu bindes dessus

    Ca devrait marcher

  14. #14
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    Ah OK, je ne l'avais pas compris comme ça...

    Et pourquoi il faut un DataTable, le DataReader ne marcherait pas ??

  15. #15
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Le datareader va te retourner cpr et viller separement donc faut les regrouper avant de les binder à ta liste déroulante, non?

  16. #16
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    En fait, je ne vois pas trop comment créer mon DataTable car je voudrais aussi que ma liste déroulante conserve le :
    liste_cp.DataValueField = "viller";

    Là j'avoue m'y perdre un peu...

    Au final :

    - Je garde mon DataReader en exécutant la requête SELECT cpr, viller FROM cpville ORDER BY cpr

    - Je remplis mon DataTable comme suit :

    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
     
    DataTable table = new DataTable();
    DataColumn column = new DataColumn("CpVille", Type.GetType(string));
    table.Columns.Add(column);
     
    DataRow r;
     
    System.Data.IDataReader drcp;
    drcp = CPQuery();
     
    do
    {
          while (drcp.Read())
          {    
                r = table.NewRow();
                r.Item[0] = drcp["cpr"] + " " + drcp["viller"];
                table.Rows.Add(r);
           }
    }
    while (drcp.NextResult());
    drcp.Close();
     
    liste_cp.DataSource = table;
    liste_cp.DataBind();
    Et comment je précise mon DataValueField ?

  17. #17
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    DataValueField = "CpVille" normalement (le nom de la colonne de ta DataTable en fait)

  18. #18
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    Oui mais moi je veux que ce soit le champ "viller"...

    Et sinon, j'ai une autre question : le code que je viens de poster, je l'ai adapter de la FAQ mais apparemment la ligne suivante ne convient pas :
    r.Item[0] = drcp["cpr"] + " " + drcp["viller"];

    C'est Item qui pose problème... si quelqu'un a une idée...

  19. #19
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    r["CpVille"] je pense

    et si tu veux d'autres champs, ajoutent d'autres colonnes dans la datatable

  20. #20
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    Pour le problème de Item, il suffit de faire ça :
    r["CpVille"] = drcp["cpr"] + " " + drcp["viller"];

    Et j'ai aussi oublier la ligne : liste_cp.DataTextField = "CpVille";
    Et là ça marche !

    Je vais surement rajouter une deuxième colonne avec comme champ "viller", comme ça je pourrais le rajouter à mon DataValueField.

    Merci beaucoup lutecefalco !!!


    Edit: apparement j'ai oublié de faire un refresh car tu m'avais déjà répondu...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/12/2012, 13h23
  2. Réponses: 5
    Dernier message: 09/09/2005, 18h51
  3. regrouper plusieurs champ dans un seul en requete
    Par Nicko29 dans le forum Access
    Réponses: 12
    Dernier message: 07/09/2005, 19h29
  4. Regrouper des champs dans un GROUP BY
    Par kaiserazo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 11/07/2005, 09h43
  5. Réponses: 13
    Dernier message: 20/07/2004, 09h54

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