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

 Delphi Discussion :

affiche un champ calculé


Sujet :

Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut affiche un champ calculé
    Salut tous une fois de plus je demande de l'aide

    je ne sais pas comment faire
    j'ai une base de donnée ( Paradox ) avec des enregistrements
    nom , prénom, date-enregistrement

    je voudrais afficher dans un listbox ou dbgrid

    le nom ,prenom ,et nombre de jour depuis l'inscription

    pour le calcul j'ai pas de probleme je sais faire mais comment afficher et surtout ou écrire mon code ?

    merci de votre aide

  2. #2
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut
    salut,
    il faut créer un champ calculé fkCalculated, ensuite dans l’événement onCalcfield vous mettez votre code.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut merci
    Citation Envoyé par liazidf Voir le message
    salut,
    il faut créer un champ calculé fkCalculated, ensuite dans l’événement onCalcfield vous mettez votre code.

    merci de ton aide
    j'ai créer un champs calculé de type date

    mais j'ai un problème dans mon code

    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
    procedure TDataModule2.Query11CalcFields(DataSet: TDataSet);
    var
    Date2, Date1 : TDate;
    Diff, Diff2 : Double;
    begin
    // la date du jour
    Date1:=DateToStr(Date);
    // champs date de ma table
    Date2:=Datamodule2.Query5.FieldByName('Date_arrive').Asdatetime;
     
    Diff := daysBetween(Date1,Date2);
     
    fkCalculated:=FloatToStr(Diff);
     
    end;
    voici le message erreur que j'ai
    [Erreur] DataModule21.pas(319): Identificateur non déclaré : 'TDate'
    [Erreur] DataModule21.pas(330): La partie gauche n'est pas affectable
    [Erreur] DataModule21.pas(330): Types incompatibles : 'TFieldKind' et 'String'
    [Erreur fatale] Registre_des_corps.dpr(45): Impossible de compiler l'unité utilisée 'DataModule21.pas'
    je dois afficher le format de ma date ?

  4. #4
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Essaye en remplaçant Tdate par Tdatetime
    Ce qui se conçoit bien s'énonce clairement
    Et les mots pour le dire viennent aisément (Boileau)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut merci
    j'ai fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var
    Date2, Date1 : Tdatetime;
    Diff, Diff2 : Double;
    begin
    // la date du jour
    Date1:=DateToStr(datetime);
    // champs date de ma table
    Date2:=Datamodule2.Query5.FieldByName('Date_arrive').Asdatetime;
     
    Diff := daysBetween(Date1,Date2);
     
    fkCalculated:=FloatToStr(Diff);
    mais toujours erreur

    [Erreur] DataModule21.pas(334): Identificateur non déclaré : 'datetime'
    [Erreur] DataModule21.pas(340): La partie gauche n'est pas affectable
    [Erreur] DataModule21.pas(340): Types incompatibles : 'TFieldKind' et 'String'
    [Erreur fatale] Registre_des_corps.dpr(45): Impossible de compiler l'unité utilisée 'DataModule21.pas'
    [Pascal Erreur] DataModule21.pas(1): Impossible d'invoquer l'achèvement de code, du fait d'erreurs dans le code source

  6. #6
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    il ne faut modifier que le Tdate en TDateTime, pas le DateToStr(date) !
    Ce qui se conçoit bien s'énonce clairement
    Et les mots pour le dire viennent aisément (Boileau)

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    il ne faut pas convertir Date

    ceci seul suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TDataModule2.Query11CalcFields(DataSet: TDataSet);
    begin
    Datamodule2.Query5.FieldByName('nbjours').asInteger:=daysBetween(Date1,Date2);
    end;
    nbjours étant déclaré dans le dataset comme champ calculé de type entier
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    il n'y aurait pas une erreur ligne 12 ? : fkCalculated est une valeur de la propriété FieldKind ! il ne faut pas lui passer le résultat de DaysBetween() !! D'ailleurs ton code ne compile pas et le compilo te l'explique :
    [Erreur] DataModule21.pas(334): Identificateur non déclaré : 'datetime'
    [Erreur] DataModule21.pas(340): La partie gauche n'est pas affectable
    [Erreur] DataModule21.pas(340): Types incompatibles : 'TFieldKind' et 'String'
    Un petit sur TDateTime (ligne 2) te donnera l'unité à ajouter dans tes uses ...

    Ensuite, d'où vient ta Date1 (ligne 6) ?? d'un champ de texte (de type TEdit ?) auquel cas,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Date1 := StrToDate(MonEdit.Text); // essaie aussi TryStrToDate() ...

    Citation Envoyé par tarmo57 Voir le message
    j'ai fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var
    Date2, Date1 : Tdatetime;
    Diff, Diff2 : Double;
    begin
    // la date du jour
    Date1:=DateToStr(datetime);
    // champs date de ma table
    Date2:=Datamodule2.Query5.FieldByName('Date_arrive').Asdatetime;
     
    Diff := daysBetween(Date1,Date2);
     
    fkCalculated:=FloatToStr(Diff);
    mais toujours erreur
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut merci
    merci a tous de votre aide mais je vais faire autrement ,je crois que mon code ne tiens pas la route

  10. #10
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut
    salut,

    l'erreur est là :fkCalculated:=fkCalculated:=FloatToStr(Diff);:
    NomChamp:=Diff;

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/05/2015, 09h35
  2. Afficher un champs calculé depuis les enregistrements précédents
    Par Interruption13h dans le forum Requêtes
    Réponses: 5
    Dernier message: 14/03/2011, 18h30
  3. Champs calculés vide affiche #Nombre
    Par anelinette dans le forum IHM
    Réponses: 3
    Dernier message: 11/05/2010, 11h01
  4. Comment calculer et afficher des champs calculés sur les états ?
    Par babez dans le forum Bases de données
    Réponses: 8
    Dernier message: 05/06/2008, 21h51
  5. Réponses: 2
    Dernier message: 31/10/2007, 14h58

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