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

XMLRAD Discussion :

Pb d'update dans une DataGrid


Sujet :

XMLRAD

  1. #1
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 124
    Points : 56
    Points
    56
    Par défaut Pb d'update dans une DataGrid
    J'ai une table de paramètres pour générer des techniciens dont voici la structure :

    Tech_id : Générateur d'unicité de l'enregistrement
    Tech_Code : code alphanumérique sur 4 carac (Varchar4)
    Tech_name : Varchar(25)
    Tech_Phone : char(14) de style "NN NN NN NN NN"
    Tech_out : Entier pour connaitre l'existence logique de l'enregistrement
    Tech_Replic : Générateur pour faire de la réplication

    Pour L'insert : Je crée 2 générateurs et je fait un DBBatch d'insert où je force out à 0, pas de prob
    Pour le delete : je crée 1 générateur (Replic) et un DBBatch d'update où je force out à 1, pas de prob

    Pour l'update : Problème !
    Par défaut l'update dans une datagrid met tous les enreg à jour or comme je fait de la réplication, je ne veux mettre qu'un seul enreg à jour. Aussi, j'ai modifié l'aspect visuel de la grille pour que l'icone d'update soit à la fin de chaque ligne d'enreg (à la place de celui qui ouvre la formTech par défaut à la création par XmlRad).
    Dans mon xmlgram, je commence par créer mon générateur, puis je fais un match et enfin un DbBatch d'update qui modifie les champ Code, Name, Phone et Replic pour ID sélectionné.
    Mais lorsque je clique, mon générateur de l'enreg modifié se met bien à jour, l'ID et le Out ne bouge pas (jusqu'ici c'est parfait), mais les modifications (idem si les champs ne sont pas modifiés) des champs Code, Name et Phone ne sont pas prises en compte ou du moins le prog me renvoie des valeurs vides. En effet, lors du rafraichissement (idem dans la base de données), tout à disparu dans ces trois champs ! Il y a bien une modification, mais par le vide !

    Questions subsidiaires :

    Mon champ Code est 4 caractère alphanumérique en Caps Lock, comment le forcer ?
    1 / Forcer la case en minuscule ou majuscule
    2 / Forcer un formatage à la saisie : nb de caractères limités et forcer du numérique ou de l'alphanum ?



    2 /
    Température de l'eau : 28 °
    Température extérieure : 32°
    Température au fond du verre : 50° ~ 55°
    ------ Mangez des bananes ----------

  2. #2
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 124
    Points : 56
    Points
    56
    Par défaut J'ai avancé un peu
    Comme mon Delete est un Update particulier, j'ai calqué mon Update dessus, j'arrive donc bien à modifier mon enreg voulu mais seulement le champ Tec_Replic.
    En analysant un peu, je crois comprendre que pour récupérer les valeurs modifiées de Code, Name et Phone, il faut que j'utilise un objet Match, mais celui semble indissociable d'une Xmlc_Pivot qui reprend tous les enreg.
    Aussi voici ce que j'ai fait qui réponds à peu près à mon problème :

    1 / Création d'un générateur Replic
    2 / Update du Tec_Replic pour l'enreg voulu par un DbBatch
    3 / Récupération des valeurs dans un match
    4 / Update des valeurs de Code, Name et Phone par un DbBatch fils du match

    Ainsi, lorsque je modifie un enreg et que je lance la mise à jour sur cet enreg, tous ces champs sont mis à jour, d'abord Replic, puis les autres.

    Par contre, si je modifie plusieurs enregs, la mise à jour modifie d'abord le champ Replic de l'enreg sur lequel j'ai lancé la mise à jour, puis update tous les enregs modifiés, alors que j'aimerais que seul celui sur lequel j'ai lancé l'update soit modifié et les autres modifs annulés au rafraichissement de la page.

    Si kelkun a une idée, il ne faut pas hésité !
    Température de l'eau : 28 °
    Température extérieure : 32°
    Température au fond du verre : 50° ~ 55°
    ------ Mangez des bananes ----------

  3. #3
    RDM
    RDM est déconnecté
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Points : 2 927
    Points
    2 927
    Par défaut
    oulah j'ai mal à la tete . bon on va reprendre plus simplement:
    comment as-tu modifier le DAtaGrid pour faire l'update ?
    tu as cré un formulaire pour chaque enregistrement ? tu utilises le XMLC_Pivot ?
    RDM
    Tout Est Relatif
    Rubrique XMLRAD: http://xmlrad.developpez.com
    FAQ XMLRAD: http://xmlrad.developpez.com/faq/

  4. #4
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 124
    Points : 56
    Points
    56
    Par défaut Je ré-explique
    J'aimerais pouvoir modifier les elt d'une table, mais un seul à la fois. Aussi, j'ai modifié l'aspect visuel du datagrid de la façon suivante : le button qui permet d'updater l'ensemble a été placé en dernier position de chaque enregistrement à la place de celui qui lance FormToto par défaut. Ainsi, dans mon fichier xsl, chaque enreg est encadré par l'icone de Delete et de MàJ et la dernière ligne est là pour ajouter un enreg. Donc il n'esiste que ce formulaire.
    Pour updater, je fais deux étape, un générateur + DbBatch pour modifier le champ Replic de mon enreg et un match + DbBatch pour les autres champ. En fait j'arrive pas à récupérer les valeurs modifiés à l'écran sans le match et comme j'ai garder le XMLC_Pivot toutes les modifs ma sont renvoyés avec que je voudrais slt celles d'un enreg !

    Voici la Form de l'update avec l'utilisation du XMLC_Pivot (NUMVERSION est mon ID):

    <form name="FormUpdateTECHNICIEN" method="POST" action="{/document/Aliases/NETPARADLL}UpdateTECHNICIEN">
    <input type="hidden" name="XMLC_Pivot" value="TECHNICIEN"/>
    <input type="hidden" name="TECHNICIEN_STARTINGROW" value="{@StartingRow}"/>
    <input type="hidden" name="NextAction" value="DataGridTECHNICIEN"/>
    <input type="hidden" name="NUMVERSION"/>
    ....
    </form>


    et le lancement de la procédure d'update :

    <a href="." onclick="document.FormUpdateTECHNICIEN.NUMVERSION.value='{NUMVERSION}';document.FormUpdateTECHNICIEN.submit(); return false;">
    <img alt="Enregistrer" border="0" src="{$XMLC_PictosPath}ico_check.gif"/>
    </a>
    Température de l'eau : 28 °
    Température extérieure : 32°
    Température au fond du verre : 50° ~ 55°
    ------ Mangez des bananes ----------

  5. #5
    RDM
    RDM est déconnecté
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Points : 2 927
    Points
    2 927
    Par défaut
    voila donc ton problème est là. tu n'as qu'un seul formulaire et pleins de input et le XMLC_pivot donc forcément tu recois tous les champs. Tu devrais générer un formulaire par enregistrement, pour n'avoir dans chaque formulaire que les champs de l'enregistrement.
    RDM
    Tout Est Relatif
    Rubrique XMLRAD: http://xmlrad.developpez.com
    FAQ XMLRAD: http://xmlrad.developpez.com/faq/

  6. #6
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 124
    Points : 56
    Points
    56
    Par défaut C'est pas terrible comme solution !
    Le nb de champ de ma table n'est pas imprtant, seulement 3 affichage et 4 en modification car Tec_Replic est modifié de façon transparente, aussi ça vaut pas vraiment le coup de créer un formulaire pour ça !

    Il n'y a pas moyen de récupérer les valeurs modifiées pour un seul enreg ?

    On peut peut être se passer du Xmlc_Pivot ou du Match ?

    J'ai une 40aine de table de paramètres, je pensais faire une datagrid seulement pour les tables simple comme TECHNICIEN et associer un FormData à une DataGrid les table qui ont des liens maitre-détails, mais si pour chaque Datagrid il faut associé une FormData, c'est un peu galère !

    A part ça, j'ai une autre question, plutôt formatage de champ :

    Mon champ Code est 4 caractère alphanumérique en Caps Lock, comment le forcer ?
    1 / Forcer la case en minuscule ou majuscule
    2 / Forcer un formatage à la saisie : nb de caractères limités et forcer du numérique ou de l'alphanum ?

    Merci
    Température de l'eau : 28 °
    Température extérieure : 32°
    Température au fond du verre : 50° ~ 55°
    ------ Mangez des bananes ----------

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 284
    Points : 349
    Points
    349
    Par défaut
    Pour la casse tu peux utiliser un bout de code dans le BeforeXMLGRAM du service d'update ou d'insert.

    Par exemple en Delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Context.Values&#91;'Name'&#93; &#58;= WideUpperCase&#40;'Context.Values&#91;'Name'&#93;'&#41;;
    Il est possible de faire la meme chose en scripting coté serveur avec du JScript par exemple.

    Il est aussi possible de faire ca coté client en javascript, meme si c'est pas conseillé (probleme de navigateur, etc...)
    Pour le nombre de caractere limité, tu peux mettre l'attribut MAXLENGTH="n" sur ton input type="text". Attention ca ne fonctionne que sur IE5+.

    En delphi, tu peux utiliser le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var 
      S&#58; WideString;
    begin
      S &#58;= Context.Values&#91;'Name'&#93;;
      Context.Values&#91;'Name'&#93; &#58;= Copy&#40;S, 1, n&#41;;
    Tu peux ecrire du code javascript pour ignorer les caracteres saisis qui ne sont pas numerique ou alpha selon les cas. il faut récuperer le event.keyCode dans l'événement onKeyPress de ton input et faire le test. Regarde sur google pour trouver le code complet.

    Juste en note :
    Il est plutot conseillé de faire tout ce qui est code coté serveur, en delphi par exemple, pour s'assurer que tout se passera bien. Javascript est pratique, mais pas sûr. De plus, du javascript peut ne pas fonctionner sur tout type de navigateur, tandis que le code coté serveur est indépendant de tout ca. Delphi est aussi plus pratique pour la manipulation de chaines.
    Nicolas

  8. #8
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 124
    Points : 56
    Points
    56
    Par défaut Merci
    Je vais testé ça !

    Et pour l'histoire de la MàJ, t'as pas d'idée ?
    Température de l'eau : 28 °
    Température extérieure : 32°
    Température au fond du verre : 50° ~ 55°
    ------ Mangez des bananes ----------

  9. #9
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 124
    Points : 56
    Points
    56
    Par défaut rien ne marche !
    J'ai pris le prog sous Delphi, ds l'unit ki correspond à module Technicien j'ai insérer 2 Xmlcomponent (celle où Xml est inscrit dessus, pas celui composés de 4 losange de couleur différentes), je les ai nommé comme mes services de mon projet (update et insert) et dans les évènement BeforeXmlGram, j'ai tapé le code qui est fourni au-dessus, un pour la casse, l'autre pour limiter la taille. J'ai complier la DLL et je lance le prog.
    Je pensais ke les caractères en minuscules allaient se transformer en majuscule une fois la validation faite, mais rien ne se passe, i dem pour la limitation de taille. Qu'est ce que j'ai oublié de faire ?

    Et si je comprends l'autre composant XmlComponent, ça veut pas compiler !

    C'est pas simple !!!
    Température de l'eau : 28 °
    Température extérieure : 32°
    Température au fond du verre : 50° ~ 55°
    ------ Mangez des bananes ----------

  10. #10
    RDM
    RDM est déconnecté
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Points : 2 927
    Points
    2 927
    Par défaut
    donne le code EXACt que tu as mis dans le BeforeXMLGram
    RDM
    Tout Est Relatif
    Rubrique XMLRAD: http://xmlrad.developpez.com
    FAQ XMLRAD: http://xmlrad.developpez.com/faq/

  11. #11
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 124
    Points : 56
    Points
    56
    Par défaut code sous Delphi
    J'ai un module TECHNICIEN ds le quel j'ai des services DataGridTechnicien, InsertTEchnicien, UpdateTechnicien, DeleteTechnicien et FormTechnicien. Aussi sous Delphi, ds l'unit Technicien_unit, j'ai posé deux composants Xmlcomponent (InsertTechnicien et UpdateTechnicien) auquel j'ai affecté les procédures évènementielles BeforeXlmgram suivantes :

    procedure TTECHNICIEN.InsertTECHNICIENBeforeXMLGram(XMLGram: IXMLGram; InputDoc, OutputDoc: IXMLCursor; var Skip: Boolean);
    var
    name : widestring;
    begin
    Context.Values['CODTEC'] := WideUpperCase(Context.Values['CODTEC']);
    Name := Context.Values['NOMTEC'];
    Context.Values['NOMTEC'] := copy(Context.Values['NOMTEC'],1,5);
    end;


    les deux procédures sont identiques car je voulais juste tester !
    Température de l'eau : 28 °
    Température extérieure : 32°
    Température au fond du verre : 50° ~ 55°
    ------ Mangez des bananes ----------

  12. #12
    RDM
    RDM est déconnecté
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Points : 2 927
    Points
    2 927
    Par défaut
    donc la c'est CODTEC qui est en majuscule
    RDM
    Tout Est Relatif
    Rubrique XMLRAD: http://xmlrad.developpez.com
    FAQ XMLRAD: http://xmlrad.developpez.com/faq/

Discussions similaires

  1. boucle simple dans une dataGrid avec quand même une erreur !
    Par fkr dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 07/11/2005, 16h04
  2. [vbnet] problème de conversion dans une datagrid
    Par Jsh dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/09/2005, 13h40
  3. Afficher une dropdownlist lors de modif dans une DataGrid
    Par MiJack dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/11/2004, 18h42
  4. [VB.NET] Disparition scrollBar dans une DataGrid
    Par aphykite dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/10/2004, 11h29

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