Pas de problème (pb), que du PowerBuilder (PB) ^^

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 20-04-2009 15:14:55

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

[RESOLU] Les datawindowchilds ...

Bonjour à tous,

Malgré que cela fait un petit moment que je code en PowerScript, je reste toujours un peu démuni face aux datawindowchilds.
Je vous expose mon problème :


J'ai une datawindow (que l'on appellera dw pour faire plus simple) qui contient un champ 'NOM'. dw n'est pas construite à partir d'un select, c'est une datawindow de type External.

Sur ce champ 'NOM' j'applique le style DropDownDataWindow.
La "DisplayColumn" sera le champ 'NOM'
La "DataColumn" sera le champ 'IDENTIFIANT'

La dropdowndatawindow (que l'on appellera dddw pour faire plus simple) est crée à partir d'une requête SQL de ce type :

Code: sql

SELECT NOM, PRENOM, IDENTIFIANT
FROM UTILISATEUR



Dans la fenêtre je suis amené à modifier l'utilisateur selectionné et affiché dans dw à partir d'un identifiant.

Et c'est là que je coince car je ne peux pas faire un Find() sur dw car elle ne contient pas le champ 'IDENTIFIANT'

Faut t-il forcer la sélection d'une ligne dans dddw ou bien y a t-il moyen d'utiliser la "DataColumn" de dw pour parvenir au résultat attendu?


Merci pour vos éclaircissements.

Dernière modification par Nephtis (21-04-2009 13:02:28)


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

Hors ligne

 

#2 20-04-2009 15:37:37

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

Re: [RESOLU] Les datawindowchilds ...

Sur ce champ 'NOM' j'applique le style DropDownDataWindow.
La "DisplayColumn" sera le champ 'NOM'
La "DataColumn" sera le champ 'IDENTIFIANT'

en principe c'est l'identifiant qui est stocké dans dw et le nom qui est affiché...


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

Hors ligne

 

#3 21-04-2009 07:14:13

micmx  
Membre Geek
Date d'inscription: 02-02-2009
Messages: 84
Pépites: 1,028
Banque: 1,383,846,119

Re: [RESOLU] Les datawindowchilds ...

Pourquoi désires-tu faire un find ?

le nom du champs de dw (nom) prête un peu à confusion à mon sens, mais soit..
Si tu veux récupérer l'identifiant sélectionné, il suffit de faire

Code: pb

valeur = dw.object.nom[1]

Si tu veux faire un find :

Code: pb

dw.getchild( "NOM", ldwc_nom)

ls_chaine = "IDENTIFIANT = " + tonidentifiant? 
ll_row = ldwc_nom.Find(ls_chaine, 1,ldwc_nom.rowcount( ) )

Et là tu récupères le numéro de ligne où se trouve l'identifiant que tu cherches..
Ensuite, si tu veux avoir son nom par exemple..

Code: pb

ls_nomrecherche =  ldwc_nom.getitemString(ll_row,"NOM")
ls_prenomrecherche =  ldwc_nom.getitemString(ll_row,"PRENOM")

Voilà, j'espère avoir pu t'aider et ne pas m'être trompé !

Bonne chance


NB :

Dernière modification par micmx (21-04-2009 07:15:28)

Hors ligne

 

#4 21-04-2009 08:37:13

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: [RESOLU] Les datawindowchilds ...

Peut être qu'en le transformant en exemple plus parlant cela vous aidera à comprendre mes besoins :

dddw liste les utilisateurs de PBADonf (Pseudo + Nom/Prenom).
Dans ce cas il affiche le nom des utilisateurs ("DisplayColumn") mais stocke leur pseudo ("DataColumn")



erasorz a écrit:

en principe c'est l'identifiant qui est stocké dans dw et le nom qui est affiché...

Je pensais que c'était ce que je faisait : identifiant comme "DataColumn" et nom comme "DisplayColumn". Il y a peut être une nuance qui m'a échappée




Quand je sélectionne un utilisateur dans dw, une autre datawindow m'indique d'autres informations sur l'utilisateur (elle prend notamment en paramètre le pseudo de l'utilisateur récupéré à l'aide d'un GetItemString() sur dw)

La fenêtre me permet tout de même de modifier la fiche d'information des utilisateurs.
Imaginons que je change le pseudo d'un utilisateur par un autre pseudo existant, comment faire pour forcer l'affichage du nouveau pseudo dans dw?

Un dw.Find("pseudo="+ls_pseudo) ne fonctionne pas car dw ne contient pas la colonne "Pseudo"

Dernière modification par Nephtis (21-04-2009 08:40:23)


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

Hors ligne

 

#5 21-04-2009 08:42:27

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: [RESOLU] Les datawindowchilds ...

Dans ton exemple, le colonne identifiant est dans la dw, l'identifiant et le nom sont dans la dddw.
Lorsque la dw affiche l'identifiant qu'elle contient, la dddw remplace automatiquement à l'affichage la valeur par le libellé  mais la valeur seule reste dans dw(le nom dans ton exemple).
Donc pour lire ou écrire une valeur dans la dw, il faut utiliser un getitemnumber(row,"identifiant") ou un setitem(row,"identifiant",id).
Maintenant si le but est de rechercher le nom (dans la dddw) correspondant à l'identifiant stocké dans la dw, il faut utiliser la méthode Lookupdisplay. Pour recherche un autre nom que celui affiché (et son identifiant) dans la dddw, il faut faire un find sur la dddw (voir script de mimcx auquel j'ajoute la déclaration de ldwc_nom... )_

