Répétez apres moi :J'aime PBAdonf. J'aime PBAdonf. J'aime PBAdonf.

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 26-09-2007 09:36:58

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Passage par référence ou par donnée ...

Bonjour,

Je suis confronté à un petit probleme dans mes dévellopements.
Dans mon code j'ai quelque chose du genre :

Code: pb

// Je suis sur un evenement de ma_fenetre_1
// et ma_structure est une structure globale
If this.dw_1.RowCount() > 0 Then
  ma_structure.une_fenetre = this
  open(ma_fenetre_2)
End If


Je vais dans le code de ma_fenetre_2 et tout d'abord dans l'evenement open (le premier à s'executer) :

Code: pb

// Variable d'instance de la fenetre
iw_ma_fenetre = ma_structure.une_fenetre
// On va afficher le nombre de ligne présent dans la datawindow de la fenetre récupérée
li_nb_row = iw_ma_fenetre.dw_1.RowCount()
MassageBox("debug",li_nb_row) // Testé et renvoi bien un chiffre > 0


Ensuite je me place dans un autre évenement nommé ue_init (pour l'instant je ne sais pas trop encore combien d'evenements se placent entre open et ue_init mais je suppose qu'ils ne sont pas très nombreux) :

Code: pb

li_nb_row = iw_ma_fenetre.dw_1.RowCount()
MassageBox("debug",li_nb_row) // Testé et renvoi 0


Comment peut on faire perdre les données d'une datawindow?
Est ce que la commande iw_ma_fenetre = ma_structure.une_fenetre crée un pointeur sur l'objet de la structure ou est ce qu'il en crée une copie? J'ai essayé de sauvegarder que la datawindow mais le résultat est le même

Merci pour vos réponses

Dernière modification par Nephtis (26-09-2007 09:40:06)


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#2 26-09-2007 09:51:17

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

Re: Passage par référence ou par donnée ...

MassageBox c'est une fonction supplémentaire dans la version Thaï de PB ?

sinon pour ta question comme ça je vois pas mais faudrait que tu sache ce qui se passe entre tes 2 events...

Dernière modification par rincevent (26-09-2007 09:51:59)


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 26-09-2007 09:52:24

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4659
Pépites: 945
Banque: 2,147,483,647
Site web

Re: Passage par référence ou par donnée ...

et depuis l'evenement ue_init, il n'y a rien ?

tu veux dire que l'objet iw_ma_fenetre est à null ? tu peux verifier ?


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#4 26-09-2007 10:00:36

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: Passage par référence ou par donnée ...

rincevent a écrit:

MassageBox c'est une fonction supplémentaire dans la version Thaï de PB ?

sinon pour ta question comme ça je vois pas mais faudrait que tu sache ce qui se passe entre tes 2 events...

Si seulement cette fonction pouvait exister
Je fais souvent cette faute de frappe, un lapsus calami?



pick ouic a écrit:

et depuis l'evenement ue_init, il n'y a rien ?

tu veux dire que l'objet iw_ma_fenetre est à null ? tu peux verifier ?

J'ai rajouté ces deux tests dans l'evenement ue_init mais aucune de ces messagebox n'est apparue

Code: pb

If (isNull(iw_ma_fenetre)) Then
    MessageBox("debug", "Attention la fenetre est nulle")
  End If
  
  If (isNull(iw_ma_fenetre.dw_1)) Then
    MessageBox("debug", "Attention la datawindow est nulle")
  End If

Dernière modification par Nephtis (26-09-2007 10:02:57)


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#5 26-09-2007 10:04:09

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,776,000
Site web

Re: Passage par référence ou par donnée ...

Attention aux variables globales pour stocker le nom de la fenêtre. Ca empêche de pouvoir gérer plusieures instances de la même fenêtre. C'est dommage. Le code suivant est préférable dans ce cas :

Code: pb

//définir lstr en local

If this.dw_1.RowCount() > 0 Then
  lstr.une_fenetre = this
  openwithparm(ma_fenetre_2, lstr)
End If


Dans la fenêtre ouverte

Code: pb

// Définir istr  en instance pour l'utiliser partout dans la fenêtre

istr = Message.PowerObjectParm

// On va afficher le nombre de ligne présent dans la datawindow de la fenetre récupérée
li_nb_row = istr.une_fenetre.dw_1.RowCount()


Sinon il parait qu'il existe un objet n_param qui permet de passer des objets d'une fenêtre à l'autre
http://pbadonf.fr/forum/viewtopic.php?pid=11577#p11577
http://pbadonf.fr/forum/viewtopic.php?pid=11610#p11610


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#6 26-09-2007 10:17:48

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

Re: Passage par référence ou par donnée ...

Chrnico a écrit:

Sinon il parait qu'il existe un objet n_param qui permet de passer des objets d'une fenêtre à l'autre
http://pbadonf.fr/forum/viewtopic.php?pid=11577#p11577
http://pbadonf.fr/forum/viewtopic.php?pid=11610#p11610

cadeau de la maison


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

Hors ligne

 

#7 26-09-2007 10:34:03

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: Passage par référence ou par donnée ...

Chrnico a écrit:

Attention aux variables globales pour stocker le nom de la fenêtre. Ca empêche de pouvoir gérer plusieures instances de la même fenêtre. C'est dommage. Le code suivant est préférable dans ce cas :

Code: pb

//définir lstr en local

If this.dw_1.RowCount() > 0 Then
  lstr.une_fenetre = this
  openwithparm(ma_fenetre_2, lstr)
End If


Dans la fenêtre ouverte

Code: pb

// Définir istr  en instance pour l'utiliser partout dans la fenêtre

istr = Message.PowerObjectParm

// On va afficher le nombre de ligne présent dans la datawindow de la fenetre récupérée
li_nb_row = istr.une_fenetre.dw_1.RowCount()


Sinon il parait qu'il existe un objet n_param qui permet de passer des objets d'une fenêtre à l'autre
http://pbadonf.fr/forum/viewtopic.php?pid=11577#p11577
http://pbadonf.fr/forum/viewtopic.php?pid=11610#p11610

L'application que je fais évoluer est déjà en mode "mono-fenêtre", tous les développements qui ont été apportés dessus ne permettent pas d'instancier deux fois la même fenêtre (c'est pas décrit comme évolution dans le devis donc je vais devoir m'en passer pour le moment)
Je reste toujours avec ce probleme de perte de données et il faut encore que je cheche qui se place entre mes deux évenements (je me pose une énigme pour moi tout seul )

Est ce que quelqu'un aurait une méthode pour savoir dans quels evenement on passe parce que pour le moment en mode debug je repasse 50 fois sur des evenement liés à la construction des objets présents sur cette fenêtre?

Dernière modification par Nephtis (26-09-2007 10:40:29)


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#8 26-09-2007 10:56:20

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: Passage par référence ou par donnée ...

J'ai testé tout les evenements codés de la fenetre et je n'ai que l'evenement resize qui se place entre les deux evenement ci dessus
Je continue en testant les evenements des différents objets placés sur ma fenetre ...


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#9 26-09-2007 11:02:59

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Passage par référence ou par donnée ...

Nephtis a écrit:

J'ai testé tout les evenements codés de la fenetre et je n'ai que l'evenement resize qui se place entre les deux evenement ci dessus
Je continue en testant les evenements des différents objets placés sur ma fenetre ...

une recherche sur iw_ma_fenetre ne serait pas plus rapide ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#10 26-09-2007 11:07:10

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: Passage par référence ou par donnée ...

eRaSorZ a écrit:

Nephtis a écrit:

J'ai testé tout les evenements codés de la fenetre et je n'ai que l'evenement resize qui se place entre les deux evenement ci dessus
Je continue en testant les evenements des différents objets placés sur ma fenetre ...

une recherche sur iw_ma_fenetre ne serait pas plus rapide ?

Ca c'est déjà fait et justement y a que dans les evenements open et init qu'ils sont utilisés (c'est pour ça que j'y comprends pas grand chose et que j'essaie de trouver l'endroit où a lieu la perte d'information)


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#11 26-09-2007 11:30:12

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: Passage par référence ou par donnée ...

Et "ma_structure" c'est quoi comme variable ?
Local, instance, shared, global ?

Tu devrais vraiment suivre le conseil de Chrnico et utiliser openwithParm


never let people work on more than one thing at once.

Hors ligne

 

#12 26-09-2007 11:39:51

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Passage par référence ou par donnée ...

shahin a écrit:

Et "ma_structure" c'est quoi comme variable ?
Local, instance, shared, global ?

d'ailleurs c'est pas pour jouer les puristes, mais en principe la portée des variables est donnée par le préfixe ( global : g, instance : i, local : l)...

shahin a écrit:

Tu devrais vraiment suivre le conseil de Chrnico et utiliser openwithParm


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#13 27-09-2007 08:02:57

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: Passage par référence ou par donnée ...

eRaSorZ a écrit:

shahin a écrit:

Et "ma_structure" c'est quoi comme variable ?
Local, instance, shared, global ?

d'ailleurs c'est pas pour jouer les puristes, mais en principe la portée des variables est donnée par le préfixe ( global : g, instance : i, local : l)...

shahin a écrit:

Tu devrais vraiment suivre le conseil de Chrnico et utiliser openwithParm

J'ai ecrit un condensé de mes scripts et ai changé le nom des variables pour que ça soit plus lisible et compréhensible. La structure est une structure globale donc accessible dans n'importe quel partie du code. Elle est composée de tableau des différents type de données (String, Integer, Window, ...) et d'autres champs tels que po_caller qui permet de stocker l'objet qui a appelé la fenetre sur laquelle on se trouve.
D'autre part il me serait difficile de justifier devant le client une extension de délai pour le developpement car avant que je ne commence certains développements sur cette pbl celà fonctionnait très bien.

Concernant le titre de la discussion j'ai tenté de déclarer un variable d'instance pour ma_fenetre_2 de type datawindow. Ainsi je suis sur qu'aucun autre bout de code ne vient ecraser ou modifier ma donnée. Cependant elle perd aussi toutes les données qu'elle possédait en arrivant sur l'évenement ue_init.
Est ce que le script suivant

Code: pb

idw_sav_dw = ma_structure.une_fenetre.dw_1

me crée un variable pointant sur ma_structure.une_fenetre.dw_1 ou est ce qu'il crée un copie de ma_structure.une_fenetre.dw_1?

Dernière modification par Nephtis (27-09-2007 08:03:12)


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#14 27-09-2007 08:14:50

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: Passage par référence ou par donnée ...

Nephtis a écrit:

Est ce que le script suivant

Code: pb

idw_sav_dw = ma_structure.une_fenetre.dw_1

me crée un variable pointant sur ma_structure.une_fenetre.dw_1 ou est ce qu'il crée un copie de ma_structure.une_fenetre.dw_1?

Ni l'un ni l'autre.
En pb, les objets (à l'exception des structures et des nvo autoinstantiate) se comportent comme des pointeurs.

Donc :
Str_foobar   ma_structure
crée une structure

idw_sav_dw = ma_structure.une_fenetre.dw_1
Puisqu'il s'agit d'une dw, donc d'un objet idw_sav_dw et ma_structure.une_fenetre.dw_1 sont la même chose




En relisant ton tout premier message, il apparait que ton pbl se situe entre les evt open et ue_init
->Essaye le débogueur

D'autre part essaye de renommer dw_1 en choississant un nom unique à ton application

Dernière modification par shahin (27-09-2007 08:23:02)


never let people work on more than one thing at once.

Hors ligne

 

#15 01-10-2007 14:48:32

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: Passage par référence ou par donnée ...

pour les problemes "non résolus" mais contournés (je suis reparti d'une version un tout petit peu plus ancienne et maintenant ça remarche) est ce qu'il faut mettre un tag spécifique dans le titre de la discussion?

Dernière modification par Nephtis (01-10-2007 14:49:08)


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22