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'utilisation des colonnes Expression


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut Problème d'utilisation des colonnes Expression
    Bonjour à tous,
    Je vous ai largement sollicité ces derniers temps mais je suis encore devant un problème.
    La solution de tomlev sur un post récent avec des colonnes expression ma donné des idées et j'aimerais (si c'est possible) remplacer des calculs que je fais actuellement en parcourant toutes les lignes de mes tables par un calcul dans ce type de colonne.
    J'ai commencé par créer ma colonne Expression dans le DataSet mais j'ai une erreur lorsque je valorise la propriété Expression : (Impossible d'interpréter le jeton 'Child' à la position 1.)
    Voici en détail ce que je voudrais faire :

    J'ai 3 tables :
    Table 'Devis' :
    ID (Clé Primaire auto-incrémenté)
    exp_ID_Commande (Colonne expression)

    Table 'Commandes'
    ID (Clé Primaire auto-incrémenté)

    Composition de 'J_Cde_Devis' :
    ID (Clé Primaire auto-incrémenté)
    ID_COMMANDE (FKey3 : Clé étrangere liée à ID de la table 'Commandes')
    ID_DEVIS (FKey4 : Clé étrangere liée à ID de la table 'Devis')

    La table J_Cde_Devis est une table de jonction qui me sert à stocker tous les devis qui possède une commande. (Une commande peux posséder plusieurs devis, mais un devis ne peux pas faire l'objet de plusieurs commande). PS: J'aurais pu m'éviter cette table de jonction mais je tiens à la conserver au cas ou.

    Je voudrais faire un calcul dans ma colonne exp_ID_Commande pour trouver l'ID_COMMANDE de chaque Devis (qui possede une commande) dans la table J_Cde_Devis.

    J'ai mis ceci dans la propriété expression de ma colonne exp_ID_Commande mais j'obtiens le message d'erreur cité plus haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableDevis.Columns("exp_ID_COMMANDE").Expression = "Child(FKey4).ID_COMMANDE"
    Je ne sais pas i c'est possible ou si il faut rajouter encore une relation ou autres.
    J'espère que vous pourrez m'aider, ça pourrait me simplifier considérablement mon programme si ça fonctionne.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    FKey4 est une relation entre Commandes et J_Cde_Devis, donc elle n'est pas accessible dans la table Devis. Je ne suis pas sûr que ce que tu cherches à faire soit faisable avec une table de jointure, et vu que cette table de jointure ne sert à rien (puisqu'un devis a une seule commande), il vaudrait mieux la supprimer.

    Il faudrait plutôt faire une relation avec Commandes comme parent et Devis comme enfant

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    Merci de m'avoir répondu tomlev,
    J'ai vérifier à 2 fois mais Fkey4 est bien une relation entre Devis et J_Cde_Devis non ?
    C'est ce mot clé Child qui me semblait être une solution, je me disais que l'on devait pouvoir faire quelques choses avec dans ce style mais peut-être que c'est pas possible. Comme c'est la première fois que j'utilise les expressions je ne sais pas répondre à ça et je ne sais pas non plus très bien à quoi sert ce mot clé Child.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    J'arrive à faire la somme des ID_COMMANDE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableDevis.Columns("exp_ID_COMMANDE").Expression = "Sum(Child(FKey4).ID_COMMANDE)"
    Vu que je n'ai qu'un seul ID_COMMANDE par devis ça fonctionne mais vous avez raison, c'est un défaut de conception au départ.
    Je ne peux pas avoir à la fois ma table J_Cde_Devis et vouloir obtenir un seul l'ID ce n'est pas logique, d'ou mon problème.
    En vous remerciant pour votre aide.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par BasicZX81 Voir le message
    J'ai vérifier à 2 fois mais Fkey4 est bien une relation entre Devis et J_Cde_Devis non ?
    Euh oui pardon, c'est moi qui dit n'importe quoi

    Citation Envoyé par BasicZX81 Voir le message
    C'est ce mot clé Child qui me semblait être une solution, je me disais que l'on devait pouvoir faire quelques choses avec dans ce style mais peut-être que c'est pas possible. Comme c'est la première fois que j'utilise les expressions je ne sais pas répondre à ça et je ne sais pas non plus très bien à quoi sert ce mot clé Child.
    Bah ça sert à faire référence à une ligne de la table enfant, sauf qu'en pratique il y en a généralement plusieurs...

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    Euh oui pardon, c'est moi qui dit n'importe quoi
    Y'a pas de soucis.
    J'ai regardé de plus prêt les expressions dans les colonnes calculées depuis hier, je dois dire que la syntaxe n'est pas simple quand on a pas l'habitude et donc je ne suis pas arrivé à faire ce que je voulais. (Par exemple pour ajouter des conditions dans une fonction Sum).
    J'ai noté aussi suite à mes essais que l'on ne pouvait pas utiliser les expressions sur des colonnes qui ont une clé étrangère.
    Du coup au vu de ces difficultés, j'ai conservé mes colonnes classiques avec mes calculs comme je faisait avant.
    Je pourrais toujours remplacer quelques colonnes classique par des colonnes expression plus tard quand je maîtriserais un peu mieux la synthaxe.
    En tout cas j'ai rétablie tout les calculs et mon programme fonctionne Nickel, je suis vraiment content. Je le doit en partie aux membres de ce site que je remercie énormément pour l'aide apportée et sans qui je ne serais pas parvenu à allez jusqu'au bout.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par BasicZX81 Voir le message
    (Par exemple pour ajouter des conditions dans une fonction Sum).
    Ca doit être possible en utilisant IIF : IIF(condition, valeurSiVrai, valeurSiFaux)Toute la doc des fonctions disponibles est ici :
    http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

    Citation Envoyé par BasicZX81 Voir le message
    J'ai noté aussi suite à mes essais que l'on ne pouvait pas utiliser les expressions sur des colonnes qui ont une clé étrangère.
    Je comprends pas ce que tu veux dire...

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    Ca doit être possible en utilisant IIF : IIF(condition, valeurSiVrai, valeurSiFaux)
    J'ai essayé mais ça doit être moi qui n'a pas su l'utiliser.

    Pour revenir à mon exemple je rajoute la table 'comptes' suivante :
    Table 'Comptes' :
    ID (Clé Primaire auto-incrémenté)
    Total_Commande (Colonne expression)

    Je complète la table 'Devis' avec une colonne supplémentaire :
    Table 'Devis' :
    ID (Clé Primaire auto-incrémenté)
    ID_Compte (Fkey5 clé étrangère liée à la colonne ID de la table compte)
    ID_Commande
    Montant_Devis

    Je sais que tous les devis qui possède une commande ont leurs colonnes ID_COMMANDE non null. Le but est de calculer Total_Commande pour chaque comptes de cette facon :
    Calculer pour chaque comptes la somme de tous les montants des devis qui ont un ID_Commande non null.

    J'ai noté aussi suite à mes essais que l'on ne pouvait pas utiliser les expressions sur des colonnes qui ont une clé étrangère.
    Désolé je n'arrive plus à reproduire le problème, j'avais eu un message d'erreur lors d'une tentative de faire un calcul dans une colonne lié par une clé étrangère. Je referais une tentative plus tard.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu peux mettre dans Devis une colonne expression MontantCommande dans ce style : Parent(Commande_Devis).Montant.

    Je crois que ça renverra null si ID_Commande est null, donc pas besoin de tester ID_Commande (à vérifier)

    Et ensuite tu peux mettre dans Compte l'expression suivante pour Total_Commandes : SUM(Child(Compte_Devis).MontantCommande).

    (j'ai renommé les relations, avec des numéros c'est impossible de s'y retrouver)

  10. #10
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    merci beaucoup tomlev,
    Ça fonctionne Nickel, j'ai compris le principe et je vais pouvoir remplacer une bonne partie de mes colonnes par des colonnes expressions.

    J'aurais juste une dernière question si je n'abuse pas :
    Peut t'on enregistrer ces colonnes en base de données ? (pour l'instant ça n'a pas vraiment de sens de faire ça mais ça m'interresserait de savoir si c'est possible et je n'ai trouvé aucune info la dessus sur le Net).

    EDIT : J'ai reproduit le problème que j'avais rencontré, si on définie la propriété expression sur une colonne qui possede une clé étrangère ca léve une exception, voici le message :
    "Impossible de définir la propriété Expression sur la colonne exp_ID_COMMANDE, car elle fait partie d'une contrainte."

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par BasicZX81 Voir le message
    Peut t'on enregistrer ces colonnes en base de données ?
    Bah ça doit être possible, mais pour quoi faire ? Si c'est des colonnes calculées, c'est que leurs valeurs peuvent être déterminées à partir d'autres colonnes, donc si tu les enregistres en base, tu sauvegardes des données redondantes, avec tous les problèmes que ça peut poser (notamment le maintien de la cohérence)

  12. #12
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Par défaut
    merci beaucoup,
    j'ai édité mon post précédent pour confirmer un autre problème que j'avais rencontré.
    C'est étonnant que l'on ne puisse pas définir la propriété expression sur une clé étrangère, je n'en vois pas la raison à priori mais le message à l'air clair, ça ne doit pas être possible.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-E] Problème pour masquer des colonnes.
    Par martiweb dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/04/2007, 02h53
  2. Problème d'utilisation des files
    Par AraBorLeg dans le forum C
    Réponses: 4
    Dernier message: 06/01/2007, 20h55
  3. Réponses: 1
    Dernier message: 24/11/2006, 16h36
  4. Problème d'utilisation des attributs width et height avec une image distante
    Par Ptit_Mouss dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/09/2006, 15h40
  5. problème de groupement des colonnes
    Par opeo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/09/2006, 16h35

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