Code: pb

datawindowschild ldwc_nom

dw.getchild( "NOM", ldwc_nom)

ls_chaine = "IDENTIFIANT = " + tonidentifiant? 
ll_row = ldwc_nom.Find(ls_chaine, 1,ldwc_nom.rowcount( ) )

Si le but est de mettre à jour d'autres champs de la dw à partir de la dddw.
Il faut déclencher un rechargement la dddw si des modifications sont faites parallèlement par un autre écran sur les données contenues dans la dddw.

Code: pb

datawindowschild ldwc_nom

dw.getchild( "NOM", ldwc_nom)

ldwc_nom.retrieve()

Tu dois donc tu peux (Kant)

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

Hors ligne

 

#6 21-04-2009 10:35:40

micmx  
Membre Geek
Date d'inscription: 02-02-2009
Messages: 84
Pépites: 1,028
Banque: 1,383,846,119

Re: [RESOLU] Les datawindowchilds ...

Juste un petit truc

La déclaration que tu as ajoutée comporte une petite faute de frappe ^^

Code: pb

datawindowchild ldwc_nom


un petit "s" de trop ;)

Hors ligne

 

#7 21-04-2009 11:54:14

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: [RESOLU] Les datawindowchilds ...

micmx a écrit:

Juste un petit truc

La déclaration que tu as ajoutée comporte une petite faute de frappe ^^

Code: pb

datawindowchild ldwc_nom


un petit "s" de trop ;)

Oui, j'ai des gros doigts de temps en temps
et en plus je ctr+c ctrl+v à tout va !


Tu dois donc tu peux (Kant)

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

Hors ligne

 

#8 21-04-2009 12:25:44

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: [RESOLU] Les datawindowchilds ...

En fait je veux forcer l'affichage d'un certain utilisateur dans dw, comme si l'utilisateur l'avait sélectionné lui même.

Je peux faire un SetItem dans dw, l'affichage sera bon mais la "DataColumn" sera égale à la valeur de mon SetItem, par exemple :

Pseudo | Nom
Toto     | Albert

Code: pb

dw.SetItem(1, "nom", "Albert")
// Le résultat m'affiche correctement Albert dans dw
MessageBox("debug", dw.GetItemString(1, "nom"))
// La chaîne renvoyée est "Albert" alors qu'il faudrait que ce soit "Toto" qui soit renvoyé

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

Hors ligne

 

#9 21-04-2009 12:45:31

micmx  
Membre Geek
Date d'inscription: 02-02-2009
Messages: 84
Pépites: 1,028
Banque: 1,383,846,119

Re: [RESOLU] Les datawindowchilds ...

Si Pseudo est ta DATACOLUMN

fait le avec :

Code: pb

dw.setItem(1,"nom","Toto")

ça t'affichera bien ALBERT (et non pas TOTO)
et lorsque tu feras

Code: pb

MessageBox("debug", dw.GetItemString(1, "nom"))

ça te retournera TOTO

Hors ligne

 

#10 21-04-2009 12:55:14

micmx  
Membre Geek
Date d'inscription: 02-02-2009
Messages: 84
Pépites: 1,028
Banque: 1,383,846,119

Re: [RESOLU] Les datawindowchilds ...

Code: pb

datawindowschild ldwc_nom
string ls_sonNom,ls_sonPseudo

dw.getchild( "NOM", ldwc_nom)

// Ici le nom que je veux rechercher
ls_sonNom="Albert"

// Je cherche le numéro de ligne où se trouve le nom
ls_chaine = "NOM = " +  ls_sonNom
ll_row = ldwc_nom.Find(ls_chaine, 1,ldwc_nom.rowcount( ) )

// Si le nom se trouve dans la dddw
if(ll_row>0) then
  // je récupère son pseudo
  ls_sonPseudo=ldwc_nom.getItemString(ll_row,"pseudo")
  // je le désigne comme élément courant de ma DW
  dw.setItem(1,"nom",ls_sonPseudo)
end if


Je pense qu'avec ça tu devrais tout comprendre

Dernière modification par micmx (21-04-2009 12:55:39)

Hors ligne

 

#11 21-04-2009 13:01:02

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: [RESOLU] Les datawindowchilds ...

Merci micmx

Le seul truc que je n'arrivais pas encore à comprendre était que dw allait chercher directement le nom à afficher dans dddw en fonction de la valeur de la variable qu'on lui passait dans le SetItem()


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

Hors ligne

 

#12 21-04-2009 13:05:39

micmx  
Membre Geek
Date d'inscription: 02-02-2009
Messages: 84
Pépites: 1,028
Banque: 1,383,846,119

Re: [RESOLU] Les datawindowchilds ...

J'aurais bien mérité quelques pépites pour une fois
Ben quoi.. dans deux semaines ça sera déjà fini pour moi le PB

Pas de quoi en tout cas ;)
a+

Hors ligne

 

#13 21-04-2009 13:45:02

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: [RESOLU] Les datawindowchilds ...

Regarde bien ton compte en banque


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

Hors ligne

 

#14 21-04-2009 13:58:35

micmx  
Membre Geek
Date d'inscription: 02-02-2009
Messages: 84
Pépites: 1,028
Banque: 1,383,846,119

Re: [RESOLU] Les datawindowchilds ...

wow, ça change !

sympa !

Ps: arnaque cette loterie

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22