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 :

Défilement d'une DbGrid et champs calculés


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Points : 167
    Points
    167
    Par défaut Défilement d'une DbGrid et champs calculés
    Bonjour,

    J'ai la situation suivante :
    Une Dbgrid rattachée à un datasource rattaché à un AdoTable qui contient un champ calculé.
    Quand ma table est très volumineuse l'affichage met beaucoup de temps à cause du calcul préalable des champs calculés.

    Une fois ma grille affichée, je veux faire défiler la liste en appuyant sur PageDown par exemple. Mon problème c'est qu'à chaque PageDown, il recalcule tous les champs calculés de la table.

    Je croyais qu'une fois la grille affichée, le fait de la parcourir n'impliquait pas le recalcul de tous ces champs.

    Existe-t-il un moyen de ne pas tout recalculer à chaque fois?

    Merci pour vos réponses!

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Tu as essayé en mettant AutoCalcField de ton ADOTable à False pour voir si le temps de traitement n'est pas meilleur ?

    @+ Claudius

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Points : 167
    Points
    167
    Par défaut
    En le mettant à False, il passe quand même dans la procedure CalcFields de mon champ.
    Etonnant?

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Non c'est normal !
    L'aide de Delphi précise:
    Si AutoCalcFields a la valeur false,les champs de référence sont recalculés et l'événement OnCalcFields se produit quand :

    L'ensemble de données est ouvert.
    L'ensemble de données est placédans l'état dsEdit.
    Un enregistrement est lu depuis la base de données.
    Est-ce que tu as gagné en perf ?

    @+

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Points : 167
    Points
    167
    Par défaut
    Je n'ai pas gagné de temps car c'est dans la procédure OnCalcFields qu'il perd tout le temps. Et comme il y passe (meme quand calculatedfield est a false , mais comme tu dis c'est normal), le temps est le meme.

    J'ai remarqué qu'il passait dans cette procédure quand je suis rendu au dernier enregistrement affiché dans la grille à l'écran et que je veux aller à l'enregistrement suivant. Bref il me faudrait une grille de 20000 lignes et un ecran suffisamment grand pour afficher d'une traite ces 20000 lignes!!

    Mais je ne crois pas que ça existe..., donc je vais devoir trouver une parade.

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Si tes calculs sont lourds, est-ce que tu ne pourrait pas les faire, ne serait-ce qu'en partie, dans ta requête SQL ?

    [edit] tu utilises un ADOTable , et avec un ADOQuery ? [/edit]

    @+

  7. #7
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Points : 167
    Points
    167
    Par défaut
    Citation Envoyé par Cl@udius
    Si tes calculs sont lourds, est-ce que tu ne pourrait pas les faire, ne serait-ce qu'en partie, dans ta requête SQL ?

    [edit] tu utilises un ADOTable , et avec un ADOQuery ? [/edit]

    @+
    J'utilise un AdoTable donc le champs est mis a jour selon une valeur déduite d'une Adoquery qui fait une jointure entre cette table et une autre. Aie Aie Aie, Je sais....
    Mais interdiction de tout refaire, je dois faire avec les composantes du source.

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Points : 167
    Points
    167
    Par défaut
    Citation Envoyé par Cl@udius
    Si tes calculs sont lourds, est-ce que tu ne pourrait pas les faire, ne serait-ce qu'en partie, dans ta requête SQL ?

    [edit] tu utilises un ADOTable , et avec un ADOQuery ? [/edit]

    @+
    J'ai l'impression que Delphi charge les données de l'AdoTable au fur et à mesure des pages de la dbgrid, il n'y aurait pas moyen de tout charger d'un coup?

  9. #9
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Tu as mis quoi dans ton calcul aussi ?
    C'est peut être lui qui te ralenti le traitement.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  10. #10
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par tomy29
    il n'y aurait pas moyen de tout charger d'un coup?
    Si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    with ADOTable1 do
      Open;
      Last;
      First;
    end;
    A voir ce que ca donne !

  11. #11
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Cl@udius
    Si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    with ADOTable1 do
      Open;
      Last;
      First;
    end;
    A voir ce que ca donne !
    Le fait de faire Open charge déjà l'intégralité de la table (c'est comme ca que fonctionne les composants TxxxTable), le last te sert à rien sauf à placer le curseur en fin de table.

    Donc déjà tu as le temps de chargement (20 000 enregistrements qui doit prendre quelques secondes quand même) + le champ calculé qui en prend un petite peu à chaque fois. (Il serait bien de voir à quoi ressemble le calcul du champ calculé)

    De toute façon travailler sur une table avec 20 000 enregistrements avec un composant TxxxTable, c'est pas la chose à faire.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  12. #12
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Malatar
    Le fait de faire Open charge déjà l'intégralité de la table (c'est comme ca que fonctionne les composants TxxxTable), le last te sert à rien sauf à placer le curseur en fin de table.
    Exact j'avais oublié ce point, peut-être parce que je n'utilise jamais de TxxxTable.

  13. #13
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Points : 167
    Points
    167
    Par défaut
    Citation Envoyé par Malatar
    Le fait de faire Open charge déjà l'intégralité de la table (c'est comme ca que fonctionne les composants TxxxTable), le last te sert à rien sauf à placer le curseur en fin de table.

    Donc déjà tu as le temps de chargement (20 000 enregistrements qui doit prendre quelques secondes quand même) + le champ calculé qui en prend un petite peu à chaque fois. (Il serait bien de voir à quoi ressemble le calcul du champ calculé)

    De toute façon travailler sur une table avec 20 000 enregistrements avec un composant TxxxTable, c'est pas la chose à faire.
    Et 20000 c'est le nombre d'enrg seuil... ca peut monter à 100000.

    Dans mon calcul je mets le champ calculé a 'YES' si la requête exécutée retourne un enregistrement, et 'NO' et si elle ne retourne rien.

    Le problème se pose surtout lorsque j'applique un filtre sur ce champs (soit YES soit NO) et que je me balade dans la grille quand le filtre est activé. (via OnFilterRecord).
    Je suppose qu'il recalcule et refiltre à chaque fois que je fais un 'Pagedown' dans la dbgrid. Alors que j'aurais voulu qu'une fois le filtre activé il ne refiltre plus quand je me balade dans la grille.

  14. #14
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par tomy29
    Et 20000 c'est le nombre d'enrg seuil... ca peut monter à 100000.
    Revois ton fonctionnement, traiter autant d'enregistrements avec un TxxxTable, c'est même pas la peine.
    Il faut absolument que tu passes par des requêtes et que tu filtres via ces requêtes ds le premier affichage.
    Prévois tes critères de recherche sur ta(tes) table(s) et fait le système d'affichage par requête en conséquence.

    Sinon fait voir quand même ton calcul (le code du champ calculé) et le filtre on pourra peut être l'optimisé un peu
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  15. #15
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Points : 167
    Points
    167
    Par défaut
    Citation Envoyé par Malatar
    Revois ton fonctionnement, traiter autant d'enregistrements avec un TxxxTable, c'est même pas la peine.
    Il faut absolument que tu passes par des requêtes et que tu filtres via ces requêtes ds le premier affichage.
    Prévois tes critères de recherche sur ta(tes) table(s) et fait le système d'affichage par requête en conséquence.

    Sinon fait voir quand même ton calcul (le code du champ calculé) et le filtre on pourra peut être l'optimisé un peu
    Le problème c'est qu'une grande partie l'application fait référence à cet AdoTable. Et il faudrait des semaines pour tout réécrire. Et je n'ai que trois jours.

    Voici quand meme une partie du source:
    Champ Calculé:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    procedure TDMCHR_Tiers.ADOTable_CHRTiersCalcFields(DataSet: TDataSet);
    var qtemp : tadoquery;
    begin
      qtemp := tadoquery.Create(self);
      qtemp.Connection:=DMParametres.ADOConnection;
      qtemp.close;
      qtemp.SQL.Add('Select distinct t.id_chr_tiers as TIERS ,t.c_siege as SIEGE , '+
      ' c_segment_clientele, tx_rsquared '+
      'from chr_tiers as T,chr_autorisation as A '+
      'where T.id_chr_tiers='+quotedstr(ADOTable_CHRTiersID_CHR_TIERS.Value)+
      ' and T.id_chr_tiers=A.id_chr_tiers '+
      'and A.c_modele<>''N/A'' ');
      qtemp.Prepared:=true;
      qtemp.open;
     
      if (not qtemp.eof) or (valeur_chr_Tiers_edition=1) then        // Modelisees
        begin
          DMCHR_Tiers.ADOTable_CHRTiersCHR_MODELISEES.Value := 1;
          if DMParametres.CodeLangue='FR' then
            DMCHR_Tiers.ADOTable_CHRTiersCHR.Value := 'OUI'
          else DMCHR_Tiers.ADOTable_CHRTiersCHR.Value := 'YES'
        end
      else   // non modelisees
        begin
          DMCHR_Tiers.ADOTable_CHRTiersCHR_MODELISEES.Value := 0 ;
          if DMParametres.CodeLangue='FR' then
            DMCHR_Tiers.ADOTable_CHRTiersCHR.Value := 'NON'
          else DMCHR_Tiers.ADOTable_CHRTiersCHR.Value := 'NO';
        end;
        qtemp.close;
        qtemp.free;
    end;
    Pas sûr que le prepared serve à grand chose. Donc quand je suis rendu à la derniere ligne (affichée) de ma grille et que je passe a la ligne suivante il passe dans ce CalcFields pour tous les enregistrements de la table.


    Mon filtre se déclenche en sélectionnant un critère dans une combobox:
    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
    procedure TfrmCHR_Tiers_Principal.ComboBox1Select(Sender: TObject);
    var valeur : string;
    begin
    //FILTRE SUR LA GRILLE
      inherited;
      DMCHR_Tiers.ADOTable_CHRTiers.filtered:=true;
     
      if (ComboBox1.text = 'Modélisées')  then valeur :='OUI';
      if (ComboBox1.text = 'With Model')  then valeur :='YES';
      if (ComboBox1.text = 'Non Modélisées') then valeur :='NON';
      if (ComboBox1.text = 'Without Model') then valeur := 'NO';
      if (ComboBox1.text = 'Tous') or (ComboBox1.text = 'All') then DMCHR_Tiers.ADOTable_CHRTiers.filtered:=false;
     
      DMCHR_Tiers.valeur_filtre:=valeur;
      DMCHR_Tiers.ADOTable_CHRTiers.close;
      DMCHR_Tiers.ADOTable_CHRTiers.open;
    end;
    Avec l'événement OnFilterREcord:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TDMCHR_Tiers.ADOTable_CHRTiersFilterRecord(DataSet: TDataSet;
      var Accept: Boolean);
    begin
      Accept := (ADOTable_CHRTierschr.value=valeur_filtre);
    end;

  16. #16
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Normal que ca mette autant de temps pour le calcul

    Pour ma part je te dirais de tout refaire car la c'est très mal parti, et ca va être de pire en pire à chaque fois que tes tables vont prendre du volume.

    Si la requête dans ton calcfield mets 10s ca va être 10s * par le nombre de lignes affichées par le DbGrid, une catastrophe en clair

    CalcField -> Bien pour de petit calcul rapide mais il faut éviter des requêtes couteuse en ressource.
    TxxxTable -> Bien quand les tables dépassent pas les 500-1000 enregistrements, au dessus, vaut mieux passer par des requêtes avec critères sélectifs.

    Parfois il est plus rapide de casser ce qui a été fait, que de l'adapter et de rajouter des coquilles dans le programme.

    Sinon une petite optimisation au niveau de la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    With qtemp do
    begin
      close;
      SQL.Add('Select distinct t.id_chr_tiers as TIERS ,t.c_siege as SIEGE , ');
      SQL.Add('c_segment_clientele, tx_rsquared '); 
      SQL.Add('from chr_tiers as T inner join chr_autorisation as A on T.id_chr_tiers=A.id_chr_tiers');
      SQL.Add('where T.id_chr_tiers='+quotedstr(ADOTable_CHRTiersID_CHR_TIERS.Value));
      SQL.Add('and A.c_modele<>''N/A'' ');
      Prepared:=true;
      Open;
    end;
    Tu gagneras quelques millisecondes en utilisant un inner join qui est optimisé pour cela
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  17. #17
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Points : 167
    Points
    167
    Par défaut
    Citation Envoyé par Malatar
    Normal que ca mette autant de temps pour le calcul

    Pour ma part je te dirais de tout refaire car la c'est très mal parti, et ca va être de pire en pire à chaque fois que tes tables vont prendre du volume.

    Si la requête dans ton calcfield mets 10s ca va être 10s * par le nombre de lignes affichées par le DbGrid, une catastrophe en clair

    CalcField -> Bien pour de petit calcul rapide mais il faut éviter des requêtes couteuse en ressource.
    TxxxTable -> Bien quand les tables dépassent pas les 500-1000 enregistrements, au dessus, vaut mieux passer par des requêtes avec critères sélectifs.

    Parfois il est plus rapide de casser ce qui a été fait, que de l'adapter et de rajouter des coquilles dans le programme.

    Sinon une petite optimisation au niveau de la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    With qtemp do
    begin
      close;
      SQL.Add('Select distinct t.id_chr_tiers as TIERS ,t.c_siege as SIEGE , ');
      SQL.Add('c_segment_clientele, tx_rsquared '); 
      SQL.Add('from chr_tiers as T inner join chr_autorisation as A on T.id_chr_tiers=A.id_chr_tiers');
      SQL.Add('where T.id_chr_tiers='+quotedstr(ADOTable_CHRTiersID_CHR_TIERS.Value));
      SQL.Add('and A.c_modele<>''N/A'' ');
      Prepared:=true;
      Open;
    end;
    Tu gagneras quelques millisecondes en utilisant un inner join qui est optimisé pour cela
    Merci pour ton aide. Tu as raison, le composant TadoTable n'est pas du tout approprié pour l'usage actuel (a l'epoque de la création du programme, il n'etait pas prévu de mettre un champ calculé et un filtre, et il n'y avait pas autant d'enregistrements).
    Si j'arrive à convaincre la MOA de mettre du budget pour une réécriture de cette partie du programme alors je pourrai le faire, sinon ca attendra la refonte du programme et byebye Delphi (plus supporté chez le client, comme chez beaucoup de grands comptes d'ailleurs, BDF, BNP, etc..., j'ai l'impression que ça sent le sapin pour Delphi et que ses années sont comptées, pour mon grand malheur!!!)

  18. #18
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    je commence par la fin
    a la fin da la chargement tu peut mettre par example:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    adotableoncalcfield:=nil;
    c'est pas la solution, car tu doit absolumant passé par les joiture

    [edit] je voit que malatar à déjà répondu, alors...
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  19. #19
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par tomy29
    j'ai l'impression que ça sent le sapin pour Delphi et que ses années sont comptées, pour mon grand malheur!!!)
    non s'il te plais ne dis pas sa, surtout de la part d'un delphiste, que va dire les ennemis alors???
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

Discussions similaires

  1. Ajouter à une table un champ calculé
    Par Sinakhine dans le forum Requêtes
    Réponses: 10
    Dernier message: 05/12/2012, 17h29
  2. Trier un DBgrid par champs calculé
    Par Chayanne47 dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/10/2012, 09h19
  3. RechDom avec une Requête et Champs Calculé !
    Par Jawad-smart dans le forum IHM
    Réponses: 5
    Dernier message: 14/06/2008, 19h51
  4. Recordset d'une requête avec champ calculé
    Par gbzmt dans le forum VBA Access
    Réponses: 6
    Dernier message: 13/02/2008, 20h22
  5. Recordset d'une requête avec champ calculé
    Par gbzmt dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/02/2008, 07h37

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