|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : avril 2003 Messages : 123 ![]() |
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 ---------- |
|
|
00
|
|
|
#2 |
|
Membre à l'essai
![]() Inscription : avril 2003 Messages : 123 ![]() |
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 ---------- |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() |
oulah j'ai mal à la tete
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/ |
|
|
00
|
|
|
#4 |
|
Membre à l'essai
![]() Inscription : avril 2003 Messages : 123 ![]() |
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 ---------- |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() |
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/ |
|
|
00
|
|
|
#6 |
|
Membre à l'essai
![]() Inscription : avril 2003 Messages : 123 ![]() |
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 ---------- |
|
|
00
|
|
|
#7 | ||
|
Membre éclairé
![]() |
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 :
Context.Values['Name'] := WideUpperCase('Context.Values['Name']');
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 :
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 |
||
|
|
00
|
|
|
#8 |
|
Membre à l'essai
![]() Inscription : avril 2003 Messages : 123 ![]() |
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 ---------- |
|
|
00
|
|
|
#9 |
|
Membre à l'essai
![]() Inscription : avril 2003 Messages : 123 ![]() |
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 ---------- |
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() |
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/ |
|
|
00
|
|
|
#11 |
|
Membre à l'essai
![]() Inscription : avril 2003 Messages : 123 ![]() |
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 ---------- |
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() |
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/ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com