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 25-09-2008 08:26:32

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

[RESOLU] Ajouter un contrôle dans un DataWindow

Bonjour à tous,

J'aimerais ajouter un contrôle DropDownListBox indépendant dans un DataWindow FreeForm.

Je n'arrive pas à ajouter un contrôle directement alors j'ai copier/coller un autre contrôle Text que je modifie avec Edit > Style Type > DropDownListBox et j'ai ajouté une liste de valeurs. Le problème c'est qu'il est lié aux données, j'aimerais faire la même chose mais qu'il ne soit pas lié aux données du DW.

D'avance merci.

PS: C'est mon premier post sur ce forum alors un peu d'indulgence avec mon ignorance ;-)

Fab

Dernière modification par thefab (25-09-2008 11:22:04)

Hors ligne

 

#2 25-09-2008 08:53:51

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] Ajouter un contrôle dans un DataWindow

Bonjour et

En passant par une pseudo-colonne, ça devrait marcher tout seul:

Dans la source de ta datawindow (bouton SQL):

Code: sql

SELECT ID_COLUMN,
       LIB_COLUMN,
       '' AS MY_DDLBOX // Pseudo-colonne
FROM   MY_TABLE


Ensuite, il ne te reste plus qu'à appliquer la valeur "Dropdownlistbox" à la propriété "Edit" de ta pseudo-colonne.


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

Hors ligne

 

#3 25-09-2008 08:58:29

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

Salut foon,

Merci pour ta réponse rapide, mais c'est mon premier dev en PB: heu c'est quoi une pseudo-colonne ?

J'ai essayé d'ajouter une colonne mais ça me demande de choisir un champs de la base de données...

Hors ligne

 

#4 25-09-2008 09:02:30

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] Ajouter un contrôle dans un DataWindow

Voir mon post ci-dessus. Il faut que tu passes en mode "syntaxe" (par défaut, tu es en mode "graphique") pour pouvoir afficher et modifier le SQL directement.


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

Hors ligne

 

#5 25-09-2008 09:09:29

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] Ajouter un contrôle dans un DataWindow

Note que le type de la pseudo-colonne générée est dépendant du type de la valeur initiale assignée dans le SQL à cette pseudo-colonne.
Dans mon exemple, la valeur assignée étant une chaîne de caractères vide, la pseudo-colonne est reconnues comme étant de type string par PB.
Pour un type numérique, il aurait fallu faire la déclaration suivante (par exemple):

Code: sql

SELECT ID_COLUMN,
       LIB_COLUMN,
       0 AS MY_DDLBOX // Pseudo-colonne de type numérique
FROM   MY_TABLE

Même remarque pour les autres types... (Il existe différents exemples sur ce forum)


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

Hors ligne

 

#6 25-09-2008 09:10:37

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

Re,

Ok je vois l'idée mais je ne peux pas éditer mon SQL. Je n'arrive pas à lui ajouter des colonnes il a l'air d'être en lecture seule ?

Hors ligne

 

#7 25-09-2008 09:18:53

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] Ajouter un contrôle dans un DataWindow

Et en mode "graphique", tu arrives à modifier ta requête?
Tu es sur quelle version de PB, quel SGBD, quel mode de connection à la base de données utilises-tu (Natif, ODBC...)?


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

Hors ligne

 

#8 25-09-2008 09:33:31

Cortex  
Modérateur
Lieu: Arlon
Date d'inscription: 08-02-2008
Messages: 194
Pépites: 6,904
Banque: 2,109,818,425,070

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

thefab a écrit:

Re,

Ok je vois l'idée mais je ne peux pas éditer mon SQL. Je n'arrive pas à lui ajouter des colonnes il a l'air d'être en lecture seule ?

Attention, es-tu sur d'être bien en mode syntaxe? Parce que souvent j'ai des collegues qui croient l'être et me disent que leur DW est en lecture seule, alors qu'il sont en mode graphique, sur l'onglet SQL... Menu Design->Syntax, ou quelque chose comme ca...

Hors ligne

 

#9 25-09-2008 10:01:08

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

Je suis passé en mode syntaxe et j'ai ma pseudo-colonne maintenant, merci.

Maintenant comment je récupère l'élément sélectionné de la liste ?

Code: pb

// OK
MessageBox("firstname", dw_contacts.GetItemString(1, "firstname"))

// Ne trouve pas le champs
MessageBox("filter", dw_contacts.GetItemString(1, "filter"))


PB 10
SQL Server 2008 Express Edition
Connection ODBC

NB :

Hors ligne

 

#10 25-09-2008 10:12:55

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] Ajouter un contrôle dans un DataWindow

Tu as bien pensé à faire un AcceptText avant ton GetItemString sur ta pseudo-colonne?


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

