1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    avril 2015
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : avril 2015
    Messages : 87
    Points : 93
    Points
    93

    Par défaut Problème de refresh après modification

    Bonjour,

    Nous penchons sur un problème avec deux de mes collègues qui parait simple, mais pour lequel nous ne trouvons pas de solution...

    Le problème est que nous avons une TcxGrid qui est remplit via un TDataSource et un TADODataSet que nous appelerons ici ADOInfo.
    L'ADO est alimenté par une vue qui provient de notre base de données MSSQL.

    Lorsque l'on clique sur l'une des lignes de cette grille, on appel l'évènement OnDataChange du DataSource qui va mettre à jour un autre ADO qui pointe sur une des tables qui est utilisés par la vue et qui va, dans un TDBMemo affiché le champ que nous nommerons pour l'exemple : 'Remarque'.

    L'utilisateur doit être capable de modifier le champ 'Remarque' via ce Mémo.

    Jusque là, pas de soucis, tout marche bien.
    Cependant, lorsque l'utilisateur à mit à jour ce champ 'Remarque', on doit aller dans la première grille et changer la couleur de la ligne si le champ 'Remarque' est vide.

    Le problème est que l'on perd le focus de la ligne qui vient d'être modifié.

    à l'heure actuelle, on agit ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure A.DBMemoExit(Sender : TObject);
        var 
          cbkInfo : TBookMark;
        begin
          if ADOMemo.Modified then begin
            ADOMemo.Post;
            cbkInfo := ADOInfo.GetBookMark;
            cxVue.DataController.DataSource := nil;
            ADOInfo.Requery();
            cxVUe.DataController.DataSource := DSInfo;
            ADOInfo.GoToBookMark(cbkInfo)
        end;
    end;
    Le problème c'est qu'après le requery, le bookmark nous emmène sur le numéro de la ligne, sauf qu'après le requery, les données ne sont plus dans le même ordre, et donc il focus une ligne 'au hasard'
    Attention, comprenez bien que, ici, notre problème est que nous n'arrivons pas à changer la couleur de la ligne après la modification du champ remarque (ce pourquoi nous faisons un requery, qui pourrait être remplacer par une autre fonction)

    Auriez-vous une solution pour ce problème ?

    D'avance merci,
    Wazzouille

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    8 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 212
    Points : 18 802
    Points
    18 802
    Billets dans le blog
    4

    Par défaut

    Bonjour,
    les données ne sont plus dans le même ordre
    ça c'est étrange mais peut être n'y a t-il aucun index ou ORDER BY de défini ?

    donc plutôt qu'un Bookmark qui ne fonctionne pas pour une raison indéterminée (et ne fonctionnerai pas dans le cadre d'un environnement multi-utilisateur) il serait peut être mieux d'utiliser un LOCATE sur ces champs (clés de préférence) car il doit bien y avoir un/des index pour cette table ?
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    avril 2015
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : avril 2015
    Messages : 87
    Points : 93
    Points
    93

    Par défaut

    Bonjour,

    J'avais défini mon CommandText avec un ordre by mais mon collègue (beaucoup plus expérimenté en Delphi que moi) m'a dit de ne pas en mettre dans les commandText. Et il n'y a pas d'index non plus...
    Avec l'order by cela marchait pas mal, sauf lorsqu'on faisait un tri par ordre alphabétique par exemple directement dans l'UI...

    On a pensé a utiliser un Locate mais il y a pas mal de records dans la vue et c'est assez lent (à noter qu'on utilise une vue et qu'il n'y a pas de clé définie comme tel ou d'index)

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    8 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 212
    Points : 18 802
    Points
    18 802
    Billets dans le blog
    4

    Par défaut

    Re,
    Je n'avais pas fait attention au fait qu'il s'agissait d'une vue (ceci expliquant donc le problème de l'ordre) et je ne suis pas expert loin s'en faut de ADO qui n'est pas ma tasse de thé!
    Avec Firedac il est possible de créer des index temporaires sur le dataset mais avec ADODataset je serais bien incapable de le dire

    mais sur ce que j'en lis :http://docwiki.embarcadero.com/RADSt...de_TADODataSet
    Affectation d'index pour trier des enregistrements ou constituer la base de recherches à partir d'enregistrements. Outre les propriétés et méthodes d'index standard, vous pouvez utiliser la propriété Sort de TADODataSet pour effectuer des tris à partir d'index temporaires. Les recherches basées sur les index effectuées à l'aide de la méthode Seek utilisent l'index en cours.
    c'est possible
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    avril 2015
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : avril 2015
    Messages : 87
    Points : 93
    Points
    93

    Par défaut

    Bonjour,

    J'ai pu expérimenter l'index, mais cela ne change pas grand chose (il se peut que je l'ai mal utilisé ^^')

Discussions similaires

  1. Problème de cache après modification d'un applet
    Par bieltan dans le forum Applets
    Réponses: 0
    Dernier message: 06/06/2012, 19h06
  2. Refresh après une modification inline
    Par CarteR_28500 dans le forum AJAX
    Réponses: 1
    Dernier message: 23/10/2007, 09h54
  3. [HTML] Fonction Refresh après modifications
    Par .:Djil:. dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 08/11/2006, 14h03
  4. Réponses: 4
    Dernier message: 15/06/2005, 13h46

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