Bonjour,
je voudrais savoir quels champs, dans une grille liée a un dataset, je viens de modifier.
J'en ai besoin pour faire des traitements derrière mais juste sur ces champs là.
merci d'avance
Bonjour,
je voudrais savoir quels champs, dans une grille liée a un dataset, je viens de modifier.
J'en ai besoin pour faire des traitements derrière mais juste sur ces champs là.
merci d'avance
Utilise TDataSet.Modified pour savoir si l'Enregistrement a été modifié (AVANT Post)
Puis Compare les TField.NewValue et OldValue pour déterminer les champs ayant été modifiés
En Utilisant un TClientDataSet\TDataSetProvider entre le TDBGrid et le DataSet réel, tu pourrais, via la propriété Delta, énumérer l'ensemble des modifications
Idéalement dans BeforeUpdateRecord
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Il suffit de regarder dans l'événement OnDataChange de ton TDataSource lié au DBGrid. La variable Field étant le champs qui vient d'être modifié.
je regarde les propriétés et comment utiliser NewValue et OldValue, ca a l'air d'etre ce que je veux et de fonctionner correctement.
Pour le OnDataChange, je ne peux pas, car je n'ai pas de datasource ... je m'explique :
j'ai un serveur datasnap REST avec un dataSetprovider et un ClientDataset.
ceux là sont lié a ma partie client qui elle, utilise un datasource pour visualiser ma grille.
mais sur les modif faites sur la grille, c'est la partie serveur qui doit réagir, donc je ne peux pas utiliser cette propriété.
je pense donc que la premiere solution est la bonne !
Merci beaucoup
Si tu as des Echanges via DataSnap, je ne le connais que de noms mais possible que l'on y passe pour remplacer DCOM
Attention, après un Post, le OldValue passe à NewValue, c'est accessible qu'entre le moment entre Edit\Post
Avec les TClientDataSet (un côté client et un autre côté serveur, si je me trompe pas ?)
Vérifie si LogChanges a un effet pour que Delta énumére les suppressions, insertions ... ?
J'ignore si DataSnap transmet juste le Data ou si il transmet aussi le Delta du TClientDataSet client vers le TClientDataSet du Serveur
Si LogChanges est activé, le SaveToFile Binaire ou XML enregistre le Delta dans le fichier, donc possible que lors de l'échange via WS REST, cela soit fourni aussi !
Il est même possible que l'échange n'envoie QUE Delta, cela réduirait ainsi la Quantité de données échangées en le client et le serveur !
L'envoie uniquement de Data serait plus pertinent que l'envoie de Data !
Cela permet de n'échanger et de ne modifier QUE les données réellement modifiées côté client surtout avec l'accès concurrentiel !
Comment le gère DataSnap, as-tu une phase de reconciliation si plusieurs clients modifient les mêmes données simultanément ?
Le Delta utilise aussi le NewValue \ OldValue, j'ignore leur durée de vie en DataSnap, comment gère-t-il le Merge ?
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
oui en effet j'ai vu, la valeur newValue est non attribuée dans le BeforeUpdateRecord.
Donc sur le before post, je parcours mes champs et je compare les deux valeurs : If DataSet.Fields[i].NewValue <> DataSet.Fields[i].OldValue then ...
et ca marche tres bien (en enlevant les blob, car là j'ai une erreur, mais comme ils ne peuvent pas etre modifié, ca ne me dérange pas... tant mieux)
Pour répondre a tes questions, je ne sais pas comment il gere ca, car je gere moi meme pour qu'un utilisateur ne modifie les données et les autres n'ont pas acces.par contre, je pense que sinon, c'est firebird qui prendrait le relai, comme toutes applications.
le datasnap n'est que pour le transfert des données, apres, c'est une gestion de base de données normale qui intervient, puisque les évènements se passe sur les dataset.
Coté client :
TClientDataSet :
RemoteServer : TDSProviderConnection -> SQLConnection
Providername : nom du TDataSetprovider du serveur
Coté serveur :
TDataSetProvider
DataSet : TClientDataSet qui a pour ProviderName mon TDataSetProvider
Voilà,
merci encore
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager