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

Bases de données Delphi Discussion :

champ calculé


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut champ calculé
    bonjour,comment enregistrer dans une table un champ calculé?
    merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 66
    Points : 78
    Points
    78
    Par défaut Re: champ calculé
    Citation Envoyé par tomm
    bonjour,comment enregistrer dans une table un champ calculé?
    merci
    Est ce que tu peux explique un peu plus ou bien ecrire ton code pour t'aider.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut tom
    dans une feuille(saisie^pour chaque personne) ou il y a des champs reliés à une table,j'en ai un champ date de naissance et j'ai ajouter un champ calculé dans ma table1 "age" pour calculer l'age de chaque personne
    et j'ai mis un DBedit avec l'evenement oncalcfield( code Table1age.AsInteger := Trunc((date()-Table1Datedenaissance.asDateTime)/365); )
    qui me calcule pour chaque personne son age.Le probleme est que je voudrais que ce soit enregistré dans ma table pour pouvoir l'exploiter ou alors je ne sais si c'est possible utiliser sql avec un champ calculé.
    Dasn tous les cas ,soyez tres simple et tres clair avec moi .Je débute.
    merci

  4. #4
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 842
    Points : 983
    Points
    983
    Par défaut
    Le plus simple est de rajouter une colonne Age dans ta table.
    Comme ça pas de problème, ça marchera.
    Diviser c'est régner : United we stand, Divided we fall
    .

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut tom
    merci mais le probleme dans la table paradox a t on la possibilité de créer un champ calculé?
    merci

  6. #6
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 842
    Points : 983
    Points
    983
    Par défaut
    Se serait une colonne comme les autres.
    Tu le valorisera dans ton code à la saisie avant stockage dans la BD.
    Pas besoin de compliquer les choses.
    Pour Paradox, je ne sait pas ?
    Dans le cas ou tu changerais de BD cela fonctionnera tout pareil.
    Diviser c'est régner : United we stand, Divided we fall
    .

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut tomm
    "Tu le valorisera dans ton code à la saisie avant stockage dans la BD. "
    Que veux tu dire par valoriser dans ton code.Moi ce que j'ai essayé:j'ai créé un nouveau dans ma table .db puis je l'ai rajouté à ma table,mis un DBedit que j'ai connecté à ce nouveau champ,rajouté mon code dans oncalfield mais ça il n'affichearit rien dans le champ quand je l'execute.pourrais tu m'expliquer ce que je dois faire?
    merci

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2003
    Messages : 64
    Points : 54
    Points
    54
    Par défaut
    Salut,

    Le problème avec un champ calculé qui donne l'âge, c'est que par nature cette donnée change tous les jours. Il vaut mieux utiliser un champ persistant dans ta table avec delphi.

    Pout toi ce sera transparent, c'est à dire que ce sera un champ comme un autre (sauf qu'il ne sera pas stocké dans la base mais recalculé avant chaque affichage, ce qui ne change rien du tout quant à son utilisation dant tes traitements).

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut champ calculé
    Actuellement je choisissais comme type float et champ calculé quand j'ajoutais un nouveau champ.que me conseilles tu ?C'est un quoi un champ persistant?Que dois je choisir?
    merci

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2003
    Messages : 64
    Points : 54
    Points
    54
    Par défaut
    Tu fais un clic droit sur ton Ttable puis tu choisis l'éditeur de champs.
    clic droit dans l'éditeur de champ Puis Nouveau Champ.
    Tu créée un champ de type Calculé que tu nomme age.
    (il faut aussi 'ajouter tous les champs' pour avoir accès aux autres champs car à partir du moment ou tu utilises l'éditeur de champs, seuls les champs présents ici seront disponibles à tes Datasources.

    Une fois ton champs calculé créé l'évènement OnCalcField de ton Ttable sera fonctionnel pour calculer les champs de type 'champs calculé'.

    Bon courage

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut champ calculé
    salut,en fait c'est ce que je faisais .L'age type float cahmp calculé dans un dbedit relié au champ age marche parfairement .Le probleme c'est que je souhaite dans une autre feuille trier cette table avec ce champ qui n'y est pas en fonction de l'âge.

    Merci

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2003
    Messages : 64
    Points : 54
    Points
    54
    Par défaut Re: champ calculé
    Citation Envoyé par tomm
    salut,en fait c'est ce que je faisais .L'age type float cahmp calculé dans un dbedit relié au champ age marche parfairement .Le probleme c'est que je souhaite dans une autre feuille trier cette table avec ce champ qui n'y est pas en fonction de l'âge.
    Ha oui, en effet, je ne pense pas qu'il soit possible de trier sur un champ calculé, par contre tu pourrais peut-être te contenter de trier sur le champ Datedenaissance puisque l'âge est, par nature, fonction de la date de naissance.

    Bon courage.

  13. #13
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 842
    Points : 983
    Points
    983
    Par défaut
    Moi ce que j'ai essayé:j'ai créé un nouveau dans ma table .db puis je l'ai rajouté à ma table,mis un DBedit que j'ai connecté à ce nouveau champ,rajouté mon code dans oncalfield mais ça il n'affichearit rien dans le champ quand je l'execute.pourrais tu m'expliquer ce que je dois faire?
    Là, tu y étais presque.
    Le OnCalcFields est exécuté que si le DataSet contient un champ calculé ou de référence, si je ne me trompe pas.
    Une ruse serait de créer comme même une champ calculé fictif uniquement pour que le gestionnaire OnCalcFiels soit appelé.
    Dans le gestionnaire, tu profitera pour mettre à jour le champ Age.
    Je pense que cela devrait faire le boulot.

    [/quote]
    Diviser c'est régner : United we stand, Divided we fall
    .

  14. #14
    Membre à l'essai
    Inscrit en
    Septembre 2002
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 19
    Points : 22
    Points
    22
    Par défaut
    Salut !

    je crois que vous compliquez un peu non ?! On ne met jamais de données calculées dans une base (sauf cas particulier de données calculées non stables). Surtout comme ça a été dit l'age qui varie tout les jours.

    solution: Tu stocke la date de naissance
    tu double clic sur ton DataSet pour ajouter tout les champs de ta table
    puis tu ajoute ton champ calculé Age que tu calcul dans le OnCalcFields
    Il me semble aussi qu'il y a la propriété Value pour chaque champ d'un ensemble de données (A utiliser à la place de Tabler1Age.AsInteger).
    Regarde aussi dans DateUtils ... tu devrais avoir une fonction pour calculer l'age ... ce sera toujours mieux que ta formule (qui fonctionne surement)

    Avec ça tu aura toujours l'age à jour.

    Bon j'espère que j'ai pas raconté trop de bétise, bon courage !

  15. #15
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 842
    Points : 983
    Points
    983
    Par défaut
    Dixit tomm
    je voudrais que ce soit enregistré dans ma table
    je souhaite dans une autre feuille trier cette table avec ce champ qui n'y est pas en fonction de l'âge
    Une autre solution qui n'impose pas la création d'une colonne Age dans la table, serait de créer une vue de ta table dans la BD qui elle contiendrait la colonne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Create TaVue as Select *, 0 Age from TaTable;
    Tu bases ensuite ton DataSet sur cette vue plutôt que sur la table réelle.
    Puis tu fais comme précédemment.
    Diviser c'est régner : United we stand, Divided we fall
    .

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut tom
    une vue de ta table dans la BD qui elle contiendrait la colonne.
    je ne connais pas cette fonction .pourrais tu m'expliquer un peu plus?
    merci

  17. #17
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 842
    Points : 983
    Points
    983
    Par défaut
    Tout d'abord, j'ai tester le tri sur un champ calculé avec la propriété IndexFieldNames, ça marche. Donc ce que tu disais précédemment est faux
    Je dois partir, je reviendrai pour te donner plus d'explication sur les vues.
    Merci
    Diviser c'est régner : United we stand, Divided we fall
    .

  18. #18
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 842
    Points : 983
    Points
    983
    Par défaut
    Dis-nous quels sont les composants que tu utilises ?
    Suivant le cas, la stratégie est différente.
    Moi, je privilégie TClientDataSet pour les ensembles de données et en BD j'ai Oracle que j'attaque avec ADO en tant que source de données.
    Diviser c'est régner : United we stand, Divided we fall
    .

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut tom
    C'est une base paradox et delphi. MA table c'est la table1(group.db)
    Merci pour toute ton aide.

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 16
    Points
    16
    Par défaut age
    L' autre probleme est que je fais appel à cette table et je suis dans une autre form .Mais tu dois avoir raison sur le tri car dans la meme form j'ai pu l'editer(imprimer avec report)pour chaque individu.
    merci

Discussions similaires

  1. tclientdataset et champs calculés
    Par frantzgac dans le forum Bases de données
    Réponses: 1
    Dernier message: 06/10/2004, 22h38
  2. Group by à partir d'un champ calculé || substr
    Par SegmentationFault dans le forum Bases de données
    Réponses: 4
    Dernier message: 30/07/2004, 15h55
  3. Recherche sur champ calculé
    Par srvremi dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/07/2004, 14h04
  4. Réponses: 2
    Dernier message: 22/03/2004, 10h50
  5. [TQuery] champs calculés
    Par Amenofis dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/01/2004, 14h46

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