Hors ligne

 

#11 25-09-2008 11:21:22

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

Merci,

Tout fonctionne à présent, je ne doit pas utiliser GetItemString() mais GetItemNumber() car c'est une valeur numérique dans mon SQL

Code: sql

SELECT contact.id,   
contact.firstname,   
contact.lastname,
0 as filter
FROM contact   


Ça me retourne bien la valeur sélectionnée dans le DDLB

Code: pb

MessageBox("filter", String(dw_contacts.GetItemNumber(1, "filter")))


Un grand merci !

Fab

Hors ligne

 

#12 26-09-2008 06:22:35

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

Bonjour,

J'aimerais faire la même chose mais depuis une procédure stockée à présent !
Du coup je ne peux plus passer en mode SQL (il est désactivé), ni en mode syntaxe, je ne peux donc plus ajouter ma pseudo-colonne.

Edit: Est-ce que je peux ajouter ma pseudo-colonne dans "Column Specification", c'est bien la liste des champs disponibles dans le DW ?

J'aimerais pourtant simplement ajouter un contrôle DDLB sur un DW mais il n'apparaît pas dans la liste des contrôles ???

D'avance merci

PB 9 cette fois

Dernière modification par thefab (26-09-2008 06:44:28)

Hors ligne

 

#13 26-09-2008 06:45:59

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

Il faut ajouter la pseudo colonne dans le select de ta procedure stockée, ainsi que dans le curseur retourné si tu en retourne un.
Ensuite tu vas de nouveau sous l'onglet SQL ou COLUMNS de ta datawindow, et tu ajoute une colonne (clic-droit -> add). Ta nouvelle colonne doit pointer sur celle ajoutée dans la procédure stockée (même position dans la liste des colonnes), et ça devrait fonctionner

Si tu te contente d'ajouter la colonne sous Pb, et pas dans ta procédure stockée, je pense que ça fonctionnera aussi... Jusqu'au jour où ta procédure stockée sera modifiée (par exemple en ajoutant une colonne). Pour qu'il n'y aie pas d'ambiguïté, il est préférable de prendre la peine de l'ajouter dans ta procédure stockée aussi ;)

Une fois qu'une colonne est ajoutée sous Pb, tu peux ensuite la "dessiner" dans l'onglet "Design" de ta datawindow. L'inverse n'est pas possible !
Quand tu ajoute une colonne dans l'onglet COLUMS SPECIFICATIONS, le champ n'est pas automatiquement dessiné (en fait ce dépend du type de datawindow et de requête, mais bon...). Ça te permet d'avoir 10 colonnes, mais seulement 2 d'affichées par exemple.

Dernière modification par Nyphel (26-09-2008 07:19:48)

Hors ligne

 

#14 26-09-2008 09:09:21

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

Merci Nyphel.

Bon j'aurai quand même voulu éviter de devoir réécrire la procédure stockée juste pour ajouter une liste déroulante qui ne fait même pas partie des données...
C'est quand même assez hallucinant que l'on ne puisse pas ajouter simplement un contrôle indépendant dans un DW ! (pas de débat, merci)

J'ai ajouté une colonne en plus dans l'onglet COLUMS SPECIFICATIONS, j'ai ajouté un contrôle lié sur le DW, nickel ça fonctionne bien...
Mais (il y a toujours un mais) j'ai un autre DW (master/detail) basé sur la même procédure qui ne fonctionne plus lui !!! Grrr, j'ai essayé de lui ajouter aussi cette colonne supplémentaire mais il n'aime pas du tout (bizarre...)

Fab

Hors ligne

 

#15 26-09-2008 09:15:29

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

Il y a un truc que j'ai remarqué avec l'onglet COLUMNS SPECIFICATION : l'ordre des colonnes doit être exactement le même que l'ordre des colonnes retournées par ta procédure stockée. Il faut donc oublier les "Select * from..." ;).

Si jamais tu as 10 colonnes et que tu en ajoute une nouvelle en position 5, alors la plupart du temps il faut supprimer les colonnes 5-6-7-8-9-10, ajouter ta colonne en position 5 et rajouter de nouveau tes anciennes colonnes en positions 6-7-8-9-10-11... Ce qui est très contraignant, car quand tu supprime une colonne, les control associé est supprimé lui aussi dans l'onglet DESIGN !

Hors ligne

 

#16 26-09-2008 09:23:55

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] Ajouter un contrôle dans un DataWindow

thefab a écrit:

J'ai ajouté une colonne en plus dans l'onglet COLUMS SPECIFICATIONS, j'ai ajouté un contrôle lié sur le DW, nickel ça fonctionne bien...
Mais (il y a toujours un mais) j'ai un autre DW (master/detail) basé sur la même procédure qui ne fonctionne plus lui !!! Grrr, j'ai essayé de lui ajouter aussi cette colonne supplémentaire mais il n'aime pas du tout (bizarre...)

