Powerbuilder pour les completement Geeks !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 15-02-2013 10:00:40

eric69  
Membre Geek
Date d'inscription: 03-01-2013
Messages: 30
Pépites: 139
Banque: 0

[RESOLU] Datawindow considéré comme modifié à tord

Bonjour,

J'ai un problème au sein d'une datawindows qui contient de nombreuse dddw.
Mon soucis c'est que PB considère qu'il y a eu une modification quand je fais sur une ligne et que pourtant je ne change rien.
Je précise que ma datawindows est un pu complexe, c'est à dire que les dddw qu'elle contient son rafraichis à chaque changement de ligne en fonction des valeurs de la ligne.
Mais bon, la valeur finalement selectionné reste la même.

En mettant des MessageBox, je constate que :
a la premiere ligne de la méthode rowfocuschanged, le modified count est toujours à 0,
juste aprés (sans rien faire au milieu, il est à 1.

C'est est un peu de la magie. Savez vous ce que je fais de mal ou comment surcharger moi même la méthode qui détermine si une valeur a été modifié pour "l'améliorer".

Méthode RowFocusChanged
TRY
    Messagebox("rowFocusChanged", String(dw_attribuer_adressage_principal.modifiedcount( )))  ==> Ici le modifiedCount vaut 0
    Messagebox("rowFocusChanged2", String(dw_attribuer_adressage_principal.modifiedcount( ))) ==> Ici le modifiedCount vaut 1 (Pourquoi )

Dernière modification par eric69 (15-02-2013 15:57:51)

Hors ligne

 

#2 15-02-2013 10:54:35

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Datawindow considéré comme modifié à tord

Salut,

toujours difficile de répondre à ce genre de question sans connaitre tout le contexte mais d'après ce que tu dis ça me parait comparable à ceci et donc plutot normal comme comportement.

si j'ai un SingleLineEdit avec du code dans l'event modified,
-je tape "lulz" dedans puis je fais Enter => l'event se déclenche
-je fais Enter de nouveau => l'event ne se déclenche pas, normal, je n'ai pas fait de modif
-je fais backspace pour effacer le "z" puis je frappe (brutalement) la touche z, le texte affiché est donc de nouveau "lulz", je fais Enter => l'event se déclenche (il y a bien eu modification du texte, peu importe que le résultat de la modif soit le même que le résultat avant modif, il y a eu modif)

du coup au lieu d'utiliser modifiedcount() il afut que tu compare tes données avant/après pour savoir si tu dois updater ou pas.

My 2 cents.

Dernière modification par rincevent (15-02-2013 10:55:02)


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#3 15-02-2013 11:01:02

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Datawindow considéré comme modifié à tord

Regarde le DWStatus de tes champs et lignes dans ta datawindow principale. Il est probable que ceux-ci soient à DataModified! du fait de tes manipulations sur les changements de lignes.
Pour que le ModifiedCount() reste à 0, il faut que tous les DW Status des lignes et champs soient à NotModified!
En faisant cette recherche, tu pourras déterminer quel(s) est(sont) le(s) champ(s) incriminé(s).

PS:


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#4 15-02-2013 11:28:27

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Datawindow considéré comme modifié à tord

eric69 a écrit:

En mettant des MessageBox, je constate que :
a la premiere ligne de la méthode rowfocuschanged, le modified count est toujours à 0,
juste aprés (sans rien faire au milieu, il est à 1.

C'est est un peu de la magie.

Pas forcément, parce que l'affichage de la messagebox(), fait perdre le focus à ta ligne, et tu as peut-être des traitements qui s'effectuent à ce moment ou juste après quand la dw reprend le focus

Si tu mets dans une variable la valeur du ModifiedCount() une première fois, puis dans une seconde le second ModifiedCount(), tu devrais voir qu'il ne change pas.

Une bonne solution pour tracer des messages sans MessageBox, c'est d'utiliser la fonction système OutputDebugString() qui est une fonction du noyau windows permettant de logger des messages. Tout debugger en fonction à ce moment (Visual Studio, OllyDbg) ou simplement le viewer DebugView permettra d'écouter ces logs.

Il suffit de déclarer cette méthode en global ou local external function :

Code: pb

SUBROUTINE OutputDebugString (String lpszOutputString)  LIBRARY "kernel32.dll" ALIAS FOR "OutputDebugStringW";

Ensuite un simple appel à cette méthode permet d'envoyer le log (le viewer doit être démarré avant car ces logs sont perdus si personne n'écoute)

Code: pb

OutputDebugString("mon message de debug :" + string(ModifiedCount()))


eric69 a écrit:

Savez vous ce que je fais de mal

Comme dit, certainement un bout de code qui modifie une ligne, même pour y mettre des valeurs identiques, la ligne devient alors "modifiée". Tu peux connaître la ligne en question avec un GetNextModified() sur la DW

parce que sinon

eric69 a écrit:

ou comment surcharger moi même la méthode qui détermine si une valeur a été modifié pour "l'améliorer".

Comment dire...


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#5 15-02-2013 12:18:40

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Datawindow considéré comme modifié à tord

ça fait plusieurs fois que je le pense alors cette fois je le dis, Seki t'es vraiment un Killer


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#6 15-02-2013 13:29:59

eric69  
Membre Geek
Date d'inscription: 03-01-2013
Messages: 30
Pépites: 139
Banque: 0

Re: [RESOLU] Datawindow considéré comme modifié à tord

Bon, j'ai trouvé.
A un moment, je faisais un setitem d'une valeur vide dans une zone déjà vide.
Bon, je veux bien qu'il detecte que c'est quand même une modification.
La question, c'est pourquoi il le dis pas tout de suite.
Parce que mon affichage qui fais perdre le focus, je le faisais tout le temps et il se décide à me le dire que quand il a envie .
Pas simple pour trouver, le bout de code qui fait l'erreur.
Mais bon, en parcourant les lignes et colonne et en sachant qui pose problème, j'ai pu trouver le problème.
Merci de votre aide en tout cas.

Hors ligne

 

#7 15-02-2013 14:23:56

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Datawindow considéré comme modifié à tord

N'oublie pas le [RESOLU]


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#8 15-02-2013 14:47:56

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Datawindow considéré comme modifié à tord

rincevent a écrit:

ça fait plusieurs fois que je le pense alors cette fois je le dis, Seki t'es vraiment un Killer

Boaf, merci
Le coup de la perte de focus et de l’exécution possible d'évènements entre 2 MessageBox() c'est xlat qui en a eu l'idée 


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#9 15-02-2013 14:55:54

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Datawindow considéré comme modifié à tord

eric69 a écrit:

A un moment, je faisais un setitem d'une valeur vide dans une zone déjà vide.

Juste pour dire ( parce que c'est comme "goto" : si c'est mal utilisé la solution peut être pire que le problème) : il existe SetItemStatus(NotModified!) qui peut servir à persuader la DW qu'il ne s'est rien passé...
On peut modifier une colonne d'une ligne, ou toute une ligne.


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22