L'evenement TFIELD.ONCHANGE est declenché apres avoir modifier le champ tfield mais n'est pas declenché apres un cancel ou cancel update ?
Peut on changer cette action ?
Est ce une omission?
Merci.
Medhome
Version imprimable
L'evenement TFIELD.ONCHANGE est declenché apres avoir modifier le champ tfield mais n'est pas declenché apres un cancel ou cancel update ?
Peut on changer cette action ?
Est ce une omission?
Merci.
Medhome
salut
c'est volontaire le TField ne concerne que le champs
le cancel ou autre joyeuseté concerne le TDataSet ... un niveau au dessus
Tdataset post est aussi une joyauseté et pourtant onckange est déclanché
salut
j'avoue que c'est un joyeux sac de nœud pour retrouver ses petits et utiliser les événements à bon
escient
que cherche tu as "trapper" et pour quel utilisation ?
Apres tdataset.refresh je calcul la somme de tfield apres changement du tfield je met à jour somme mais apres annulation du tfield la somme doit etre remise à jour .
Ps : j'utilise cached
ne serait-il pas mieux d'utiliser un champ calcul et l'événement onCalcField ?
Il s'agit de la somme verticale d'un grid.
On doit pouvoir faire apres annulation valeur de field:
Code:
1
2
3
4
5 onChange updateSom(field) proc updateSom( field:Tfield) Som:=som+field.value-field.oldvalue;
Mon avis, pour ce qu'il vaut, est que l'affaire est mal engagée car nous n'avons pas eu, jusqu'à présent, un exposé clair du problème.
ce "Il s'agit de la somme verticale d'un grid" change complètement la donne.
De là je me pose des questions sur le fait que ces cumuls soient dans la grille, cela dit, il existe des composants grille qui permettent ces cumuls dans se poser de question.
En tout cas, je n'utiliserai pas de TField.onChange mais une bonne petite requête
Si je comprends bien vous voulez refaire le cumul à chaque changement de TField?
si la question s'adresse à moi, c'est non : Je ne lancerai la requête qu'aprés un post (AfterPost pour être précis). De plus ma longue expérience m'a largment prouvé qu'utiliser des TField.Onchange de même que des AftrerScroll n'était pas vraiment de bonnes idées car ce sont des évènments trop souvent levés.
Comme vous semblez être de ces personnes qui fournissent les informations au compte gouttes, sans même indiquer la version de Delphi utilisée, ni de façon précise le besoin je n'irai pas plus loin
salut
normalement les TAggregatField sont fait pour cela
dans le pire des cas tu Recalcule sur le onAfterpost, onAfterCancel ou onAfterDelete du TDataset
Je crois qu'il faudrai ajouter AfterOpen , onfilter, afterRefresh dans le cas Master-Detail
salut
as tu essayé dans le OnUpdateRecord du TDataset ?
Je veux juste savoir pourquoi TFIELD.CHANGED n'est pas déclenché apres cancelUpdate ou plus simplement cancel. je ne demande une autre solution.
Merci
Est-ce qu'une réponse à la volée : "parce qu'il n'y a pas de changement de la valeur du champ si vous faites un Cancel" parait suffisant comme explication ?
Sinon faites des recherches dans les sources et regardez la hiérarchie des évènements.
Je suis persuadé que si l'on avait de vraies explications de l'objectif on y verrait certainement plus clair. Tout ce que l'on a c'est une indication d'utilisation de grille et un pseudo code
Je pense que c'est clair :
on effectue la somme d'une ou plusieurs colonnnes d'un GRID apres un Open, Refresh ..... du dataset, quelque soit la methode .( SQL , Boucle ...)
Si un tfield change de valeur la somme est seulement recalculée som=som+field.value-field.oldvalue. Dans ce cas TFIeld.onchange convient .
Pour moi cancelUpdate change la valeur de Tfield.value ?
salut
tu résonne en champs mais base en BD le champs tans que tu n'as pas fait de post la valeur dans la bd n'est pas changé
si tu fait un cancel la valeur ne change pas
ce qui compte c'est la valeur intégré dans la BD pas celle qui est affiché a un moment t
Salut
Dans ce cas où se trouve la valeur affichée pres le cancel et surtout comment l'atteindre , ceci résoudra ce problème.
Merci
salut
les Propriete OldValue et NewValue du Tfield peut être ;)