Fab

Problème de Sharedata lié au fait que tes colonnes ne sont pas identiques entre la master et la détail. Je te conseille de faire un sous PB à propos du sharedata, et de consulter les nombreux posts à ce sujet sur le forum.


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

Hors ligne

 

#17 26-09-2008 09:46:49

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

Salut,

Nyphel: oui effectivement c'est assez contraignant...

foon: non ce n'est pas ça le problème car ce ne sont pas des donnés partagées (à confirmer) et j'ai bien ajouter la même colonne dans les 2 DW !

En tout cas merci pour vos précieux conseils.

Fab

Hors ligne

 

#18 01-10-2008 10:18:51

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

Bonjour,

J'ai suivi les conseils de Nyphel et j'ai ajouté un paramètre supplémentaire a ma procédure stockée ainsi qu'un champs de plus a mon select de retour. Mais comment lui dire de passer ce paramètre maintenant ? Lorsque j'exécute le code il me dit que 46 paramètres sont attendus mais seulement 45 sont fournis: ou est fait le lien entre les noms des paramètres et les noms des contrôles de la fenêtre ?

Exemple: mon paramètre de la SP s'appelle @p_filtre et mon contrôle sur la fenêtre s'appelle filtre

Hors ligne

 

#19 01-10-2008 10:33:49

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

Je ne comprends pas bien pourquoi tu veux ajouter un paramètre à la procédure, m'enfin bon...
Si tu en as ajouté un à la procédure, il faut en effet l'ajouter à ta datawindow sous PowerBuilder : columns specifications -> clic-droit -> stored procedure -> arguments -> add
Ensuite tu ajoutes aussi ce paramètre lorsque tu appelles le retrieve sur ta datawindow, depuis la fenêtre qui contient cette datawindow : ma_datawindow.retrieve(parm1, parm2, ..., parm45, parm46)

Dernière modification par Nyphel (01-10-2008 10:35:26)

Hors ligne

 

#20 01-10-2008 11:05:06

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

Nyphel a écrit:

Je ne comprends pas bien pourquoi tu veux ajouter un paramètre à la procédure, m'enfin bon...

Parce que c'est toi qui me l'a conseillé :-) mais surtout car j'en ai besoin

Nyphel a écrit:

ma_datawindow.retrieve(parm1, parm2, ..., parm45, parm46)...

Oui, après coup je me suis rendu compte que ma question était totalement stupide, si si...

Maintenant il me dit: an illegal value of 50 given for parameter item, je passe 46 paramètres et je reçois 50 champs, je pense qu'il y a une erreur sur le dernier champs mais quoi ?? de quoi ça peut venir car le type de données est correct.

Le type est correct mais pas l'ordre, il m'a pas ajouté le dernier paramètre en dernière position !! Donc les paramètres 49 et 50 sont intervertis dans la vue master et detail, grrrr.

Merci d'avance

Dernière modification par thefab (01-10-2008 11:36:22)

Hors ligne

 

#21 01-10-2008 12:57:42

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

Heu non non... Il ne sert à rien d'ajouter un paramètre pour afficher une colonne virtuelle

il m'a pas ajouté le dernier paramètre en dernière position

Qui ça "il" ? Tu n'est pas en procédure stockée ?
En tous cas il est important de restaurer le bon ordre, même si c'est contraignant à faire :-/

Hors ligne

 

#22 01-10-2008 13:15:01

thefab  
Membre Geek
Lieu: Sion
Date d'inscription: 25-09-2008
Messages: 43
Pépites: 4
Banque: 0

Re: [RESOLU] Ajouter un contrôle dans un DataWindow

Nyphel a écrit:

Heu non non... Il ne sert à rien d'ajouter un paramètre pour afficher une colonne virtuelle

Oui mais du coup c'est plus une colonne virtuelle vu qu'elle se trouve dans le resultat du select.

En fait c'est un paramètre que je passe à la procédure stockée mais que je retourne aussi dans le jeu de résultats.

Nyphel a écrit:

Qui ça "il" ? Tu n'est pas en procédure stockée ?

Ben PB tiens ;-) j'ai ajouté une colonne Insert Row au lieu d'ajouter Append Row ce qui fait que ma colonne a été ajoutée ou je me trouvais, càd pas à la fin... evidement !

Nyphel a écrit:

En tous cas il est important de restaurer le bon ordre, même si c'est contraignant à faire :-/

Oui dommage car c'est vraiment contraignant.

Bon cette fois le problème est vraiment résolu, merci beaucoup... jusqu'à la prochaine ;-)

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22