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 :

connaitre champs MAJ dans un dataset


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 188
    Points : 113
    Points
    113
    Par défaut connaitre champs MAJ dans un dataset
    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

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    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

  3. #3
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    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é.

  4. #4
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 188
    Points : 113
    Points
    113
    Par défaut
    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

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    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

  6. #6
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 188
    Points : 113
    Points
    113
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/11/2010, 09h29
  2. Dataset Typé MAJ dans la BDD
    Par hirochirak dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/06/2008, 18h54
  3. Enregistrer les champs et type des dataset dans un fichier
    Par Andry dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/03/2008, 14h09
  4. Réponses: 11
    Dernier message: 26/07/2006, 13h15
  5. Comment MAJ le même champ présent dans toutes les tables ?
    Par PamelaGeek dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 02/02/2006, 14h06

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